52单片机使用T2串口通信
生活随笔
收集整理的這篇文章主要介紹了
52单片机使用T2串口通信
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
引言
由于某些要求需要在定時(shí)器0和定時(shí)器1被占用的條件下進(jìn)行串口通信。其實(shí)也可以將定時(shí)器1分時(shí)進(jìn)行,但是本著探索精神,記錄一下定時(shí)器2的配置使用。
資料
首先在stc的官方數(shù)據(jù)手冊(cè)找到定時(shí)器2的介紹(p205)
可以看到它有6個(gè)寄存器,其中主要是T2CON的配置
使用
T2CON
官方說(shuō)明的很清楚。其中要將其作為串口通信時(shí)鐘,需要將RCLK和TCLK兩個(gè)位置1
其次要計(jì)算定時(shí)器初值,其中TH2和TL2合并為16位,溢出后將自動(dòng)重裝RCAP2L和RCAP2H的值,這一點(diǎn)和定時(shí)器1的八位自動(dòng)重裝模式不同
初值計(jì)算方式
之后要配置SCON串口模式,打開(kāi)定時(shí)器TR2,打開(kāi)中斷ES,EA就可以啦
例子
晶振11.0592,波特率115200,每隔1ms向電腦發(fā)送一個(gè)消息
#include <reg52.h> #include <intrins.h> void ConfigUART(); void delay(unsigned int t) //@11.0592MHz {while(t--){unsigned char i, j;_nop_();_nop_();_nop_();i = 11;j = 190;do{while (--j);} while (--i); } } void main() {EA = 1; //使能總中斷ConfigUART(); //配置波特率為115200while (1){SBUF = 'S';delay(1);} }/* 串口配置函數(shù), baud-通信波特率 */ void ConfigUART() {T2MOD = 0x01;T2CON = 0x30;TH2 = 0xFF;TL2 = 0xFD;RCAP2H = 0xFF;RCAP2L = 0xFD;SCON = 0x50;PCON = 0x00;TR2 = 1;ES = 1;EA = 1; } /* UART 中斷服務(wù)函數(shù) */ void InterruptUART() interrupt 4 {if (RI) //接收到字節(jié){RI = 0; //手動(dòng)清零接收中斷標(biāo)志位//SBUF = SBUF + 1; //接收的數(shù)據(jù)+1 后發(fā)回,左邊是發(fā)送 SBUF,右邊是接收 SBUF}if (TI) //字節(jié)發(fā)送完畢{TI = 0; //手動(dòng)清零發(fā)送中斷標(biāo)志位} }效果
注意
T2MOD要自己在頭文件中定義
只有加強(qiáng)版51單片機(jī)才有計(jì)時(shí)器2
?
總結(jié)
以上是生活随笔為你收集整理的52单片机使用T2串口通信的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【自习任我行】任务跟踪6
- 下一篇: C#实现IVR(基于东进的语音卡)-1