Добрый день всем! Задача такая: - передать 8 байт в контроллер - распределить по регистрам - сравнить один из байтов с число, если совпадает отправить полученную посылку обратно
долго бьюсь, может кто подскажет где не так делаю. отправляю данные, а в ответ не то приходит
.device ATmega8
.include "C:Program Files (x86)AtmelAVR Studio 5.1extensionsAtmelAVRAssembler2.1.51.17avrassemblerincludem8def.inc" .list .nolist ;=================================== ; Объявления: .def Counter1= r0 .def Data_X= r1 .def adr_dev= r2 .def funct= r3 .def reg_H= r4 .def reg_L= r5 .def Dt_H= r6 .def Dt_L= r7 .def CRC_L= r8 .def CRC_H= r9
.def Counter2= r10 .def adr= r11 .def CNT= r12 .def CRC16_H= r13 .def CRC16_L= r14
.def Counter_RX= r20 .def SaveSREG= r21
;=================================== ; Начало программы
rjmp Init ; Первая выполняемая команда
;=================================== Init: ldi Counter_RX, 8
uart_init: LDI r16, 71 out UBRRL, r16 LDI r16, 0 out UBRRH, r16
ldi r16,0 out UCSRA,r16
;Прерывания запрещены,прием-передача разрешены ldi r16, (1<<RXEN)|(1<<TXEN)|(1<<RXCIE)|(0<<TXCIE)|(0<<UDRIE) out UCSRB,r16
;Формат кадра 8бит ldi r16, (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1) out UCSRC,r16
;=================================== Start: SBIS UCSRA,RXC rjmp Start; rjmp rx_ok
priem_ok: ldi r17, 0x10 cp funct, r17 breq otpravka rjmp Start
;отправка otpravka: ldi Counter_RX, 8
otpravka_ok: cpi Counter_RX, 0 breq Start SBIS UCSRA, UDRE; rjmp otpravka_ok; cpi Counter_RX, 8 breq otprav_adr cpi Counter_RX, 7 breq otprav_funct cpi Counter_RX, 6 breq otprav_adr_H cpi Counter_RX, 5 breq otprav_adr_L cpi Counter_RX, 4 breq otprav_dt_H cpi Counter_RX, 3 breq otprav_dt_L cpi Counter_RX, 2 breq otprav_CRCH cpi Counter_RX, 1 breq otprav_CRCL rjmp Start
otprav_adr: mov r16, adr_dev dec Counter_RX clr adr_dev rjmp Buff_Push otprav_funct: mov r16, funct dec Counter_RX clr funct rjmp Buff_Push otprav_adr_H: mov r16, reg_H dec Counter_RX clr reg_H rjmp Buff_Push otprav_adr_L: mov r16, reg_L dec Counter_RX clr reg_L rjmp Buff_Push otprav_dt_H: mov r16, Dt_H dec Counter_RX clr Dt_H rjmp Buff_Push otprav_dt_L: mov r16, Dt_L dec Counter_RX clr Dt_L rjmp Buff_Push otprav_CRCH: mov r16, CRC_H dec Counter_RX clr CRC_H rjmp Buff_Push otprav_CRCL: mov r16, CRC_L dec Counter_RX clr CRC_L rjmp Buff_Push
; запись в буфер отправки Buff_Push: out UDR, r16 rjmp otpravka_ok
;прием rx_ok: ldi Counter_RX, 8 rjmp rx_ok1
rx_ok1: cpi Counter_RX, 0 breq priem_ok
in r16, UDR SBIC UCSRA,RXC rjmp rx_ok1
cpi Counter_RX, 8 breq priem_adr cpi Counter_RX, 7 breq priem_funct cpi Counter_RX, 6 breq priem_adr_H cpi Counter_RX, 5 breq priem_adr_L cpi Counter_RX, 4 breq priem_dt_H cpi Counter_RX, 3 breq priem_dt_L cpi Counter_RX, 2 breq priem_CRCH cpi Counter_RX, 1 breq priem_CRCL rjmp priem_ok
priem_adr: mov adr_dev, r16 dec Counter_RX clr r16 rjmp rx_ok1 priem_funct: mov funct, r16 dec Counter_RX clr r16 rjmp rx_ok1 priem_adr_H: mov reg_H, r16 dec Counter_RX clr r16 rjmp rx_ok1 priem_adr_L: mov reg_L, r16 dec Counter_RX clr r16 rjmp rx_ok1 priem_dt_H: mov Dt_H, r16 dec Counter_RX clr r16 rjmp rx_ok1 priem_dt_L: mov Dt_L, r16 dec Counter_RX clr r16 rjmp rx_ok1 priem_CRCH: mov CRC_H, r16 dec Counter_RX clr r16 rjmp rx_ok1 priem_CRCL: mov CRC_L, r16 dec Counter_RX clr r16 rjmp rx_ok1
|