PIC单片机精通_串口通讯与串口调试实例
生活随笔
收集整理的這篇文章主要介紹了
PIC单片机精通_串口通讯与串口调试实例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.引子
團隊之所以稱之為團隊,就意味著多個人在一起共事。需要的是謙虛,謙遜,切勿言之偏偏。也要學會尊重,任何一門編程語言都有自己的優勢與不足,否則早就有一門語言一統天下啦!!!我由VB入門,利用C、C++、Java、TCL進行過開發,至今不敢妄言哪種語言最好,只知道把事情做好,才是最成功的。 耐心與細心,至關重要。最忌浮于事,遇到問題要仔細分析,千萬不可抱怨。作為軟件出身的傻大個,竟然“淪落”到進行電子線路測試、故障排除、阻抗匹配,不得不說是配合的環節出現了問題,再此感謝一下我的母校——華中大,還好本科管得嚴,任務重,電子電力的知識還沒有忘記。 今天記載的是獨立開發的串口通信程序,沒有利用PIC自帶的Example,很適合新手,共同進步。2.串口通信實例與詳解
/********************************************************/ /*Author: Chunxu Shen; All Rights Reserved! /*Tsinghua University /*2016-11-14 ********************************************************/ #include <pic.h> __CONFIG(0x3ffa);#define BAUD ???UL #define FOSC ???UL //根據實際情況,自己設定 #define DIVIDER ((int)(FOSC/(16UL * BAUD) -1))unsigned int send1[2] = {0x4f,0x4b}; //'O'=ASCII 0x4f;'K'=ASCII 0x4b; “OK” unsigned int send2[5] = {0x45,0x52,0x52,0x4f,0x52}; //'E'=ASCII 0x45;'R'=ASCII 0x52 “ERROR” unsigned char rece; //全局變量 unsigned int cnt; //計數器void main(void) {//初始化端口程序TRISC7 = 1; //RX端口設為輸入有效TRISC6 = 0; //TX端口設為輸出有效//初始化串口設置SPBRG = DIVIDER; //波特率設置TXSTA = 0x04; //異步通訊-禁止發送數據-高速模式RCSTA = 0xA0; //串口使能-接收單字符-禁止連續接受//中斷設計RCIE = 1; //允許接收信號觸發中斷GIE = 1; //打開中斷總開關PEIE = 1; //允許外圍設備觸發中斷//無限循環,等待PC機觸發中斷while(1){......} }//接收上位機送發的信號 void interrupt usart(void) {if( RCIE )//RCIE:開放串行中斷請求 RCIF:接收中斷允許(接收區滿or單字符){ ......} }3.心得感悟
1.“查詢”和“中斷”哪種方式好?
這個問題就很奇怪了;其實沒有絕對的好與不好。就個人而言,我更偏向于中斷,思路比較清晰。無論哪種方式,記住核心就好。中斷:采用的是通信外圍設備觸發(也就是PC機發送信號);而查詢方式:采用的是接收移位寄存器溢出標志位以及發送移位寄存器清空的標志位。2.為什么在main函數中設置字符數組mplab一直報錯?
這個問題同學問我之后我一直沒有答上來,因為我感覺這本身是沒有錯的。可能是配置的問題。為什么我沒有碰到?因為我習慣把字符數組放到程序的預定義處。我也很推崇這種方式,這會大大增強程序的可讀性。3.通信流程該如何設定?
單片機通信模塊都很相似:端口方向配置(那個是發送數據?哪個是接收數據?);串口狀態配置(打開串口?連續發送?同步/異步?);中斷配置(打開接收中斷觸發事件、開啟總中斷、開啟外圍中斷觸發);最后一個是進行數據處理。4.TXSTA=0x24;會怎么樣?
TXSTA=0010 0100B;異步-高速-允許發送模式 就個人而言,不建議這樣寫。因為接收信號觸發中斷,如果此時發送還是允許的,容易陷入一直都發送的死區。所以,我們可以試著這樣做:“激發信號”觸發中斷->允許數據發送->發送數據->關閉數據發送。總結
以上是生活随笔為你收集整理的PIC单片机精通_串口通讯与串口调试实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 企业即时通讯规模将达7亿
- 下一篇: PIC单片机精通_串口通信模块C实现