#include <iom16v.h> #include <macros.h> #define uchar unsigned char #define uint unsigned int #pragma interrupt_handler uart_rx:12 uchar rdata,flag=0; void delay(uint ms) { uint i,j; for(i=0;i<ms;i++) { for(j=0;j<1141;j++); } } void uart_init() { UCSRB = 0x00; //disable while setting baud rate UCSRA = 0x00; UCSRC = BIT(URSEL) | 0x06; UBRRL = 0x01; //set baud rate lo UBRRH = 0x00; //set baud rate hi UCSRB = 0x00; } void uart_sendB(uchar data) { while(!(UCSRA&(BIT(UDRE)))) ; UDR=data; while(!(UCSRA&(BIT(TXC)))); UCSRA|=BIT(TXC); } void uart_rx() { UCSRB&=~BIT(RXCIE); rdata=UDR; flag=1; UCSRB|=BIT(RXCIE); } void main() { uart_init(); while(1) { if(flag) { uart_sendB(rdata); flag=0; } } } 我这样写可以通过串口助手发什么收什么,但是我现在想改用如下的: 比如当我收到0xAB的时候,我让串口回复给我0x88 我写成这样 void uart_rx() { UCSRB&=~BIT(RXCIE); rdata=UDR; if(rdata == 0xAB) flag=1; UCSRB|=BIT(RXCIE); } void main() { uart_init(); while(1) { if(flag) { uart_sendB(0X88); flag=0; } } } 但是当我发送0XAB的时候,串口没有任何回复,请问各位是怎么回事呢? 多谢!! |