PIC单片机精通_异步串口通讯实例与细节
生活随笔
收集整理的這篇文章主要介紹了
PIC单片机精通_异步串口通讯实例与细节
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.前言
PIC16F876a異步串口通信的定義以及寄存器控制,這里不再多談,前面已經進行過詳細的分析。這里注意集中在幾個關鍵點上。
串口中斷服務程序應該注意什么?
利用串口助手進行調試應該注意什么?
串口助手接收不到數據的幾種可能因素?
2.實例分析
PIC單片機與上位機握手程序如下:/********************************************************/ /*Author: Chunxu Shen; All Rights Reserved! /*Tsinghua University 2016-11-19 /*Serial Test Low Speed ********************************************************/ #include <pic.h> __CONFIG(0x3ffa);#define BAUD 9600 #define FOSC 9216000L #define DIVIDER ((int)(FOSC/(16UL * BAUD) -1))unsigned char Rece_flag ; //初始化,串口接受標志void main(void) {//初始化端口程序TRISC7 = 1; //RX端口設為輸入有效TRISC6 = 0; //TX端口設為輸出有效//初始化串口設置SPBRG = DIVIDER; //波特率設置TXSTA = 0x24; //內部波特率-8bit-允許發送-異步通訊 空-低速模式-發送寄存器滿空-無奇偶校驗RCSTA = 0x90; //串口使能-不接收單字符-允許禁止連續接收//中斷設計GIE = 1; //打開中斷總開關PEIE = 1; //允許外圍設備觸發中斷RCIE = 1; //允許接收信號觸發中斷RCIF = 0;//等待PC機觸發中斷while(1){if('E' == Rece_flag) //對應上位機“結束”按鍵{//給PC機反饋信號“END”TXREG = 'E';while( TRMT == 0 ) continue; //檢驗發送是否結束TXREG = 'N';while(TRMT==0) continue;TXREG = 'D';while(TRMT==0)continue; }else if( 'S' == Rece_flag ){//給PC機反饋信號“OK”TXREG = 'O';while(TRMT==0) continue; TXREG = 'K';while(TRMT==0) continue; } else //其他信號不響應{ ; }} }//接收上位機送發的信號 void interrupt usart(void) {if( RCIF ){RCIF = 0; //軟件清零Rece_flag = RCREG; } }
3.經驗總結
1.編寫中斷服務程序時,一定要注意接收中斷標志位這個事兒!RCIF這個標志位,硬件不會自動清空。因此,一旦我們編寫中斷服務程序時,先把RCIF清零!!!
2.利用串口助手進行調試的時候,關注端口號!!!(計算機->管理->設備管理器->端口)確定你選擇的端口是與PIC單片機是相連的,否則即使協議很正確,端口號沒對上,也白扯。
3.波特率很關鍵,看好高低速,把初值算對很重要。
4.感想
曾經下過決心,不碰硬件,可是呢,有的時候你不去做就沒有人做,這不得不說是一種悲哀!接下來的軟件,瞧!看我飛起~~~
總結
以上是生活随笔為你收集整理的PIC单片机精通_异步串口通讯实例与细节的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【比较】CWebBrowser2类Nav
- 下一篇: 飞鸽类能记住传书的人类