打印
[PIC®/AVR®/dsPIC®产品]

求助pic16lf1508串口通信问题

[复制链接]
1177|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
阿亮2006|  楼主 | 2016-12-7 08:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近做项目用到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++)
{;}
}
    }
}


沙发
JY-DX-JY| | 2016-12-7 09:54 | 只看该作者
先搞发送,再搞接收

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

7

帖子

1

粉丝