|
mega128 16AU的485通信中断接收的程序,调试通过,晶振为外部16M,MAX485的DE和RE短接连PC0口,
程序如下:
#define SEND_485 PORTC|=0x01
#define READ_485 PORTC&=0xfe
void Usart1_init(void) //16Mhz频率,设置波特率9.6k,8位数据位,无校验,接收发送使能,1位停止位
{
UBRR1H=0;
UBRR1L=103;
UCSR1B=(1<<RXCIE1)|(1<<RXEN1)|(1<<TXEN1); //发送接收使能,使用中断方式,
UCSR1C=(1<<UCSZ10)|(1<<UCSZ11); //0x06 8位数据,1位停止位,无校验
}
void Usart1_transmit(unsigned char c) //查询方式发送接收字符函数
{
SEND_485;
DelayBus();DelayBus();DelayBus();
while( !(UCSR1A&(1<<UDRE1)));//等待发送缓冲区为空
UDR1=c;
while(!(UCSR1A&(1<<TXC1)));
// UDCR0=c;
UCSR1A |= _BV(TXC1);//将发送结束标志位清零
// SET_BIT(UCSR1A,);
READ_485;
direction++;
}
SIGNAL(SIG_UART1_RECV)//serial port 1
{
if(UCSR1A&(1<<RXC1))
{
rec1buff=UDR1;
rec1_flag=1;
}
}
望各位大虾批评指正 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|