51單片機(jī)-串口
SM0,SM1工作方式選擇位,SM2多機(jī)通信控制位,REN允許串行接收位,TI發(fā)送中斷標(biāo)志位,RI接
收中斷標(biāo)志位。串行發(fā)送停止位的開始時(shí),由內(nèi)部硬件使TI置1,向CPU發(fā)出中斷申請(qǐng)。在中斷服務(wù)
程序中,必須用軟件將其清0,取消此中斷申請(qǐng)。
電源管理寄存器PCON也是一個(gè)特殊功能寄存器,字節(jié)地址為87H,不能位尋址,PCON用來管理單片
機(jī)的電源部分,包括上電復(fù)位檢測(cè),掉電模式,空閑模式等。單片機(jī)復(fù)位時(shí)PCON全部被清0。
SMOD該位與串口波特率有關(guān),SMOD=0,串口方式1,2,3時(shí),波特率正常。SMOD=1,串口方式1,2,3時(shí),波特率加倍。
用軟件置REN為1時(shí),接收器會(huì)以所選擇波特率的16倍速采樣RXD引腳電平,檢測(cè)到RXD引腳輸入電平發(fā)生
負(fù)跳變時(shí),則說明起始位有效,將其移入輸入移位寄存器,并開始接受這一幀信息的其余位。接受過
程中,數(shù)據(jù)從輸入移位寄存器的右邊輸入,起始位移至輸入移位寄存器最左邊時(shí),控制電路進(jìn)行最后
一次移位。當(dāng)RI = 0,且SMOD = 0(或接受到的停止位為1)時(shí),將接收到的9位數(shù)據(jù)的前8位數(shù)據(jù)
裝入接受SBUF,第9位進(jìn)入RB8,并置RI=1,向CPU中斷請(qǐng)求。
在具體操作串行口之前,需要對(duì)單片機(jī)一些與串行口有關(guān)的特殊功能寄存器進(jìn)行初始化設(shè)置:
確定T1的工作方式(編程TMOD寄存器)
計(jì)算T1的初值,裝載TH1,TL1
開啟T1(編程TCON中的TR1位)
設(shè)置串口的工作方式(編程SCON寄存器)
串行口工作在中斷方式下,要進(jìn)行中斷設(shè)置(IE寄存器)
波特率計(jì)算公式:
方式0的波特率=fosc/12。
方式1的波特率=(2^smod/32)*(T1溢出率)。
方式2的波特率=(2smod/64)*fosc。
方式3的波特率=(2smod/32)*(T1溢出率)。
T1溢出率=fosc/{12*[256-(TH1)]}
fosc為系統(tǒng)晶振頻率,通常為12MHZ或11.05926MHZ
異步串口通信兩種方式:輪詢和中斷
下面是一個(gè)中斷程序,使用串口調(diào)試工具發(fā)出什么返回什么。
#include <reg52.h>
unsigned char a,flag;
void main(){
TMOD = 0x20; //工作方式2,8位自動(dòng)重裝定時(shí)/計(jì)數(shù)器
TH1 = 0xfd; //波特率為9600bps,系統(tǒng)晶振頻率為11.0592MHZ時(shí)需要裝入的
TL1 = 0xfd; //TH1,TL1的值可以通過公式 T1溢出率=fosc/{12*[256-(TH1)]}
EA = 1; //開啟CPU中斷允許位
ES = 1; //開始串口中斷允許位
SM1 = 1; //設(shè)置串口的工作方式為01即方式1,10位異步收發(fā)(8位數(shù)據(jù))
TR1 = 1; //T1開啟
REN = 1; //允許串行接受位
while(1){
if(flag == 1){
ES = 0; //關(guān)閉串口中斷,防止發(fā)送數(shù)據(jù)時(shí)產(chǎn)生中斷
SBUF = a; //將數(shù)據(jù)送到發(fā)送緩沖寄存器
while(!TI); //發(fā)送當(dāng)停止位開始時(shí),會(huì)產(chǎn)生中斷,把TI置1
TI = 0;
flag = 0;
ES = 1; //允許中斷
}
}
}
void uart() interrupt 4{
a = SBUF; //當(dāng)產(chǎn)生RI中斷時(shí)說明數(shù)據(jù)接收完畢,把數(shù)據(jù)賦給變量a
RI = 0; //軟件方法把RI置0
flag = 1;
}
輪詢方式,如果有數(shù)據(jù)輸入發(fā)送給串口,當(dāng)停止位開始時(shí),蜂鳴器響起。
#include <reg52.h>
#define uchar unsigned char
sbit buzzer=P3^4;
void delay(uchar z)
{
uchar x,y;
for(x=1000;x>1;x--)
for(y=z;y>1;y--);
}
關(guān)鍵詞:
51單片機(jī)串口信息交
相關(guān)推薦
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車電子
- 轉(zhuǎn)換器
- 電源管理
- 信號(hào)放大器
評(píng)論