前言
前面介绍了串口的查询方式,没看过的童鞋可以查看我之前的博客。今天我们来介绍怎么利用终端接收串口的数据。
关于串口中断没有繁杂的初始化。只需添加几句话就能实现串口中断了。直接上代码吧。
UARTinit()
{
.....//接上篇博客的初始化代码
/*串口中断标志位置*/
UTX1IF=1;
/*允许接收*/
U0CSR|=0x40;
/*开总中断,接收中断*/
IEN0|=0x84;
}
只需要这三句化,就开启了中断,和接收允许了。
接下来我们写写串口的中断函数。
#pragma vector =URX0_VECTOR
__interrupt void UART0_ISR(void)
{
/*清除中断标志*/
URX1IF=0;
/*将接收到的数据写入到recData中 */
recData=U0DBUF;
}
最后我们写写主函数吧
void main()
{
char recData;
unsigned int datanumber=0,flag=1;
char readData[2];
LEDinit();//LED1初始化。
CLOCKinit();//系统时钟初始化
UARTinit();//串口初始化
while(1)
{
if(flag==1)
{
if((recData!=0)&&datanumber<2)//接收数据
{
readData[datanumber++]=recData;//最多接收2个字符
}
if(datanumber==2)
{
recData=0;//缓存清零
flag=2;
}
}
if(flag==2)
{
if(readData[0]='A')
LED1=1;//亮
if(readData[0]='B')
LED1=0;//灭
flag=1;//标志位清零
for(int i=0;i<2;i++) readData[i]=' ';//清处接收的数据
datanumber=0;//指针归位
}
}
}
通过上面的代码就能很轻松的实现PC机通过串口控制单片机上的灯亮灭。
讲完了外设IO的串口,我们下期讲讲下一个外设–定时器。下期见!
授人以鱼不如授人以渔,这里我就不发布全部源码了。