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

  • Автор темы _Leo_
  • Дата начала
L

_Leo_

#1
Задача: по 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
 
04.09.2006
2 566
3
#2
Для: _Leo_
Врядли на форуме найдутся спецы, способные тебе помочь :)
 
S

sadgb

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