#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的时候,串口没有任何回复,请问各位是怎么回事呢?
多谢!! |