單片機 定時器_第1頁
單片機 定時器_第2頁
單片機 定時器_第3頁
單片機 定時器_第4頁
單片機 定時器_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

基本概念RS-232接口MCS-51的串行接口單片機與單片機之間的通信IIC總線第

串行口通信技術(shù)本章內(nèi)容SingleChipMicrocomputer1.實訓(xùn)目的(1)復(fù)習(xí)掌握定時器的功能和編程使用。(2)理解串行通信與并行通信的兩種方式。(3)掌握串行通信的重要指標(biāo):字符幀和波特率。(4)初步了解MCS-51單片機串行口的使用方法。實訓(xùn)

單片機之間的雙機通信2.實訓(xùn)引入

單片機間經(jīng)常需要互相傳遞信息--通信.3.實訓(xùn)程序甲機發(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$乙機接收及顯示程序參考如下:

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.實訓(xùn)分析與總結(jié)分析程序可以看出,通信雙方都有對單片機定時器的編程(注意發(fā)送、接收程序的前4條指令),而且雙方對定時器的編程完全相同。這說明,MCS-51單片機在進(jìn)行串行通信時,是與定時器的工作有關(guān)的。定時器用來設(shè)定串行通信數(shù)據(jù)的傳輸速度。在串行通信中,傳輸速度是用波特率來表征的,有關(guān)波特率與定時器的關(guān)系以及編程在8.3.3節(jié)介紹。

MCS-51單片機串行接口一、串行通信概述1、什么叫串行通信?

在生活中同學(xué)們排橫隊行走——并行;排縱隊行走——串行。計算機中在傳輸信息、數(shù)據(jù)時也有并行、串行的問題。0010001001P1.0P1.1P1.2P1.3RXDTXD單片機外設(shè)1外設(shè)21111110101000接收設(shè)備發(fā)送設(shè)備2、同步通信、異步通信

同步——發(fā)送設(shè)備時鐘與接收設(shè)備時鐘嚴(yán)格一致。校驗字符2校驗字符1數(shù)據(jù)n………數(shù)據(jù)2數(shù)據(jù)1同步字符2同步字符1異步——發(fā)送時鐘與接收時鐘不一定相等。空閑位停止位奇偶校驗位5~8位數(shù)據(jù)起始位空閑位3、串行通信的方向單工

A

發(fā)

B發(fā)半雙工

A

發(fā)收

B

收發(fā)例如:廣播電臺收音機例如:對講機全雙工

A

發(fā)收

B

收發(fā)例如:電話機4、波特率即串行通信速率。b/s、bps在異步通信中,單位時間內(nèi)所傳送的有效二進(jìn)制位數(shù)——波特率。舉例、設(shè)有一幀信息,1個起始位、8個數(shù)據(jù)位、1個停止位,傳輸速率為每秒240個字符。求波特率。解:(1+8+1)×240=2400b/s=2400波特。

5、串行通信接口發(fā)送:CPUD7D6D5D4D3D2D1D0發(fā)送寄存器SBUF01D0D1D2D3D4D5D6D7發(fā)送時鐘:接收:D0D1D2D3D4D5D6D710D7D6D5D4D3D2D1D0CPU接收時鐘接收數(shù)據(jù)寄存器SBUF二、MCS-51機串行接口單片機內(nèi)有通用異步接收/發(fā)送器UART。全雙工,4種工作方式,波特率可編程設(shè)置,可中斷。1、串口的組成從編程角度講來看主要由以下寄存器組成。

SBUF——串行發(fā)送/接收數(shù)據(jù)緩沖器是兩個物理單元,共用一個地址(99H)SMODSMOD位用于決定波特率的倍數(shù)。020=1倍121=2倍PCON——電源控制寄存器SCON——串行口控制寄存器SM0SM1SM2RENTB8RB8

TI

RITI/RI:中斷請求標(biāo)志位(前面已講過)RB8:接收的第九位數(shù)TB8:發(fā)送的第九位數(shù)REN:允許接收控制位SM2:多機通信控制位(常與RB8配合,決定是否激活RI)SM0、SM1:工作方式選擇位(四種工作方式)內(nèi)部結(jié)構(gòu)框圖51內(nèi)部總線SBUF零檢測器移位時鐘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

模式選擇多機通訊位允許接收位

發(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ā)送接收無起始位,無停止位??捎糜诓⒖诘臄U(kuò)展。方式0

內(nèi)部結(jié)構(gòu)框圖51內(nèi)部總線SBUF零檢測器移位時鐘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ù)據(jù)裝載SBUF,RI置1,停止位進(jìn)入RB8。

(3)方式2、方式3:9位UART

一般用于多機通信。一幀信息11位。

D0D1D2D3D4D5D6D7TB8停止位起始位發(fā)送發(fā)送完數(shù)據(jù)置位TI。

TB8D7D6D5D4D3D2D1D0起始位停止位接收接收到有效數(shù)據(jù)完畢,置位RI的條件:REN=1,RI=0且SM2=0或接收到第9位數(shù)據(jù)為1,此時,數(shù)據(jù)裝載SBUF,RI置1,第9位數(shù)據(jù)(TB8)RB8。

送RB81/161/2T1溢出10SMOD1/2focs/210SMOD模式2串行口的波特率B模式1、3時串行口的波特率B1/16focs/12模式0串行口的波特率B串行口四種模式時,因移位脈沖來源不同而使串行口的波特率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計數(shù)器8位初值寄存器T1溢出率=Yc=1/TcTc=(256-N)*12/foscYc=fosc/[12×(256-TH1)]溢出率是指每秒定時器溢出的次數(shù)波特率=2SMOD×Yc

32模式0、2時的波特率的計算模式0:波特率B=fosc/12fosc為系統(tǒng)頻率模式2:B=1/64*fosc(SMOD=0時)或B=1/32*fosc(SMOD=1時)其中:SMOD為電源控制寄存器PCON的最高位。返回本節(jié)目錄模式1、3時的波特率的計算

B=1/16×T1溢出率(SMOD=1時)或:B=1/32×T1溢出率(SMOD=0時)其中:T1溢出率=fosc/12×[1/(256-TH1)];TH1為初值所以:B=fosc/192×[1/(256-TH1)](SMOD=1時)或:B=fosc/384×[1/(256-TH1)](SMOD=0時)這樣,我們可以得到求TH1(初值)的計算公式:

TH1=256-[fosc/(384XB)];(SMOD=0時)

TH1=256-[fosc/(192XB)];(SMOD=1時)【舉例】:設(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溢出率=單位時間內(nèi)溢出次數(shù)=1/(T1的定時時間)而T1的定時時間t就是T1溢出一次所用的時間。此情況下,一般設(shè)T1工作在模式2(8位自動重裝初值)。

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的計數(shù)初值:

y=256-2SMOD×fosc/(波特率×32×12)

方式1和方式3的波特率可變,由定時器1的溢出率決定波特率/(b/s)fosc/MHzSMOD定時器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波特率=一個機器周期是晶振的頻率f除以12(標(biāo)準(zhǔn)模式),每當(dāng)計數(shù)到256-TH1溢出一次(定時器1工作在方式2,8位),使用11.0592MHz晶振,TH1=0xFD,此時溢出速率為

11.0592/12/(0xFF-0xFD)=0.3072(MHz)

再除以32,為0.0096MHz,9600Hz!串行口的應(yīng)用在編制串行通訊程序時,首先要確定兩個參數(shù):

1,通訊雙方的“波特率”,必須保持嚴(yán)格一致;

2,傳輸數(shù)據(jù)的格式“字符幀格式”必須統(tǒng)一。MCS-51串口的4種模式中:0、2模式的波特率是固定的;1和3模式時波特率是可變且由定時器T1來作為波特率發(fā)生器,以模式2的方式工作。用T1作為波特率發(fā)生器時,根據(jù)波特率來計算T1的初值就成為串口程序初始化的主要任務(wù)之一。在通訊過程中,對標(biāo)志(RI、TI)的判斷是控制通訊全過程的關(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查詢(無中斷)8位數(shù)據(jù)+奇偶位的異步收發(fā)UARTRI=0,REN=1,RB8=1若SM2=0時查詢。若SM2=1時引發(fā)中斷8位數(shù)據(jù)+控制位的異步收發(fā)UART返回本節(jié)目錄模式1舉例(一)發(fā)送程序TXD.ASM

org0000hljmp0100horg0100hstart:movtmod,#20h;設(shè)定定時器T1為模式2movtl1,#0f4h;送定時初值(fosc=11.059)

movth1,#0f4h;波特率B=2400movpcon,#00h;PCON中的SMOD=0setbtr1;啟動定時器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初始化啟動T1串行口初始化輸入數(shù)據(jù)到A發(fā)送一幀數(shù)據(jù)MOVSBUF,ATI=1?軟件清TIGATEC/TM1M0GATEC/TM1M0設(shè)定定時器T1的工作模式00000010B設(shè)定串行口模式寄存器SCON為01000000BYN(二)接收程序:RXD.ASM

org0000h ljmp0100h org0100hstart: movtmod,#20h ;選定T1為模式2(自動重裝)

movtl1,#0f4h ;設(shè)定初值

movth1,#0f4h ;同上

movpcon,#00h ;PCON的SMOD=0 setbtr1 ;啟動T1定時器

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初始化啟動T1串行口初始化輸出數(shù)據(jù)到P1數(shù)據(jù)送AMOVA,SBUFRI=1?軟件清TISM0SM1SM2RENTB8RB8TIRIGATEC/TM1M0GATEC/TM1M0定時器TMOD(89H)的工作模式00000010B串行口模式寄存器SCON(98H)為01010000BYN思考題:用中斷的方式接收數(shù)據(jù)

org0000h ljmpstart

org0023h ljmprxd1

org0100hstart: movtmod,#20h;選定T1為模式2(自動重裝)

movtl1,#0f4h ;設(shè)定初值

movth1,#0f4h ;同上

movpcon,#00h;PCON的SMOD=0 setbtr1 ;啟動T1定時器

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初始化并啟動T1串行口初始化開串行口中斷等待RI中斷輸出數(shù)據(jù)到P1接收一幀數(shù)據(jù)MOVA,SBUF軟件清TIRETI主程序框圖中斷服務(wù)程序框圖EAXXESET1EX1ET0EX0設(shè)定中斷允許寄存器IE(A8H)為10010000B

模式2、3應(yīng)用舉例與模式1相比,模式2、3的主要特點:

1,9位數(shù)據(jù)的傳送格式:

其中:發(fā)送時第9位在TB8;接收時第9位在RB8中。

2,SM2:多機通訊位:

在模式0、1中:SM2=0。當(dāng)RI=1時便可以引發(fā)中斷。

在模式2、3中:

如果SM2=0,TI和RI雖然可以被激活,但不能引發(fā)中斷!如果SM2=1,且RB8=1時,RI被激活時可以引發(fā)中斷!根據(jù)上面特點,模式2、3可以:1,利用第9位數(shù)據(jù)來傳送、接收每一字節(jié)的“奇偶效驗位”。

2,利用SM2、RB8實現(xiàn)多機通訊功能。利用模式2,3進(jìn)行帶奇校驗的串行通訊程序流程圖數(shù)據(jù)送累加器APSW.P=1?SETBSCON.TB8CLRSCON.TB8MOVSBUF,ATI=1?CLRSCON.TIYESNONOYES發(fā)送端程序RI=1?MOVA,SBUFPSW.P⊕RB8=1?出錯處理CLRSCON.RIYESNO接收端程序使用“查詢法”編制的發(fā)送、接收程序NY數(shù)據(jù)送內(nèi)存使用模式3進(jìn)行多機通訊主機從機N從機4從機3從機2從機1串行數(shù)據(jù)線(2條)主從式多機通訊原理1,主機發(fā)送的數(shù)據(jù)可以傳送到各個從機,從機發(fā)送的數(shù)據(jù)只能為主機接收,從機之間不能直接通訊。2,主機和從機的設(shè)置為模式2或3,其中:主機的SM2=0(單機方式);從機的SM2=1(多機方式)。3,主機發(fā)送地址碼來尋找從機(地址碼特征是第9位數(shù)據(jù)為“1”

),所有從機都接收主機發(fā)出的地址碼(因為RB8=1),既RI=1引發(fā)中斷。在中斷服務(wù)程序中,將接收到地址碼與自己的地址進(jìn)行比較,被選中的從機將自己的SM2=0,并維持在中斷服務(wù)程序中保持與主機的聯(lián)系。而未被選中的從機仍保持SM2=1,并退出中斷服務(wù)程序。4,當(dāng)主機找到從機后,開始向從機發(fā)數(shù)據(jù)、命令(其特征為第9位=0)。由于選中的從機SM2=0,從機仍可以使用查詢RI的方式接收主機發(fā)出的數(shù)據(jù)或命令(而未選中的從機因RB8=0不會引發(fā)它們的中斷)。當(dāng)主機與從機的通訊完成后,該從機再將其SM2=1并退出中斷服務(wù)程序。主機重新發(fā)出另一個從機的地址,所有從機可以馬上響應(yīng)并接收地址信息。多機通訊中主機與從機之間的控制、狀態(tài)信息主機的控制命令:00H主機發(fā)送,從機接收;(控制從機的操作)01H主機接收,從機發(fā)送。從機狀態(tài)字:從機向主機發(fā)送的用于表征從機工作狀態(tài)的信息(如下圖)。ERRTRDYRRDY0:合法命令0:發(fā)送未就緒0:接收未就緒1:非法命令1:發(fā)送就緒1:接收就緒從機返回的狀態(tài)字主機程序框圖T1為定時,模式2B=1200,啟動T1設(shè)串口為模式3REN=1,SM2=0TB8=1設(shè)定程序數(shù)據(jù):R0~R5調(diào)用MCOMMU停機MCOMMU發(fā)送從機地址從機應(yīng)答?地址相符?發(fā)送命令字TB8=0從機應(yīng)答?命令正確?命令分類接收數(shù)據(jù)塊發(fā)送數(shù)據(jù)塊從機接收就緒?從機發(fā)送就緒?RET命令從機復(fù)位NNYYNNYYNNYY接收發(fā)送一:主機程序(初始化部分)

ORG2000HSTART: MOVTMOD,#20H ;定時器T1為模式2 MOVTH1,#0F4H MOVTL1,#0F4H ;波特率為1200(設(shè)外接6MHz晶體)

SETBTR1 ;啟動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 ;被尋從機地址送R2 MOVR3,#00H/#01H ;主發(fā)、從收命令。或主收、從發(fā)命令

MOVR4,#14H ;發(fā)送數(shù)據(jù)塊長度送R4(20)

MOVR5,#14H ;接收數(shù)據(jù)塊長度送R5(20)

ACALLMCOM ;調(diào)用主機通訊子程序

SJMP$二:主機通訊子程序(MCOM)

ORG2100HMCOM: MOVA,R2 ;取從機地址

MOVSBUF,A JNBRI,$ CLRRI MOVA,SBUF XRLA,R2 ;核對兩個地址

JZMTXD2 ;相符時,轉(zhuǎn)MTXD2MTXD1:MOVSBUF,#0FFH ;返回地址錯誤時,發(fā)送從機復(fù)位信號

SETBTB8 ;設(shè)定地址標(biāo)志

SJMPMCOM ;重發(fā)從機地址,使所有從機重新判斷地址MTXD2:CLRTB8 ;準(zhǔn)備發(fā)送命令

MOVSBUF,R3 ;送出命令

JNBRI,$ ;等待從機應(yīng)答

CLRRI ;從機應(yīng)答后清標(biāo)志

MOVA,SBUF ;接收從機應(yīng)答命令

JNBACC.7,MTXD3 ;命令無錯時,則命令分類

SJMPMTXD1 ;命令錯返回重新聯(lián)絡(luò)MTXD3:CJNER3,#00H,MRXD ;從機發(fā)送主機接收時,轉(zhuǎn)MRXD

JNBACC.0,MTXD1 ;從機接收時,若從機未準(zhǔn)備好轉(zhuǎn)回MTXD4:MOVSBUF,@R0 ;若從機準(zhǔn)備好,則開始發(fā)送

JNBTI,$ CLRTI INCR0 DJNZR4,MTXD4 RETMRXD: JNBACC.1,MTXD1 ;從機發(fā)送未準(zhǔn)備好返回MRXD1:JNBRI,$ ;等待接收

CLRRI MOVA,SBUF INCR1 ;接收數(shù)據(jù)區(qū)指針加一

DJNZR5,MRXD1 ;未接收完則繼續(xù)(R5接收數(shù)據(jù)計數(shù)器)

RET END

ERR從機返回的狀態(tài)字TRDYRRDY0:合法命令

0:發(fā)送未就緒

0:接收未就緒1:非法命令

1:發(fā)送就緒

1:接收就緒從機程序框圖T1為定時,模式2B=1200,啟動T1設(shè)串口為模式3REN=1,SM2=0TB8=1設(shè)定程序參數(shù):R0~R3開串行口中斷停機保護(hù)現(xiàn)場接收地址符合本機?回送本機地址接收下一字符是命令嗎?命令分類本機發(fā)送準(zhǔn)備就緒?本機接收準(zhǔn)備就緒?發(fā)TRDY=1狀態(tài)字發(fā)RRDY=1狀態(tài)字發(fā)送數(shù)據(jù)接收數(shù)據(jù)發(fā)送完?接收完?保護(hù)現(xiàn)場返回NNYY發(fā)送命令接收命令非法命令送TRDY=0送RRDY=0NNNY主程序中斷服務(wù)程序三:從機主程序

ORG1000HSTART: MOVTMOD,#20H ;設(shè)定定時器T1為模式2 MOVTH1,#0F4H ;設(shè)定波特率為1200 MOVTL1,#0F4H SETBTR1 ;啟動定時器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ù)塊長度

MOVR3,#14H ;R3賦接收數(shù)據(jù)塊長度

SETBEA SETBES

;開中斷

CLRRI ;清標(biāo)志RI準(zhǔn)備接收數(shù)據(jù)

SJMP$ ;等待中斷四:從機中斷服務(wù)程序

` ORG0023H LJMP0100H ORG0100HSINTS: CLRRI ;接收到地址后清RI

PUSHACC PUSHPSW ;保護(hù)現(xiàn)場

MOVA,SBUF ;接收主機送來得從機地址

XRLA,#SLAVE ;核實從機地址

JZSRXD1 ;若是本機地址轉(zhuǎn)SRXD1RETU: POPPSW ;返回主程序

POPACC ;恢復(fù)現(xiàn)場

RETI ;中斷返回SRXD1:CLRSM2 ;準(zhǔn)備接收主機數(shù)據(jù)/命令

MOVSBUF,#SLAVE ;向主機發(fā)回從機地址

JNBRI,$ ;等待主機的命令

CLRRI ;接收到主機命令后清RI JNBRB8,SRXD2 ;若是命令(RB8=0)則轉(zhuǎn)SRXD2繼續(xù)

SJMPRETU ;接收的不是命令時(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既主機發(fā)送從機接收轉(zhuǎn)SCHRX JBF0H,STXD ;若從機準(zhǔn)備好(F0H=1)時,轉(zhuǎn)STXD MOVSBUF,#00H ;未準(zhǔn)備好時,向主機發(fā)回TRXD=0信息

SETBSM2 SJMPRETU ;返回主程序STXD: MOVSBUF,#02H ;向主機發(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 ;本機接收就緒時轉(zhuǎn)SRXD

MOVSBUF,#00H ;接收未準(zhǔn)備好時,向主機發(fā)RRDY=0 SETBSM2 SJMPRETU ;返回主程序SRXD: MOVSBUF,#01H ;向主機發(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è)接口通過總線尋址,是具備總線仲裁和高低速設(shè)備同步等功能的高性能多主機總線。1.I2C總線工作原理組成:串行數(shù)據(jù)線SDA和串行時鐘線SCL構(gòu)成的,可發(fā)送和接收數(shù)據(jù)。要求:所有掛接在I2C總線上的器件和接口電路都應(yīng)具有I2C總線接口,且所有的SDA/SCL同名端相連??偩€上所有器件要依靠SDA發(fā)送的地址信號尋址,不需要片選線。特點:組成系統(tǒng)結(jié)構(gòu)簡單,占用空間小,無需專門的母板和插座,芯片管腳的數(shù)量少,無需片選信號,價格低。允許若干兼容器件共享總線,應(yīng)用比較廣泛??偩€的長度可達(dá)7.6m,傳送速度可達(dá)400kbps,標(biāo)準(zhǔn)速率為100kbps。支持多個組件。支持多主控器件(某時刻只能有一個主控器件)。I2C總線上所有設(shè)備的SDA,SCL引腳必須外接上拉電阻。2.I2C總線系統(tǒng)結(jié)構(gòu)

一個典型的I2C總線結(jié)構(gòu)如下圖所示。系統(tǒng)中所有的器件均有I2C總線接口,所有器件通過兩根線SDA(串行數(shù)據(jù)線)和SCL(串行時鐘線)連接到I2C總線上,并通過尋址識別。

I2C總線中的器件既可以作為主控器,也可以作為被控器,系統(tǒng)中每個器件均具有惟一的地址,各器件之間通過尋址確定數(shù)據(jù)交換方。任何時刻總線只能由一個主控制器,數(shù)據(jù)的傳輸只能在主、從器件間進(jìn)行。3.I2C總線協(xié)議

I2C總線在傳送數(shù)據(jù)過程中共有三種類型信號:開始信號、停止信號和應(yīng)答信號。開始信號:SCL保持高電平的狀態(tài)下,SDA出現(xiàn)下降沿。出現(xiàn)開始信號以后,總線被認(rèn)為“忙”。停止信號:SCL保持高電平的狀態(tài)下,SDA出現(xiàn)上升沿。停止信號過后,總線被認(rèn)為“空閑”。應(yīng)答信號:接收數(shù)據(jù)的器件在接收到8位數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的器件發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。

總線空閑:SCL和SDA都保持高電平??偩€忙:在數(shù)據(jù)傳送開始以后,SCL為高電平的時候,SDA的數(shù)據(jù)必須保持穩(wěn)定,只有當(dāng)SCL為低電平的時候才允許SDA上的數(shù)據(jù)改變。4.I2C總線的傳送格式

I2C總線的傳送格式為主從式,對系統(tǒng)中的某一器件來說有四種工作方式:主發(fā)送方式、從發(fā)送方式、主接收方式、從接收方式。

(1)主發(fā)送從接收

主器件產(chǎn)生開始信號以后,發(fā)送的第一個字節(jié)為控制字節(jié)。前七位為從器件的地址片選信號。最低位為數(shù)據(jù)傳送方向位(高電平表示讀從器件,低電平表示寫從器件),然后發(fā)送一個選擇從器件片內(nèi)地址的字節(jié),來決定開始讀寫數(shù)據(jù)的起始地址。接著再發(fā)送數(shù)據(jù)字節(jié),可以是單字節(jié)數(shù)據(jù),也可以是一組數(shù)據(jù),由主器件來決定。從器件每接收到一個字節(jié)以后,都要返回一個應(yīng)答信號(ASK=0)。主器件在應(yīng)答時鐘周期高電平期間釋放SDA線,轉(zhuǎn)由從器件控制,從器件在這個時鐘周期的高電平期間必須拉低SDA線,并使之為穩(wěn)定的低電平,作為有效的應(yīng)答信號。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論