最近做项目用到pic16lf1508,串口通信怎么搞也搞不通,进死胡同了,求助
代码如下:
//#include <pic.h>
#include <pic16lf1508.h>
#define INIT_OSC() OSCCON = 0x7B //内部16M振荡
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 ; // 关闭所有的中断
TRISB7=0 ;//TX脚输出
TRISB5=1 ;//RX脚输入
RB5=1;
RB7=1;
TRISA5=0 ;//指示运行
RA5=0;
SPBRGL=103;//波特率9600,16M时钟
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;
}
RA5=!RA5;
for(x=0;x<5;x++)
{
for(t=0;t<10000;t++)
{;}
for(t=0;t<10000;t++)
{;}
}
}
}
|