久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

串行口通信原理及操作流程

作者:玉另符   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年12月03日   【字體:

51單片機(jī)的串行口是一個(gè)可編程全雙工的通信接口,具有UART(通用異步收發(fā)器)的全部功能,能同時(shí)進(jìn)行數(shù)據(jù)的發(fā)送和接收,也可以作為同步移位寄存器使用。

51單片機(jī)的串行口主要由兩個(gè)獨(dú)立的串行數(shù)據(jù)緩沖寄存器SBUF(發(fā)送緩沖寄存器和接收緩沖寄存器)和發(fā)送控制器、接收控制器、輸入移位寄存器及若干控制門(mén)電路組成。

51 單片機(jī)可以通過(guò)特殊功能寄存器SBUF隊(duì)串行接收或串行發(fā)送寄存器進(jìn)行訪問(wèn),兩個(gè)寄存器共用一個(gè)地址99H,但在物理上是兩個(gè)獨(dú)立的寄存器,由指令操作決定訪問(wèn)哪一個(gè)寄存器。執(zhí)行寫(xiě)指令時(shí)訪問(wèn)串行發(fā)送寄存器;執(zhí)行讀指令時(shí),訪問(wèn)串行接收寄存器。(接收器具有雙緩沖結(jié)構(gòu),即在接收寄存器中讀出前一個(gè)已接收到的字節(jié)之前,便能接收第二個(gè)字節(jié),如果第二個(gè)字節(jié)已接收完畢,而第一個(gè)字節(jié)還沒(méi)有讀出,則將丟失其中一個(gè)字節(jié),編程時(shí)應(yīng)引起注意。對(duì)于發(fā)送器,因?yàn)槭怯?cpu控制的,所以不需要考慮。

 

與串行口緊密相關(guān)的一個(gè)特殊功能寄存器是串行口控制寄存器SCON,它用來(lái)設(shè)定串行口的工作方式、接收/發(fā)送控制以及狀態(tài)標(biāo)志等。

串行口控制寄存器SCON

串行口控制寄存器SCON在特殊功能寄存器中,字節(jié)地址為98H,可位尋址,單片機(jī)復(fù)位時(shí)SCON全部被清零。

位序號(hào)

D7

D6

D5

D4

D3

D2

D1

D0

位符號(hào)

SM0

SM1

SM2

REN

TB8

RB8

T1

R1

SM0,SM1為工作方式選擇位。串行口有四種工作方式,它們由SM0、SM1設(shè)定。其中方式一最為常用。

SM2為多機(jī)通信控制位。

REN為允許串行接收位。

TB8為方式2、3中方式數(shù)據(jù)的第九位。

RB8為方式2、2中接收數(shù)據(jù)的第九位。

TI為發(fā)送中斷標(biāo)志位,在方式0時(shí),當(dāng)串行發(fā)送第8位數(shù)據(jù)結(jié)束時(shí),或在其他方式,串行發(fā)送停止位的開(kāi)始時(shí),由內(nèi)部硬件使TI置一,向CPU發(fā)出中斷申請(qǐng)。在中斷服務(wù)程序中,必須使用軟件將其清零,取消此中斷申請(qǐng)。

RI為接收中斷標(biāo)志位。在方式0時(shí),當(dāng)串行接收第8位數(shù)據(jù)結(jié)束時(shí),或在其他方式,串行接收停止位的中間時(shí),由內(nèi)部硬件使RI置一,向CPU發(fā)出中斷申請(qǐng)。在中斷服務(wù)程序中,必須使用軟件將其清零,取消此中斷申請(qǐng)。

 

串口工作方式1簡(jiǎn)介(0、2、3以后再說(shuō)),串行口方式傳送1幀數(shù)據(jù)共10位,其中一位起始位(0),八位數(shù)據(jù)位(最低位在前,高位在后),一位停止位(1)。幀與幀之間可以有空閑,也可以無(wú)空閑。TXD(P3.1)位數(shù)據(jù)發(fā)送引腳,RXD(P3.0)為數(shù)據(jù)接收引腳。其傳輸波特率是可變的,對(duì)于51單片機(jī),波特率由定時(shí)器1的溢出率決定。

 

串行口方式1編程與實(shí)現(xiàn)

當(dāng)數(shù)據(jù)被寫(xiě)入SBUF寄存器后,單片機(jī)自動(dòng)開(kāi)始從起始位發(fā)送數(shù)據(jù),發(fā)送到停止位的開(kāi)始時(shí),由內(nèi)部硬件使TI置1,向CPU申請(qǐng)中斷,接下來(lái)可在中斷服務(wù)程序中做相應(yīng)的處理,也可選擇不進(jìn)入中斷。

用軟件置REN為1時(shí),接收器以所選擇波特率的16倍速率采樣RXD引腳電平,檢測(cè)到RXD引腳輸入電平發(fā)生負(fù)跳變時(shí),則說(shuō)明起始位有效,將其移入輸入移位寄存器,并開(kāi)始接收這一幀信息的其余位。接收過(guò)程中,數(shù)據(jù)從移位寄存器右邊移入,起始位移至輸入移位寄存器最左邊時(shí),控制電路進(jìn)行最后一次移位。當(dāng) RI=0,且SM2=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è)置,主要是設(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<reg52.h>

#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; 

}

 

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 18av在线播放 | 日韩三级在线 | 日韩欧美网 | 国产精品一区二区三区在线 | 欧美日韩黄 | 99精品欧美一区二区蜜桃免费 | 黄色日批视频 | 国产在线视频在线观看 | 综合在线视频 | 成人影院av | 韩日精品一区 | 国产欧美日韩综合精品一 | 黄色在线免费观看视频 | 亚洲一区免费 | 亚洲精品一区av在线播放 | 久久久www成人免费精品 | 国产精品成人在线 | 婷婷免费视频 | 黄色骚片 | 国产精品毛片在线 | 黄色一级免费观看 | 亚洲一区欧美 | 伊人激情网 | www.蜜桃av | 一区二区三区视频在线观看 | 国产欧美日韩精品一区二区三区 | 日韩欧美国产精品一区二区 | 国产一区不卡 | 日本福利在线观看 | 欧美精品一二三区 | 99热国产精品 | 999国产精品视频免费 | 国产亚洲精品综合一区 | 精品www | 欧美日一区二区 | 91综合在线视频 | 亚洲一区二区免费 | 日韩在线欧美 | 免费av毛片 | 精品欧美乱码久久久久久1区2区 | 中文字幕乱码亚洲精品一区 |