單片機(jī) 定時(shí)器_第1頁(yè)
單片機(jī) 定時(shí)器_第2頁(yè)
單片機(jī) 定時(shí)器_第3頁(yè)
單片機(jī) 定時(shí)器_第4頁(yè)
單片機(jī) 定時(shí)器_第5頁(yè)
已閱讀5頁(yè),還剩55頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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í)器的編程完全相同。這說明,MCS-51單片機(jī)在進(jìn)行串行通信時(shí),是與定時(shí)器的工作有關(guān)的。定時(shí)器用來設(shè)定串行通信數(shù)據(jù)的傳輸速度。在串行通信中,傳輸速度是用波特率來表征的,有關(guān)波特率與定時(shí)器的關(guān)系以及編程在8.3.3節(jié)介紹。

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

在生活中同學(xué)們排橫隊(duì)行走——并行;排縱隊(duì)行走——串行。計(jì)算機(jī)中在傳輸信息、數(shù)據(jù)時(shí)也有并行、串行的問題。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、串口的組成從編程角度講來看主要由以下寄存器組成。

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

TI

RITI/RI:中斷請(qǐng)求標(biāo)志位(前面已講過)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ā)送接收無起始位,無停止位??捎糜诓⒖诘臄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í),因移位脈沖來源不同而使串行口的波特率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來作為波特率發(fā)生器,以模式2的方式工作。用T1作為波特率發(fā)生器時(shí),根據(jù)波特率來計(jì)算T1的初值就成為串口程序初始化的主要任務(wù)之一。在通訊過程中,對(duì)標(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時(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ù)來傳送、接收每一字節(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ā)送地址碼來尋找從機(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ā)、從收命令?;蛑魇铡陌l(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 ;命令無錯(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ī)送來得從機(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è)接口通過總線尋址,是具備總線仲裁和高低速設(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)單,占用空間小,無需專門的母板和插座,芯片管腳的數(shù)量少,無需片選信號(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總線接口,所有器件通過兩根線SDA(串行數(shù)據(jù)線)和SCL(串行時(shí)鐘線)連接到I2C總線上,并通過尋址識(shí)別。

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

I2C總線在傳送數(shù)據(jù)過程中共有三種類型信號(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)過后,總線被認(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)中的某一器件來說有四種工作方式:主發(fā)送方式、從發(fā)送方式、主接收方式、從接收方式。

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

主器件產(chǎn)生開始信號(hào)以后,發(fā)送的第一個(gè)字節(jié)為控制字節(jié)。前七位為從器件的地址片選信號(hào)。最低位為數(shù)據(jù)傳送方向位(高電平表示讀從器件,低電平表示寫從器件),然后發(fā)送一個(gè)選擇從器件片內(nèi)地址的字節(jié),來決定開始讀寫數(shù)據(jù)的起始地址。接著再發(fā)送數(shù)據(jù)字節(jié),可以是單字節(jié)數(shù)據(jù),也可以是一組數(shù)據(jù),由主器件來決定。從器件每接收到一個(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. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論