赞
踩
- #include<iom16v.h>
- #include<macros.h>
- #define uchar unsigned char
- #pragma interrupt_handler SerialService:12
- uchar rtemp,sflag;
- void SerialInit(void)
- {
- UCSRB=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN); //置一接收结束中断使能、接收使能、发送使能,并且其他位为0
- UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //置一寄存器选择位、设置字符位数为8位,结束位1位,并且其他位为0
- UBRRH=0;
- UBRRL=51; //晶振8M,波特率9600,则UBRR初始值为51
- SREG|=BIT(7); //开全局中断
- }
- void SerialService(void)
- {
- rtemp=UDR; //读接收缓冲区
- //UCSRA&=~BIT(RXC); //此行没有必要,读出缓冲区后,接收结束标志位清零由硬件自动完成,而且我不确定RXC是写1清零还是赋0清零。
- sflag=1;
- }
- void main(void )
- {
- SerialInit();
- while(1)
- {
- if(sflag==1)
- {
- UCSRB&=~BIT(RXCIE); //关闭接收结束中断使能
- sflag=0;
- UDR=rtemp; //数据送给发送缓冲区
- while(!(UCSRA&(BIT(TXC)))); //等待发送结束
- UCSRA|=BIT(TXC); //清零发送结束标志位(写1清零)
- UCSRB|=BIT(RXCIE); //打开接收结束中断使能
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。