Здравствуйте, уважаемые разработчики. Подскажите, пожалуйста новичку.
Разрабатываю устройство на основе двух МК (meg48 и mega48P). Один изх них (mega48P) использую для обработки кнопок, и управления. Другой (mega48) - торлько для индикации (7-сегментный СИД-дисплей). Связь между ними осуществляю по UART. Индикационный контроллер (mega48) нработает в режиме SLAVE и только слушает UART. Контроллер управления (mega48P) работает в режиме MASTER и только передаёт сообщения SLAVE . Приём сообщений SLAVE осуществляет по прерыванию RX_Complete.
В SLAVE объявляю прерывание по приёму .equ URXCaddr rjmp USART_Receive
Инициализация UARTа в SLAVE :
USART_Init: clr temp out UBRR0H, temp ldi temp, $C ;частота тактирования 1МГц, содержимое UBRR0H=0, UBRR0L=12 => скорость передачи данных 4800bps out UBRR0L, temp ldi temp, (1<<RXEN0) ; только приёмник out UCSR0B,temp ldi temp, (1<<USBS0)|(3<<UCSZ00); формат передачи: 8data, 2stop bit out UCSR0C,temp
Инициализация UARTа MASTER :
USART_Init: clr temp out UBRR0H, temp ldi temp, $C ;частота тактирования 1МГц, содержимое UBRR0H=0, UBRR0L=12 => скорость передачи данных 4800bps out UBRR0L, temp ldi temp, (1<<TXEN0) ; только передатчик out UCSR0B,temp ldi temp, (1<<USBS0)|(3<<UCSZ00); формат передачи: 8data, 2stop bit out UCSR0C,temp
Приём данных SLAVEом :
USART_Receive: sbis UCSR0A, RXC0 ; Wait for data to be received rjmp USART_Receive in temp, UDR0; Get and return received data from buffer reti
Передача данных MASTERом :
USART_Transmit: sbis UCSR0A,UDRE0 ; Wait for empty transmit buffer rjmp USART_Transmit ldi temp, 5 out UDR0,temp ; sends the data ret
Кварцевый резонатро не использую Фьюзы в обоих МК не программировал, поэтому источник тактирования обоих контроллеров - внутренний, установленный по умолчанию (The device is shipped with internal RC oscillator at 8.0MHz and with the fuse CKDIV8 programmedб resulting in 1.0MHz system clock.).
Ноги RxD и TxD обоих МК перекрестил - RxD MASTERа скоммутировал с TxD SLAVE, ТxD MASTERа скоммутировал с RxD SLAVE. Целостность линий RxD MASTERа -> TxD SLAVE и ТxD MASTERа -> RxD SLAVE тестировал мультиметром непосредственно на лапах контроллеров.
Всё компилируется, но не работает, сволочь. В чём может быть причина?
Заранее спасибо за помощь
P.S. Си владею плохо - буду очень благодарен за примеры на асме
|