#include <pic.h>
#define INIT_OSC() OSCCON = 0x77
unsigned char error=0x00; //错误数据帧,丢弃
bit Q=0; //一次数据帧接收完成标志位unsigned char data;
void interrupt isr(void) //接收中断处理
{
unsigned char Temp;
if(RCIF&&RCIE)
{
if(FERR)//监测是否有帧错误
{
error=RCREG;
}
if(OERR)
{
CREN=0 ;
CREN=1 ; //接收模块被复位重置,OERR清零}
data=RCREG; //保存每一次接收到的数据
Q=1;
}
if(T0IF) //TIME0
{
T0IF = 0;
}
else
{
if(RBIF )
{
Temp = PORTB;
RBIF = 0;
}
}
}
void usart_init() //串口初始化
{
INIT_OSC();
//InitPort();
INTCON=0 ; // 关闭所有的中断
TRISC6=0 ;//TX脚输出
TRISC7=1 ;//RX脚输入
RC6=1;
RC7=1;
//SPBRG=51;//波特率9600,6M时钟
SPBRG=51;//波特率9600,8M时钟
BRGH=1; //高速波特率
SYNC=0;
SPEN=1; //异步串口工作方式
TXEN=1; //USART工作于发送器方式
TXIE=0; //发送不需要中断处理
RCIE=1; //接收需要中断处理
CREN=1; //激活接收器
PEIE = 1;
GIE = 1;
}
void putch(unsigned char byte) //发送一个字节的数据{unsigned int t=0;
TXREG = byte;
for(t=0;t<50000;t++)
{
if(TRMT==1)
{
asm("nop");
break;
}
}
}
void main() //将上位机发送的数据通过串口显示{
unsigned int t=0; unsigned char x=0;
usart_init();
for(x=0;x<5;x++)
{
for(t=0;t<10000;t++) {;}
for(t=0;t<10000;t++) {;}
}
while(1)
{
if(Q==1)
{putch(data);Q=0;
}
}
}。