HC6800-ESV2.0 串口通信 說明 平臺:windows 10 64位 開發工具:普中科技 HC6800-ES V2.0 、keil uVision2 原理 教程:串口通信原理 文檔:普中科技51單片機教程 步驟 1、確定定時器T1的工作方式(TMOD) 這里我們用的是T1定時器的工作方式2,自動重裝初值 2、計算T1的初值(TH1,TH2) 計算公式:
20200214121000871.png (47.75 KB, 下載次數: 38)
下載附件
2023-3-29 17:04 上傳
SMOD = 0波特率正常。SMOD = 1波特率增倍。T1溢出率就是T1定時器溢出一次的時間T的倒數,T1溢出率 = 1/T; 設X為初值,因為8位數據,所以,一次溢出時間 = 【256-X】*12/晶振頻率,得出T1的溢出率再運用之前的公式,就可以算出定時器 初值。
這里給出一個常用的表格:
需要注意的是,普中這塊開發板用的晶振是12Mhz的,所以選擇值的時候要注意,另外因為用的是12Mhz的晶振,不是11.0592Mhz,計算出來的T1定時的初值將不是一個整數,這樣進行通信時會產生累計誤差。在實踐過程中,筆者發現,在4800及以下波特率通信時,因為誤差較小,所以產生的影響很小,在通信時沒有發生過異常現象,但是高于4800時,則會產生明顯誤差,通信時傳輸的數據會嚴重失真,建議采用4800以下的波特率。
3、啟動定時器T1 4、確定串行口工作方式(SCON) 之類可以有兩種代碼: 一是按位設置,而是整塊設置,但其實本質都是按位設置。 第一種: 按位設置 1 SM0 = 0; 2 SM1 = 1; 第二種 1 SCON = 0X50; 5、中斷設置 這里我們用到的串口通信的中斷,雖然我們用到了T1定時器,但其中斷我們并不進行操作,所以我們不寫T1定時器的中斷服務程序,串口通信的中斷號為4;
詳細代碼 #include<reg52.h> #define uchar unsigned char
void init(); void main() { init(); while(1); }
void init() { TMOD = 0x20; //定時器T1,工作方式2 // SCON = 0X50; //第二種設置方式 // PCON = 0X80; //波特率倍增 TH1 = 0Xe6; //初值,設置波特率為1200 TL1 = 0Xe6; REN = 1; //允許串口接收數據 SM0 = 0; //設置串口方式1 SM1 = 1; TR1 = 1; EA = 1; //打開總中斷 ES = 1; //打開串口中斷 }
void ser()interrupt 4 { uchar mes; mes = SBUF; //讀取數據 RI = 0; //軟件清零,為下一次中斷做準備 SBUF = mes; while(!TI); //等待發送數據完畢 TI = 0; //軟件清零,為下一次中斷做準備 } |