Вот мой, но не работает он:
Код: Выделить всё
.include "m8def.inc" ; Используем ATMega8
.MACRO outi
LDI R16,@1
OUT @0,R16
.ENDMACRO
.equ XTAL = 8000000
.equ baudrate = 31250
.equ bauddivider = XTAL/(16*baudrate)-1
.CSEG
.ORG 0x0000
RJMP Reset
.ORG INT0addr ; External Interrupt Request 0
RETI
.ORG INT1addr ; External Interrupt Request 1
RETI
.ORG OC2addr ; Timer/Counter2 Compare Match
RETI
.ORG OVF2addr ; Timer/Counter2 Overflow
RETI
.ORG ICP1addr ; Timer/Counter1 Capture Event
RETI
.ORG OC1Aaddr ; Timer/Counter1 Compare Match A
RETI
.ORG OC1Baddr ; Timer/Counter1 Compare Match B
RETI
.ORG OVF1addr ; Timer/Counter1 Overflow
RETI
.ORG OVF0addr ; Timer/Counter0 Overflow
RETI
.ORG SPIaddr ; Serial Transfer Complete
RETI
.ORG URXCaddr ; USART, Rx Complete
RETI
.ORG UDREaddr ; USART Data Register Empty
RETI
.ORG UTXCaddr ; USART, Tx Complete
RETI
.ORG ADCCaddr ; ADC Conversion Complete
RETI
.ORG ERDYaddr ; EEPROM Ready
RETI
.ORG ACIaddr ; Analog Comparator
RETI
.ORG TWIaddr ; 2-wire Serial Interface
RETI
.ORG SPMRaddr ; Store Program Memory Ready
RETI
.ORG INT_VECTORS_SIZE ; Конец таблицы прерываний
uart_init: LDI R18, low(bauddivider)
OUT UBRRL,R18
LDI R18, high(bauddivider)
OUT UBRRH,R18
LDI R18,0
OUT UCSRA, R18
LDI R18, (1<<RXEN)|(1<<TXEN)|(0<<RXCIE)|(0<<TXCIE)
OUT UCSRB, R18
LDI R18, (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1)
OUT UCSRC, R18
RET
tx_sent:
uart_snt: SBIS UCSRA,UDRE
RJMP uart_snt ; ждем готовности - флага UDRE
OUT UDR, R16
RET
delay:
ldi r16,30
delay1:
ldi r17,200
delay2:
ldi r18,200
delay3:
dec r18
brne delay3
dec r17
brne delay2
dec r16
brne delay1
ret
Reset: OUTI SPL,low(RAMEND)
RCALL uart_init ;
SBI DDRB,1
Main:
LDI R16, 0x90
RCALL tx_sent
LDI R16, 0x3C
RCALL tx_sent
LDI R16, 0x7F
RCALL tx_sent
RCALL delay
LDI R16, 0x80
RCALL tx_sent
LDI R16, 0x3C
RCALL tx_sent
LDI R16, 0x7F
RCALL tx_sent
RCALL delay
RJMP Main

