串行口通信原理及操作流程
在具體操作串口之前需要對(duì)單片機(jī)的一些與串口有關(guān)的特殊功能寄存器進(jìn)行初始化設(shè)置,主要是設(shè)置產(chǎn)生波特率的定時(shí)器1、串行口控制和中斷控制。具體步驟如下:
1. 確定T1的工作方式(編程TMOD寄存器)
2. 計(jì)算T1的初值,載入TH1、TL1
3. 啟動(dòng)T1(編程TCON中的TR1位)
4. 確定串行口工作方式(編程SCON寄存器)
5. 串行口工作在中斷方式時(shí),要進(jìn)行中斷設(shè)置(編程IE,IP)
/**********************
實(shí)現(xiàn)功能:
RS232通信(串口通信)
**********************/
#include #define uint unsigned int #define uchar unsigned char uchar flag; uchar date; void init() { TMOD=0X20;//定時(shí)器1工作方式2 TH1=0xfd;//9600 TH0=0xfd;//9600 TR1=1;//啟動(dòng)定時(shí)器1 REN=1;//允許串口接收 SM0=0;//設(shè)定串口工作方式1 SM1=1;//設(shè)定串口工作方式1 EA=1; //開(kāi)總中斷 ES=1;//開(kāi)串口中斷 } void main() { init(); while(1) { if(flag==1) { ES=0; //關(guān)閉串口中斷 P1=date; SBUF=date; while(!TI);//等待串行發(fā)送停止位的開(kāi)始,TI=1,并向CPU發(fā)送中斷請(qǐng)求 TI=0;//取消此次中斷 ES=1; //開(kāi)串口中斷 flag=0; } } } void time1() interrupt 4 { RI=0;//取消中斷申請(qǐng) date=SBUF; flag=1; }
評(píng)論