PIC18F45K80单片机串口调试总结

2019-04-15 11:51发布

/****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;                     //开启串口中断 }   加上红 {MOD}的那两句语句后接收和发送都正常了。我是说针对我的串口调试器正常了,我觉得应该有两种串口调试器,我是说空闲时电平不同的两种,或高电平,或低电平。如果有调试时发现发送错误可以试试改变空闲时的电平。   在调试时如果我们要用示波器去看串口的波特率,我们可以发送0XAA 或0X55 来抓取周期,从而计算出波特率。         /***************我所理解的 XXX—Sandy**************End of file*************/