PIC18F45K80单片机串口调试总结

/****PIC18F45K80单片机串口调试总结—Sandy*********Start of file***********/
    文件名:PIC18F45K80单片机串口调试总结

作者:手术刀
    QQ: 872180981
    Time :2015-8-29
/***************************瘟 鸡 工 作 室********************************/

PIC18F45K80单片机串口调试总结

今天调试了PIC18F45K80单片机的串口模块,本来以为很简单的,去花了比较长的时间去调试,接上串口,启动串口调试助手,使用以下的配置函数是可以使调试助手收到数据的,但是一直出现单片机发送的数据跟接收到的数据不一致。

void pic_uart_init(void)

{

     UART1MD = 0;  //使能寄存器

     /*端口配置 RC6__TX  RC7__RX*/

     TRISC6 = 1;                 //RC6配置为输入,手册中明确说明

     TRISC7 = 1;                 //RC7配置为输入,手册中明确说明

     /*波特率配置*/

     BAUDCON1bits.BRG16 = 0;      //使用8位波特率模式

     SPBRG1 = 103;                //9600波特率

     BAUDCON1bits.ABDEN = 0;      //禁止波特率测量

     /*接收与发送配置配置*/

     TXSTA1 = 0x24;              //发送配置

     RCSTA1 = 0x90;              //接收配置

     /*中断配置*/

     RC1IE=1;                     //开启串口中断

}

 

这时出现数据的错误我就在想原因,第一个想到的是波特率配置问题,尝试了很多次还是出现相同的问题,第二个我想到的是系统时钟问题比如时钟偏差,时钟分频没有设置对,也试了很多但都没有找到问题。在网上找到的资料跟我上面所配置的差不多。所以一时迷茫了。就拿来示波器,抓了下波形,发现了空闲时的电平问题,后来我又翻开数据手册。果然发现BAUDCON1寄存器中有以下两位,网上找了很多资料是没有提到的。

 

然后我就修改了一下我的配置函数:如下

 

void pic_uart_init(void)

{

     UART1MD = 0;  //使能寄存器

     /*端口配置 RC6__TX  RC7__RX*/

     TRISC6 = 1;                  //RC6配置为输入,手册中明确说明

     TRISC7 = 1;                  //RC7配置为输入,手册中明确说明

     /*波特率配置*/

     BAUDCON1bits.BRG16 = 0;      //使用8位波特率模式

     SPBRG1 = 103;                //9600波特率

     BAUDCON1bits.ABDEN = 0;      //禁止波特率测量

//以下两句非常重要

     BAUDCON1bits.TXCKP = 1; //空闲状态下保持低电平。

     BAUDCON1bits.RXDTP = 1; //接收电平反向。

     /*接收与发送配置配置*/

     TXSTA1 = 0x24;               //发送配置

     RCSTA1 = 0x90;               //接收配置

     /*中断配置*/

     RC1IE=1;                     //开启串口中断

}

 

加上红色的那两句语句后接收和发送都正常了。我是说针对我的串口调试器正常了,我觉得应该有两种串口调试器,我是说空闲时电平不同的两种,或高电平,或低电平。如果有调试时发现发送错误可以试试改变空闲时的电平。

 

在调试时如果我们要用示波器去看串口的波特率,我们可以发送0XAA 或0X55 来抓取周期,从而计算出波特率。

 

 

 

 

/***************我所理解的 XXX—Sandy**************End of file*************/

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值