版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基本概念RS-232接口MCS-51的串行接口單片機(jī)與單片機(jī)之間的通信IIC總線第
章
串行口通信技術(shù)本章內(nèi)容SingleChipMicrocomputer1.實(shí)訓(xùn)目的(1)復(fù)習(xí)掌握定時(shí)器的功能和編程使用。(2)理解串行通信與并行通信的兩種方式。(3)掌握串行通信的重要指標(biāo):字符幀和波特率。(4)初步了解MCS-51單片機(jī)串行口的使用方法。實(shí)訓(xùn)
單片機(jī)之間的雙機(jī)通信2.實(shí)訓(xùn)引入
單片機(jī)間經(jīng)常需要互相傳遞信息--通信.3.實(shí)訓(xùn)程序甲機(jī)發(fā)送程序參考如下:
MOVTMOD,#20H MOVTL1,#0F4H MOVTH1,#0F4H SETBTR1 MOVSCON,#40H MOVR0,#20H MOVR7,#08HSTART:MOVA,@R0 MOVSBUF,AWAIT:JBCTI,CONT AJMPWAITCONT:INCR0 DJNZR7,START SJMP$乙機(jī)接收及顯示程序參考如下:
MOVTMOD,#20H MOVTL1,#0F4H MOVTH1,#0F4H SETBTR1 MOVSCON,#40H MOVR0,#20H MOVR7,#08H SETBRENWAIT:JBCRI,READ AJMPWAITREAD:MOVA,SBUF MOV@R0,A INCR0 DJNZR7,WAITDISP:LCALLDISPLAY SJMPDISP4.實(shí)訓(xùn)分析與總結(jié)分析程序可以看出,通信雙方都有對(duì)單片機(jī)定時(shí)器的編程(注意發(fā)送、接收程序的前4條指令),而且雙方對(duì)定時(shí)器的編程完全相同。這說(shuō)明,MCS-51單片機(jī)在進(jìn)行串行通信時(shí),是與定時(shí)器的工作有關(guān)的。定時(shí)器用來(lái)設(shè)定串行通信數(shù)據(jù)的傳輸速度。在串行通信中,傳輸速度是用波特率來(lái)表征的,有關(guān)波特率與定時(shí)器的關(guān)系以及編程在8.3.3節(jié)介紹。
MCS-51單片機(jī)串行接口一、串行通信概述1、什么叫串行通信?
在生活中同學(xué)們排橫隊(duì)行走——并行;排縱隊(duì)行走——串行。計(jì)算機(jī)中在傳輸信息、數(shù)據(jù)時(shí)也有并行、串行的問(wèn)題。0010001001P1.0P1.1P1.2P1.3RXDTXD單片機(jī)外設(shè)1外設(shè)21111110101000接收設(shè)備發(fā)送設(shè)備2、同步通信、異步通信
同步——發(fā)送設(shè)備時(shí)鐘與接收設(shè)備時(shí)鐘嚴(yán)格一致。校驗(yàn)字符2校驗(yàn)字符1數(shù)據(jù)n………數(shù)據(jù)2數(shù)據(jù)1同步字符2同步字符1異步——發(fā)送時(shí)鐘與接收時(shí)鐘不一定相等??臻e位停止位奇偶校驗(yàn)位5~8位數(shù)據(jù)起始位空閑位3、串行通信的方向單工
A
發(fā)
B發(fā)半雙工
A
發(fā)收
B
收發(fā)例如:廣播電臺(tái)收音機(jī)例如:對(duì)講機(jī)全雙工
A
發(fā)收
B
收發(fā)例如:電話機(jī)4、波特率即串行通信速率。b/s、bps在異步通信中,單位時(shí)間內(nèi)所傳送的有效二進(jìn)制位數(shù)——波特率。舉例、設(shè)有一幀信息,1個(gè)起始位、8個(gè)數(shù)據(jù)位、1個(gè)停止位,傳輸速率為每秒240個(gè)字符。求波特率。解:(1+8+1)×240=2400b/s=2400波特。
5、串行通信接口發(fā)送:CPUD7D6D5D4D3D2D1D0發(fā)送寄存器SBUF01D0D1D2D3D4D5D6D7發(fā)送時(shí)鐘:接收:D0D1D2D3D4D5D6D710D7D6D5D4D3D2D1D0CPU接收時(shí)鐘接收數(shù)據(jù)寄存器SBUF二、MCS-51機(jī)串行接口單片機(jī)內(nèi)有通用異步接收/發(fā)送器UART。全雙工,4種工作方式,波特率可編程設(shè)置,可中斷。1、串口的組成從編程角度講來(lái)看主要由以下寄存器組成。
SBUF——串行發(fā)送/接收數(shù)據(jù)緩沖器是兩個(gè)物理單元,共用一個(gè)地址(99H)SMODSMOD位用于決定波特率的倍數(shù)。020=1倍121=2倍PCON——電源控制寄存器SCON——串行口控制寄存器SM0SM1SM2RENTB8RB8
TI
RITI/RI:中斷請(qǐng)求標(biāo)志位(前面已講過(guò))RB8:接收的第九位數(shù)TB8:發(fā)送的第九位數(shù)REN:允許接收控制位SM2:多機(jī)通信控制位(常與RB8配合,決定是否激活RI)SM0、SM1:工作方式選擇位(四種工作方式)內(nèi)部結(jié)構(gòu)框圖51內(nèi)部總線SBUF零檢測(cè)器移位時(shí)鐘STARTSHIFT
發(fā)送控制器TXCLOCKTISENDDSQCLSTARTRIRECEIVERX接收控制器SHIFTCLOCK11111110輸入移位寄存器SBUF51內(nèi)部總線讀SBUF寫SBUF串行口中斷P3.1TXD裝載SBUFREN/RIP3.0RXD串型口的工作模式和控制寄存器SCON
SM0SM1模式功能波特率
000同步移位寄存器模式Fosc/12
0111+8+1位異步通信UART可變
1021+9+1位異步通信UARTFosc/64或/32
1131+9+1位異步通信UART可變SM0SM1SM2RENTB8RB8TIRI
模式選擇多機(jī)通訊位允許接收位
發(fā)送、接收第9位
發(fā)送、接收標(biāo)志2、串行口的工作方式(1)方式0:同步移位寄存器方式
波特率固定為fosc/12RXD——接收發(fā)送數(shù)據(jù)
TXD——產(chǎn)生同步移位脈沖接收/發(fā)送完,置位RI/TI,(要求SM2=0)
D7
D6
D5
D4
D3
D2
D1
D0
D0
D1
D2
D3
D4
D5
D6
D7發(fā)送接收無(wú)起始位,無(wú)停止位??捎糜诓⒖诘臄U(kuò)展。方式0
內(nèi)部結(jié)構(gòu)框圖51內(nèi)部總線SBUF零檢測(cè)器移位時(shí)鐘STARTSHIFT
發(fā)送控制器TXCLOCKTISENDDSQCLSTARTRIRECEIVERX接收控制器SHIFTCLOCK11111110輸入移位寄存器SBUF51內(nèi)部總線讀SBUF寫SBUF串行口中斷P3.1TXD裝載SBUFREN/RIP3.0RXD(S6)Fosc/12(2)方式1:8位UART波特率為(2SMOD×T1的溢出率)/32,可變。一幀信息10位。D0D1D2D3D4D5D6D7停止位起始位發(fā)送D7D6D5D4D3D2D1D0起始位停止位接收送RB8發(fā)送完置位TI。當(dāng)接收到數(shù)據(jù)后,置位RI是有條件的。即:REN=1,RI=0且SM2=0或SM2=1但是接收到的停止位為1。此時(shí),數(shù)據(jù)裝載SBUF,RI置1,停止位進(jìn)入RB8。
(3)方式2、方式3:9位UART
一般用于多機(jī)通信。一幀信息11位。
D0D1D2D3D4D5D6D7TB8停止位起始位發(fā)送發(fā)送完數(shù)據(jù)置位TI。
TB8D7D6D5D4D3D2D1D0起始位停止位接收接收到有效數(shù)據(jù)完畢,置位RI的條件:REN=1,RI=0且SM2=0或接收到第9位數(shù)據(jù)為1,此時(shí),數(shù)據(jù)裝載SBUF,RI置1,第9位數(shù)據(jù)(TB8)RB8。
送RB81/161/2T1溢出10SMOD1/2focs/210SMOD模式2串行口的波特率B模式1、3時(shí)串行口的波特率B1/16focs/12模式0串行口的波特率B串行口四種模式時(shí),因移位脈沖來(lái)源不同而使串行口的波特率B不同(如圖所示)B=focs/12B=focs/32或=fosc/64
B=1/32×T1溢出率或=1/16×T1溢出率發(fā)送、接收控制器發(fā)送、接收控制器發(fā)送、接收控制器TL1(8位)TH1(8位)震蕩器1/12TF1中斷控制T1引腳TR1GATEINT1C/T=1C/T=08位+1計(jì)數(shù)器8位初值寄存器T1溢出率=Yc=1/TcTc=(256-N)*12/foscYc=fosc/[12×(256-TH1)]溢出率是指每秒定時(shí)器溢出的次數(shù)波特率=2SMOD×Yc
32模式0、2時(shí)的波特率的計(jì)算模式0:波特率B=fosc/12fosc為系統(tǒng)頻率模式2:B=1/64*fosc(SMOD=0時(shí))或B=1/32*fosc(SMOD=1時(shí))其中:SMOD為電源控制寄存器PCON的最高位。返回本節(jié)目錄模式1、3時(shí)的波特率的計(jì)算
B=1/16×T1溢出率(SMOD=1時(shí))或:B=1/32×T1溢出率(SMOD=0時(shí))其中:T1溢出率=fosc/12×[1/(256-TH1)];TH1為初值所以:B=fosc/192×[1/(256-TH1)](SMOD=1時(shí))或:B=fosc/384×[1/(256-TH1)](SMOD=0時(shí))這樣,我們可以得到求TH1(初值)的計(jì)算公式:
TH1=256-[fosc/(384XB)];(SMOD=0時(shí))
TH1=256-[fosc/(192XB)];(SMOD=1時(shí))【舉例】:設(shè)fosc為11.0592MHz,波特率為1200Hz,求TH(設(shè):SMOD=0)?!窘狻浚河蒙鲜龉?/p>
TH1=256-[11.059MHz/(384X1200)]=232=0E8H
返回本節(jié)目錄方式2波特率:(固定)2SMOD/64×fosc3、波特率的設(shè)置方式0、方式2固定。方式1,方式3可變。波特率=2SMOD/32×(T1的溢出率)
T1溢出率=單位時(shí)間內(nèi)溢出次數(shù)=1/(T1的定時(shí)時(shí)間)而T1的定時(shí)時(shí)間t就是T1溢出一次所用的時(shí)間。此情況下,一般設(shè)T1工作在模式2(8位自動(dòng)重裝初值)。
N=28-t/T,t=(28-N)T=(28-N)×12/fosc所以,T1溢出率=1/t=fosc/12(28-N),故,波特率=2SMOD/32×fosc/12(256-N)。若已知波特率,則可求出T1的計(jì)數(shù)初值:
y=256-2SMOD×fosc/(波特率×32×12)
方式1和方式3的波特率可變,由定時(shí)器1的溢出率決定波特率/(b/s)fosc/MHzSMOD定時(shí)器1C/模式初始值方式0:1M方式2:375k方式1、3:62.5k19.2k9.6k4.8k2.4k1.2k137.5k11011012121211.05911.05911.05911.05911.05911.986612×1110000000××000000000××222222221××FFHFDHFDHFAHF4HE8H1DH72HFEEBHT波特率=一個(gè)機(jī)器周期是晶振的頻率f除以12(標(biāo)準(zhǔn)模式),每當(dāng)計(jì)數(shù)到256-TH1溢出一次(定時(shí)器1工作在方式2,8位),使用11.0592MHz晶振,TH1=0xFD,此時(shí)溢出速率為
11.0592/12/(0xFF-0xFD)=0.3072(MHz)
再除以32,為0.0096MHz,9600Hz!串行口的應(yīng)用在編制串行通訊程序時(shí),首先要確定兩個(gè)參數(shù):
1,通訊雙方的“波特率”,必須保持嚴(yán)格一致;
2,傳輸數(shù)據(jù)的格式“字符幀格式”必須統(tǒng)一。MCS-51串口的4種模式中:0、2模式的波特率是固定的;1和3模式時(shí)波特率是可變且由定時(shí)器T1來(lái)作為波特率發(fā)生器,以模式2的方式工作。用T1作為波特率發(fā)生器時(shí),根據(jù)波特率來(lái)計(jì)算T1的初值就成為串口程序初始化的主要任務(wù)之一。在通訊過(guò)程中,對(duì)標(biāo)志(RI、TI)的判斷是控制通訊全過(guò)程的關(guān)鍵環(huán)節(jié)。四種模式的接收、發(fā)送條件模式發(fā)送條件接收條件接收方式主要應(yīng)用0TI=0RI=0,REN=1查詢、中斷同步移位,系統(tǒng)擴(kuò)并口1TI=0RI=0,REN=1查詢、中斷8位數(shù)據(jù)異步傳送2、3TI=0RI=0,REN=1,SM2=0查詢(無(wú)中斷)8位數(shù)據(jù)+奇偶位的異步收發(fā)UARTRI=0,REN=1,RB8=1若SM2=0時(shí)查詢。若SM2=1時(shí)引發(fā)中斷8位數(shù)據(jù)+控制位的異步收發(fā)UART返回本節(jié)目錄模式1舉例(一)發(fā)送程序TXD.ASM
org0000hljmp0100horg0100hstart:movtmod,#20h;設(shè)定定時(shí)器T1為模式2movtl1,#0f4h;送定時(shí)初值(fosc=11.059)
movth1,#0f4h;波特率B=2400movpcon,#00h;PCON中的SMOD=0setbtr1;啟動(dòng)定時(shí)器T1movscon,#40h;設(shè)定串行口為模式1loop2:movp1,#0ffhmova,p1;從P1口輸入數(shù)據(jù)
movsbuf,a;數(shù)據(jù)送SBUF發(fā)送loop1:jnbti,loop1;判斷數(shù)據(jù)是否發(fā)送完畢?
clrti;發(fā)送完一幀后清標(biāo)志
sjmploop2;返回繼續(xù)
endTXD.ASM發(fā)送程序框圖(查詢方式)SM0SM1SM2RENTB8RB8TIRIT1初始化啟動(dòng)T1串行口初始化輸入數(shù)據(jù)到A發(fā)送一幀數(shù)據(jù)MOVSBUF,ATI=1?軟件清TIGATEC/TM1M0GATEC/TM1M0設(shè)定定時(shí)器T1的工作模式00000010B設(shè)定串行口模式寄存器SCON為01000000BYN(二)接收程序:RXD.ASM
org0000h ljmp0100h org0100hstart: movtmod,#20h ;選定T1為模式2(自動(dòng)重裝)
movtl1,#0f4h ;設(shè)定初值
movth1,#0f4h ;同上
movpcon,#00h ;PCON的SMOD=0 setbtr1 ;啟動(dòng)T1定時(shí)器
clrri ;清接收標(biāo)志
movscon,#50h ;設(shè)定串行口為方式1loop1:jnbri,loop1 ;判斷是否接收到數(shù)據(jù)?
clrri ;接收到數(shù)據(jù)后清接收標(biāo)志
mova,sbuf ;數(shù)據(jù)送累加器A movp1,a ;從P1口輸出
sjmploop1 ;回繼續(xù)
endRXD.ASM接收程序框圖(查詢方式)T1初始化啟動(dòng)T1串行口初始化輸出數(shù)據(jù)到P1數(shù)據(jù)送AMOVA,SBUFRI=1?軟件清TISM0SM1SM2RENTB8RB8TIRIGATEC/TM1M0GATEC/TM1M0定時(shí)器TMOD(89H)的工作模式00000010B串行口模式寄存器SCON(98H)為01010000BYN思考題:用中斷的方式接收數(shù)據(jù)
org0000h ljmpstart
org0023h ljmprxd1
org0100hstart: movtmod,#20h;選定T1為模式2(自動(dòng)重裝)
movtl1,#0f4h ;設(shè)定初值
movth1,#0f4h ;同上
movpcon,#00h;PCON的SMOD=0 setbtr1 ;啟動(dòng)T1定時(shí)器
clrri ;清接收標(biāo)志
movscon,#50h;設(shè)定串行口為方式1 movie,#90h;開串行口中斷
sjmp$
org0200hrxd1: clrri ;接收到數(shù)據(jù)后清接收標(biāo)志
mova,sbuf ;數(shù)據(jù)送累加器A movp1,a ;從P1口輸出
retiendLJMPLJMPMOVCLR0000H0023H0100H0200HRXD.ASM接收程序框圖(中斷方式)T1初始化并啟動(dòng)T1串行口初始化開串行口中斷等待RI中斷輸出數(shù)據(jù)到P1接收一幀數(shù)據(jù)MOVA,SBUF軟件清TIRETI主程序框圖中斷服務(wù)程序框圖EAXXESET1EX1ET0EX0設(shè)定中斷允許寄存器IE(A8H)為10010000B
模式2、3應(yīng)用舉例與模式1相比,模式2、3的主要特點(diǎn):
1,9位數(shù)據(jù)的傳送格式:
其中:發(fā)送時(shí)第9位在TB8;接收時(shí)第9位在RB8中。
2,SM2:多機(jī)通訊位:
在模式0、1中:SM2=0。當(dāng)RI=1時(shí)便可以引發(fā)中斷。
在模式2、3中:
如果SM2=0,TI和RI雖然可以被激活,但不能引發(fā)中斷!如果SM2=1,且RB8=1時(shí),RI被激活時(shí)可以引發(fā)中斷!根據(jù)上面特點(diǎn),模式2、3可以:1,利用第9位數(shù)據(jù)來(lái)傳送、接收每一字節(jié)的“奇偶效驗(yàn)位”。
2,利用SM2、RB8實(shí)現(xiàn)多機(jī)通訊功能。利用模式2,3進(jìn)行帶奇校驗(yàn)的串行通訊程序流程圖數(shù)據(jù)送累加器APSW.P=1?SETBSCON.TB8CLRSCON.TB8MOVSBUF,ATI=1?CLRSCON.TIYESNONOYES發(fā)送端程序RI=1?MOVA,SBUFPSW.P⊕RB8=1?出錯(cuò)處理CLRSCON.RIYESNO接收端程序使用“查詢法”編制的發(fā)送、接收程序NY數(shù)據(jù)送內(nèi)存使用模式3進(jìn)行多機(jī)通訊主機(jī)從機(jī)N從機(jī)4從機(jī)3從機(jī)2從機(jī)1串行數(shù)據(jù)線(2條)主從式多機(jī)通訊原理1,主機(jī)發(fā)送的數(shù)據(jù)可以傳送到各個(gè)從機(jī),從機(jī)發(fā)送的數(shù)據(jù)只能為主機(jī)接收,從機(jī)之間不能直接通訊。2,主機(jī)和從機(jī)的設(shè)置為模式2或3,其中:主機(jī)的SM2=0(單機(jī)方式);從機(jī)的SM2=1(多機(jī)方式)。3,主機(jī)發(fā)送地址碼來(lái)尋找從機(jī)(地址碼特征是第9位數(shù)據(jù)為“1”
),所有從機(jī)都接收主機(jī)發(fā)出的地址碼(因?yàn)镽B8=1),既RI=1引發(fā)中斷。在中斷服務(wù)程序中,將接收到地址碼與自己的地址進(jìn)行比較,被選中的從機(jī)將自己的SM2=0,并維持在中斷服務(wù)程序中保持與主機(jī)的聯(lián)系。而未被選中的從機(jī)仍保持SM2=1,并退出中斷服務(wù)程序。4,當(dāng)主機(jī)找到從機(jī)后,開始向從機(jī)發(fā)數(shù)據(jù)、命令(其特征為第9位=0)。由于選中的從機(jī)SM2=0,從機(jī)仍可以使用查詢RI的方式接收主機(jī)發(fā)出的數(shù)據(jù)或命令(而未選中的從機(jī)因RB8=0不會(huì)引發(fā)它們的中斷)。當(dāng)主機(jī)與從機(jī)的通訊完成后,該從機(jī)再將其SM2=1并退出中斷服務(wù)程序。主機(jī)重新發(fā)出另一個(gè)從機(jī)的地址,所有從機(jī)可以馬上響應(yīng)并接收地址信息。多機(jī)通訊中主機(jī)與從機(jī)之間的控制、狀態(tài)信息主機(jī)的控制命令:00H主機(jī)發(fā)送,從機(jī)接收;(控制從機(jī)的操作)01H主機(jī)接收,從機(jī)發(fā)送。從機(jī)狀態(tài)字:從機(jī)向主機(jī)發(fā)送的用于表征從機(jī)工作狀態(tài)的信息(如下圖)。ERRTRDYRRDY0:合法命令0:發(fā)送未就緒0:接收未就緒1:非法命令1:發(fā)送就緒1:接收就緒從機(jī)返回的狀態(tài)字主機(jī)程序框圖T1為定時(shí),模式2B=1200,啟動(dòng)T1設(shè)串口為模式3REN=1,SM2=0TB8=1設(shè)定程序數(shù)據(jù):R0~R5調(diào)用MCOMMU停機(jī)MCOMMU發(fā)送從機(jī)地址從機(jī)應(yīng)答?地址相符?發(fā)送命令字TB8=0從機(jī)應(yīng)答?命令正確?命令分類接收數(shù)據(jù)塊發(fā)送數(shù)據(jù)塊從機(jī)接收就緒?從機(jī)發(fā)送就緒?RET命令從機(jī)復(fù)位NNYYNNYYNNYY接收發(fā)送一:主機(jī)程序(初始化部分)
ORG2000HSTART: MOVTMOD,#20H ;定時(shí)器T1為模式2 MOVTH1,#0F4H MOVTL1,#0F4H ;波特率為1200(設(shè)外接6MHz晶體)
SETBTR1 ;啟動(dòng)T1 MOVSCON,#0D8H ;串口為模式3允許接收,SM2=0,TB8=1 MOVPCON,#00H ;設(shè)PCON中的SMOD=0 MOVR0,#40H ;發(fā)送數(shù)據(jù)塊首地址送R0 MOVR1,#20H ;接收數(shù)據(jù)塊首地址送R1 MOVR2,#SLAVE ;被尋從機(jī)地址送R2 MOVR3,#00H/#01H ;主發(fā)、從收命令?;蛑魇?、從發(fā)命令
MOVR4,#14H ;發(fā)送數(shù)據(jù)塊長(zhǎng)度送R4(20)
MOVR5,#14H ;接收數(shù)據(jù)塊長(zhǎng)度送R5(20)
ACALLMCOM ;調(diào)用主機(jī)通訊子程序
SJMP$二:主機(jī)通訊子程序(MCOM)
ORG2100HMCOM: MOVA,R2 ;取從機(jī)地址
MOVSBUF,A JNBRI,$ CLRRI MOVA,SBUF XRLA,R2 ;核對(duì)兩個(gè)地址
JZMTXD2 ;相符時(shí),轉(zhuǎn)MTXD2MTXD1:MOVSBUF,#0FFH ;返回地址錯(cuò)誤時(shí),發(fā)送從機(jī)復(fù)位信號(hào)
SETBTB8 ;設(shè)定地址標(biāo)志
SJMPMCOM ;重發(fā)從機(jī)地址,使所有從機(jī)重新判斷地址MTXD2:CLRTB8 ;準(zhǔn)備發(fā)送命令
MOVSBUF,R3 ;送出命令
JNBRI,$ ;等待從機(jī)應(yīng)答
CLRRI ;從機(jī)應(yīng)答后清標(biāo)志
MOVA,SBUF ;接收從機(jī)應(yīng)答命令
JNBACC.7,MTXD3 ;命令無(wú)錯(cuò)時(shí),則命令分類
SJMPMTXD1 ;命令錯(cuò)返回重新聯(lián)絡(luò)MTXD3:CJNER3,#00H,MRXD ;從機(jī)發(fā)送主機(jī)接收時(shí),轉(zhuǎn)MRXD
JNBACC.0,MTXD1 ;從機(jī)接收時(shí),若從機(jī)未準(zhǔn)備好轉(zhuǎn)回MTXD4:MOVSBUF,@R0 ;若從機(jī)準(zhǔn)備好,則開始發(fā)送
JNBTI,$ CLRTI INCR0 DJNZR4,MTXD4 RETMRXD: JNBACC.1,MTXD1 ;從機(jī)發(fā)送未準(zhǔn)備好返回MRXD1:JNBRI,$ ;等待接收
CLRRI MOVA,SBUF INCR1 ;接收數(shù)據(jù)區(qū)指針加一
DJNZR5,MRXD1 ;未接收完則繼續(xù)(R5接收數(shù)據(jù)計(jì)數(shù)器)
RET END
ERR從機(jī)返回的狀態(tài)字TRDYRRDY0:合法命令
0:發(fā)送未就緒
0:接收未就緒1:非法命令
1:發(fā)送就緒
1:接收就緒從機(jī)程序框圖T1為定時(shí),模式2B=1200,啟動(dòng)T1設(shè)串口為模式3REN=1,SM2=0TB8=1設(shè)定程序參數(shù):R0~R3開串行口中斷停機(jī)保護(hù)現(xiàn)場(chǎng)接收地址符合本機(jī)?回送本機(jī)地址接收下一字符是命令嗎?命令分類本機(jī)發(fā)送準(zhǔn)備就緒?本機(jī)接收準(zhǔn)備就緒?發(fā)TRDY=1狀態(tài)字發(fā)RRDY=1狀態(tài)字發(fā)送數(shù)據(jù)接收數(shù)據(jù)發(fā)送完?接收完?保護(hù)現(xiàn)場(chǎng)返回NNYY發(fā)送命令接收命令非法命令送TRDY=0送RRDY=0NNNY主程序中斷服務(wù)程序三:從機(jī)主程序
ORG1000HSTART: MOVTMOD,#20H ;設(shè)定定時(shí)器T1為模式2 MOVTH1,#0F4H ;設(shè)定波特率為1200 MOVTL1,#0F4H SETBTR1 ;啟動(dòng)定時(shí)器T1
MOVSCON,#0F8H
;設(shè)串口模式3,REN=1,SM2=1,TB8=1
MOVPCON,#00H MOVR0,#20H ;R0指向發(fā)送數(shù)據(jù)塊首地址
MOVR1,#40H ;R1指向接收數(shù)據(jù)塊首址
MOVR2,#14H ;R2賦發(fā)送數(shù)據(jù)塊長(zhǎng)度
MOVR3,#14H ;R3賦接收數(shù)據(jù)塊長(zhǎng)度
SETBEA SETBES
;開中斷
CLRRI ;清標(biāo)志RI準(zhǔn)備接收數(shù)據(jù)
SJMP$ ;等待中斷四:從機(jī)中斷服務(wù)程序
` ORG0023H LJMP0100H ORG0100HSINTS: CLRRI ;接收到地址后清RI
PUSHACC PUSHPSW ;保護(hù)現(xiàn)場(chǎng)
MOVA,SBUF ;接收主機(jī)送來(lái)得從機(jī)地址
XRLA,#SLAVE ;核實(shí)從機(jī)地址
JZSRXD1 ;若是本機(jī)地址轉(zhuǎn)SRXD1RETU: POPPSW ;返回主程序
POPACC ;恢復(fù)現(xiàn)場(chǎng)
RETI ;中斷返回SRXD1:CLRSM2 ;準(zhǔn)備接收主機(jī)數(shù)據(jù)/命令
MOVSBUF,#SLAVE ;向主機(jī)發(fā)回從機(jī)地址
JNBRI,$ ;等待主機(jī)的命令
CLRRI ;接收到主機(jī)命令后清RI JNBRB8,SRXD2 ;若是命令(RB8=0)則轉(zhuǎn)SRXD2繼續(xù)
SJMPRETU ;接收的不是命令時(shí)(RB8=1),返回SRXD2:MOVA,SBUF ;將接收到的命令送A CJNEA,#02H,NEXT ;命令合法NEXT: JCSRXD3 ;若命令合法(A>02H)則繼續(xù)
CLRTI ;命令不合法則清TI準(zhǔn)備發(fā)回ERR=1 MOVSBUF,#80H ;發(fā)送ERR=1的狀態(tài)字
SETBSM2 ;SM2重新置位
SJMPRETU ;返回主程序SRXD3:JZSCHRX ;若A=00H既主機(jī)發(fā)送從機(jī)接收轉(zhuǎn)SCHRX JBF0H,STXD ;若從機(jī)準(zhǔn)備好(F0H=1)時(shí),轉(zhuǎn)STXD MOVSBUF,#00H ;未準(zhǔn)備好時(shí),向主機(jī)發(fā)回TRXD=0信息
SETBSM2 SJMPRETU ;返回主程序STXD: MOVSBUF,#02H ;向主機(jī)發(fā)送TRDY=1的狀態(tài)字
JNBTI,$ ;等待發(fā)送完畢
CLRTI ;發(fā)送完畢后清標(biāo)志TILOOP1:MOVSBUF,@R0 ;開始發(fā)送數(shù)據(jù)塊
JNBTI,$ CLRTI INCR0 DJNZR2,LOOP1 SETBSM2 ;數(shù)據(jù)塊發(fā)送完畢
SJMPRETU ;返回主程序SCHRX:JBPSW.1,SRXD ;本機(jī)接收就緒時(shí)轉(zhuǎn)SRXD
MOVSBUF,#00H ;接收未準(zhǔn)備好時(shí),向主機(jī)發(fā)RRDY=0 SETBSM2 SJMPRETU ;返回主程序SRXD: MOVSBUF,#01H ;向主機(jī)發(fā)送RRDY=1狀態(tài)字LOOP2:JNBRI,$ ;等待接收數(shù)據(jù)塊,開始接收數(shù)據(jù)塊
CLRRI MOV@R1,SBUF INCR1 DJNZR3,LOOP2
SETBSM2 ;數(shù)據(jù)塊接收完畢
SJMPRETU ;返回主程序
END返回本節(jié)目錄串行通信總線:RS232RS485IICSPIUSBCAN…4.6.3I2C總線標(biāo)準(zhǔn)與接口電路
I2C總線(InterIntegratedCircuitBus):是Philips公司推出的串行總線標(biāo)準(zhǔn)(為二線制)。總線上擴(kuò)展的外圍器件及外設(shè)接口通過(guò)總線尋址,是具備總線仲裁和高低速設(shè)備同步等功能的高性能多主機(jī)總線。1.I2C總線工作原理組成:串行數(shù)據(jù)線SDA和串行時(shí)鐘線SCL構(gòu)成的,可發(fā)送和接收數(shù)據(jù)。要求:所有掛接在I2C總線上的器件和接口電路都應(yīng)具有I2C總線接口,且所有的SDA/SCL同名端相連??偩€上所有器件要依靠SDA發(fā)送的地址信號(hào)尋址,不需要片選線。特點(diǎn):組成系統(tǒng)結(jié)構(gòu)簡(jiǎn)單,占用空間小,無(wú)需專門的母板和插座,芯片管腳的數(shù)量少,無(wú)需片選信號(hào),價(jià)格低。允許若干兼容器件共享總線,應(yīng)用比較廣泛??偩€的長(zhǎng)度可達(dá)7.6m,傳送速度可達(dá)400kbps,標(biāo)準(zhǔn)速率為100kbps。支持多個(gè)組件。支持多主控器件(某時(shí)刻只能有一個(gè)主控器件)。I2C總線上所有設(shè)備的SDA,SCL引腳必須外接上拉電阻。2.I2C總線系統(tǒng)結(jié)構(gòu)
一個(gè)典型的I2C總線結(jié)構(gòu)如下圖所示。系統(tǒng)中所有的器件均有I2C總線接口,所有器件通過(guò)兩根線SDA(串行數(shù)據(jù)線)和SCL(串行時(shí)鐘線)連接到I2C總線上,并通過(guò)尋址識(shí)別。
I2C總線中的器件既可以作為主控器,也可以作為被控器,系統(tǒng)中每個(gè)器件均具有惟一的地址,各器件之間通過(guò)尋址確定數(shù)據(jù)交換方。任何時(shí)刻總線只能由一個(gè)主控制器,數(shù)據(jù)的傳輸只能在主、從器件間進(jìn)行。3.I2C總線協(xié)議
I2C總線在傳送數(shù)據(jù)過(guò)程中共有三種類型信號(hào):開始信號(hào)、停止信號(hào)和應(yīng)答信號(hào)。開始信號(hào):SCL保持高電平的狀態(tài)下,SDA出現(xiàn)下降沿。出現(xiàn)開始信號(hào)以后,總線被認(rèn)為“忙”。停止信號(hào):SCL保持高電平的狀態(tài)下,SDA出現(xiàn)上升沿。停止信號(hào)過(guò)后,總線被認(rèn)為“空閑”。應(yīng)答信號(hào):接收數(shù)據(jù)的器件在接收到8位數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的器件發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。
總線空閑:SCL和SDA都保持高電平??偩€忙:在數(shù)據(jù)傳送開始以后,SCL為高電平的時(shí)候,SDA的數(shù)據(jù)必須保持穩(wěn)定,只有當(dāng)SCL為低電平的時(shí)候才允許SDA上的數(shù)據(jù)改變。4.I2C總線的傳送格式
I2C總線的傳送格式為主從式,對(duì)系統(tǒng)中的某一器件來(lái)說(shuō)有四種工作方式:主發(fā)送方式、從發(fā)送方式、主接收方式、從接收方式。
(1)主發(fā)送從接收
主器件產(chǎn)生開始信號(hào)以后,發(fā)送的第一個(gè)字節(jié)為控制字節(jié)。前七位為從器件的地址片選信號(hào)。最低位為數(shù)據(jù)傳送方向位(高電平表示讀從器件,低電平表示寫從器件),然后發(fā)送一個(gè)選擇從器件片內(nèi)地址的字節(jié),來(lái)決定開始讀寫數(shù)據(jù)的起始地址。接著再發(fā)送數(shù)據(jù)字節(jié),可以是單字節(jié)數(shù)據(jù),也可以是一組數(shù)據(jù),由主器件來(lái)決定。從器件每接收到一個(gè)字節(jié)以后,都要返回一個(gè)應(yīng)答信號(hào)(ASK=0)。主器件在應(yīng)答時(shí)鐘周期高電平期間釋放SDA線,轉(zhuǎn)由從器件控制,從器件在這個(gè)時(shí)鐘周期的高電平期間必須拉低SDA線,并使之為穩(wěn)定的低電平,作為有效的應(yīng)答信號(hào)。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 營(yíng)銷培訓(xùn)課件-公眾賬號(hào)微信營(yíng)銷策劃方案
- 毛發(fā)囊腫的臨床護(hù)理
- 在省委第四巡視組巡視臨夏州情況反饋會(huì)上的主持講話
- 汗管棘皮瘤的臨床護(hù)理
- 孕期焦慮癥的健康宣教
- 多發(fā)性脂囊瘤的臨床護(hù)理
- 妊娠線的健康宣教
- X連鎖高IgM綜合征的健康宣教
- JJF(陜) 096-2022 氟化氫氣體檢測(cè)報(bào)警器校準(zhǔn)規(guī)范
- 【培訓(xùn)課件】非HR人員的人事管理
- 【MOOC】線性代數(shù)-同濟(jì)大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 我們?yōu)槭裁匆W(xué)習(xí)-勵(lì)志主題班會(huì)(課件)
- 中華人民共和國(guó)能源法
- 身臨其境 課件-2024-2025學(xué)年人教版(2024)初中美術(shù)七年級(jí)上冊(cè)
- 一年級(jí)心理健康課件生命真美好蘇科版
- 蔣詩(shī)萌小品《誰(shuí)殺死了周日》臺(tái)詞完整版
- 勞動(dòng)教育智慧樹知到期末考試答案2024年
- 人才計(jì)劃答辯常見問(wèn)題
- 河南省城市生命線安全工程建設(shè)指引V1
- 報(bào)價(jià)單(報(bào)價(jià)單模板)
- 刑事案件模擬法庭劇本完整版五篇
評(píng)論
0/150
提交評(píng)論