|
Контроллер выполняет только две операции:
1. При приеме байта по SPI он его отправляет в RS-485
2. При приеме байта по RS-485 он его отправляет в SPIКонтроллер по SPI инициализирован как Slave, Макросы RX_On, RX_Off переключают микросхему RS-485 в режимы прием передача.
Проблема состоит в том, что при принятии байта по UART, контроллер отправляет его по SPI, но при этом, выйдя из прерывания почему - то в главном цикле снова обнаруживает флаг SPIF, и исполняет действие отправки данных в UART
main:
sbis SPSR,SPIF ; Ждем пока не прийдет новый байт по SPI
rjmp main
cbi SPSR,SPIF ; Сбрасываем ФлагRS_On ; Включаем RS-485 на передачу
in temp,SPDR ; Получаем байт из регистра SPI
out UDR, temp ; Отправляем байт в UARTrjmp main
; Исполнение прерывания RX_Compl
UART_RX:
in temp,SREG
push tempin temp,UDR ; Принимаем байт из UART
out SPDR,temp ; Ложим байт в регистр SPIsbi portB,EV ; Взводим сигнал для
; мастера о наличии нового байта
UART_RX_1:sbis SPSR,SPIF ; Ждем пока мастер заберет данные
rjmp UART_RX_1cbi portB,EV ; Сбрасываем сигнал наличия новых данных
cbi SPSR,SPIF ; Сбрасываем флаг SPIFpop temp
out SREG, temp
reti
; Исполнение прерывания TX_Compl
UART_TX:
RS_Off ; Отключаем RS-485reti
>>
E-mail: info@telesys.ru