接收采用中断实现
#include pic.h
unsigned char error=0x00; //错误数据帧,丢弃
bit Q=0; //一次数据帧接收完成标志位
unsigned char message[10]; //数据信息缓存区
unsigned char j=0x00; //数据信息的长度
void interruptisr(void) //接收中断处理
{
if(RCIFRCIE)
{
if(FERR)//监测是否有帧错误
{
error=RCREG;
}
if(OERR)
{
CREN=0 ;
CREN=1 ; //接收模块被复位重置,OERR清零
}
message[j]=RCREG; //保存每一次接收到的数据
++j;
if(j10)
{
Q=1; //10个数据字节接收完成标志
j=0;
}
}
}
void usart_init() //串口初始化
{
INTCON=0 ; // 关闭所有的中断
TRISC6=1 ;
TRISC7=1 ;
SPBRG=51;//波特率9600,6M时钟
BRGH=1; //高速波特率
SYNC=0;
SPEN=1; //异步串口工作方式
TXEN=1; //USART工作于发送器方式
TXIE=0; //发送不需要中断处理
RCIE=1; //接收需要中断处理
CREN=1; //激活接收器
PEIE = 1;
GIE = 1;
}
void putch(unsigned char byte) //发送一个字节的数据
{
TXREG = byte;
while(TRMT==0)
{
asm("nop");
}
return;
}
void main() //将上位机发送的数据通过串口显示
{
usart_init();
while(1)
{
if(Q==1)
{
Q=0;
for(j=0;j10;++j)
putch(message[j]);
}
}
}
原文链接:https://www.eeworld.com.cn/mcu/article_2016110231133.html