Программирование Avr

Тема в разделе "Hardware", создана пользователем _Leo_, 25 окт 2007.

  1. _Leo_

    _Leo_ Гость

    Задача: по UART принимается 1 байт, этот байт нужно отослать по SPI c 1-го стенда STK500, на второй стенд STK500 который

    также принимает его по SPI и выводит этот байт на светодиоды.

    Принять по UART получилось, выдать по SPI c 1-го стенда также (осциллографом все сигналы проверил), но вот принимать и/или

    отображать второй стенд не желает.
    Микроконтроллер Atmega 16.


    КОД МАСТЕРА:

    ;--------UART------------
    LDI R16,0x00
    OUT 0x1A,R16 ;ddra //КНОПКИ
    LDI R16,0xFF
    OUT 0x14,R16 ;ddrc //СВЕТОДИОДЫ
    LDI R16,0x10
    OUT 0x0A,R16 ;ucr
    LDI R16,0x17
    OUT 0x09,R16 ;ubrr 3,69 MHz 9600 bod/sec
    z1:
    SBIS 0x0B,7 ;ozhidaet flag okonchaniya priema
    JMP z1

    IN R20,0x0C ;schitivaem bait
    OUT 0x15,R20 ;portc
    ;------------------------------



    ;-------Master-------
    LDI R16,0xBF
    OUT 0x17,R16 ;ddrb
    LDI R16,0x40
    OUT 0x11,R16 ;ddrd
    LDI R16,0x40
    OUT 0x12,R16 ;portd !ss=1
    LDI R16,0x52
    OUT 0x0D,R16 ;SPCR

    a1:
    SBIC 0x19,6
    JMP a1

    a2:
    SBIS 0x19,6
    JMP a2

    LDI R16,0x00
    OUT 0x12,R16 ;portd !ss=0

    LDI R16,0x00
    q1:
    inc r16
    cpi r16,0x20
    brne q1

    OUT 0x0F,R20 ;SPDR peredaem bait
    z2:
    SBIS 0x0E,7 ;ozhidaet flag okonchaniya peredachi
    JMP z2


    LDI R16,0x00
    q2:
    inc r16
    cpi r16,0x20
    brne q2

    LDI R16,0x40
    OUT 0x12,R16 ;portd !ss=1
    ;--------------------------




    КОД СЛЕЙВА:

    LDI R16,0xFF
    OUT 0x14,R16 ;ddrc //СВЕТОДИОДЫ
    LDI R16,0x4F
    OUT 0x17,R16 ;ddrb
    LDI R16,0x40
    OUT 0x0D,R16 ;SPCR

    z2:
    SBIS 0x0E,7 ;ozhidaet flag okonchaniya peredachi
    JMP z2

    IN R16,0x0F ;SPDR
    OUT 0x15,R16 ;portc



    Проект разработан в AVR Studio.
    Оба стенда рабочии, проверено вот такой программой:

    //выдаёт с порта D тестовый байт AA и принимает его по SPI того же стенда, D.0=!SS, D.1=SCK, D.2=MOSI



    LDI R26,0x60
    LDI R27,0x00

    LDI R21,0x01
    ST X+,R21
    LDI R21,0x00
    ST X+,R21
    LDI R21,0x06
    ST X+,R21
    LDI R21,0x04
    ST X+,R21
    LDI R21,0x02
    ST X+,R21
    LDI R21,0x00
    ST X+,R21
    LDI R21,0x06
    ST X+,R21
    LDI R21,0x04
    ST X+,R21
    LDI R21,0x02
    ST X+,R21
    LDI R21,0x00
    ST X+,R21
    LDI R21,0x06
    ST X+,R21
    LDI R21,0x04
    ST X+,R21
    LDI R21,0x02
    ST X+,R21
    LDI R21,0x00
    ST X+,R21
    LDI R21,0x06
    ST X+,R21
    LDI R21,0x04
    ST X+,R21
    LDI R21,0x02
    ST X+,R21
    LDI R21,0x00
    ST X+,R21
    LDI R21,0x04
    ST X+,R21
    LDI R21,0x05
    ST X+,R21

    LDI R16,0x00
    OUT 0x1A,R16 ;ddra in
    LDI R16,0xFF
    OUT 0x14,R16 ;ddrc out
    LDI R16,0xFF
    OUT 0x11,R16 ;ddrd out
    LDI R16,0x01
    OUT 0x12,R16 ;portd !ss=1
    LDI R20,0x00

    LDI R28,0x60
    LDI R29,0x00

    a1:
    SBIC 0x19,6
    JMP a1
    a2:
    SBIS 0x19,6
    JMP a2

    LDI R16,0x4F
    OUT 0x17,R16 ;ddrb
    LDI R16,0x44
    OUT 0x0D,R16 ;SPCR

    M1:
    LD R19,Y+
    OUT 0x12,R19 ;portd
    INC R20
    LDI R21,0x00

    M3:
    INC R21
    CPI R21,0x0E
    BRNE M3

    CPI R20,0x14
    BRNE M1

    z1:
    SBIS 0x0E,7 ;ozhidaet flag okonchaniya priema
    JMP z1

    IN R16,0x0F ;SPDR
    OUT 0x15,R16 ;portc
     
  2. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Для: _Leo_
    Врядли на форуме найдутся спецы, способные тебе помочь :)
     
  3. sadgb

    sadgb Гость

    ну допустим с уартом я работал но там был микропроцессор 80с535 infineum
    да и прога у меня была для мк на си и комповская часть была на си
    в плане того то ты просишь и правда вряд ли тут кто поможет . справшивай в своём окружении )
     
Загрузка...

Поделиться этой страницей