STC89C52串口應用實例
硬件設計
一般單片機的串口通信都需要通過MAX232 進行電平轉換然后進行數(shù)據(jù)通信的,當然STC89C52RC 單片機也不例外。
圖中的連接方式是常用的的一種零Modem 方式的最簡單連接即3 線連接方式:只使用RXD、TXD 和GND 這三根連線,如下圖
由于RS232 的邏輯“0”電平規(guī)定為+5~+15V,邏輯“1”電平規(guī)定為-15~-5V,因此不能直接連接
與TTL/CMOS 電路連接,必須進行電平轉換。
電平轉換可以使用三極管等分離器件實現(xiàn),也可以采用專用的電平轉換芯片,MAX232 就是其中典型
的一種。MAX232 不僅能夠實現(xiàn)電平的轉換,同時也實現(xiàn)了邏輯的相互轉換即正邏輯轉為負邏輯。
#include "stc.h" //加載"stc.h"頭文件
void Delay(void) //定義Delay 函數(shù),延時500ms
{
unsigned char i,j; //聲明變量i,j
for(i=0;i<255;i++) //進行循環(huán)操作,以達到延時的效果
for(j=0;j<255;j++);
for(i=0;i<255;i++) //進行循環(huán)操作,以達到延時的效果
for(j=0;j<255;j++);
for(i=0;i<255;i++) //進行循環(huán)操作,以達到延時的效果
for(j=0;j<140;j++);
}
void UARTInit(void) //定義串口初始化函數(shù)
{
SCON =0x40; //8 位數(shù)據(jù)位
T2CON=0x34; //由T/C2 作為波特率發(fā)生器
RCAP2L=0xD9; //波特率為9600 的低8 位
RCAP2H=0xFF; //波特率為9600 的高8 位
}
void UARTSendByte(unsigned char byte)//串口發(fā)送單字節(jié)函數(shù)
{
SBUF=byte; //緩沖區(qū)裝載要發(fā)送的字節(jié)
while(TI==0); //等待發(fā)送完畢,TI 標志位會置1
TI=0; //清零發(fā)送完成標志位
}
void main(void) //進入Main 函數(shù)
{
unsigned char i=0; //聲明變量i
UARTInit(); //串口初始化
while(1) //進入死循環(huán)
{
UARTSendByte(i); //串口發(fā)送單字節(jié)數(shù)據(jù)
Delay(); //延時500ms
i++; //i 自加1
if(i>255)i=0; //若i>255,i=0
}
}
重點:
熟悉單片機串口相關寄存器的配置,如 SCON、T2CON、RCAP2L、RCAP2H。
波特率的計算公式要重點注意,同時波特率時鐘發(fā)生器既可以由T/C1發(fā)生,又可以從 T/C2發(fā)生。
串口數(shù)據(jù)發(fā)送是否完成,只要查看 TI(發(fā)送中斷標志位)是否置 1就可以了,最后要記得的是要將 TI
(發(fā)送中斷標志位)清零。