第四章I、O應(yīng)用技術(shù)_第1頁(yè)
第四章I、O應(yīng)用技術(shù)_第2頁(yè)
第四章I、O應(yīng)用技術(shù)_第3頁(yè)
第四章I、O應(yīng)用技術(shù)_第4頁(yè)
第四章I、O應(yīng)用技術(shù)_第5頁(yè)
已閱讀5頁(yè),還剩125頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第四章

I/O應(yīng)用技術(shù)第一節(jié)

MCS-51單片機(jī)的中斷系統(tǒng)一、概述

與上對(duì)比,單片機(jī)中也有同樣的問(wèn)題。CPU正在執(zhí)行原程序,突然,被意外事情打斷,轉(zhuǎn)去執(zhí)行新程序。CPU執(zhí)行新程序結(jié)束后,又回到原程序中繼續(xù)執(zhí)行。這樣的過(guò)程就叫。中斷

什么叫中斷?

舉例:某同學(xué)正在教室寫(xiě)作業(yè),忽然被人叫出去,回來(lái)后,繼續(xù)寫(xiě)作業(yè)。這就是生活中中斷的例子。

對(duì)突發(fā)事故,做出緊急處理。根據(jù)現(xiàn)場(chǎng)隨時(shí)變化的各種參數(shù)、信息,做出實(shí)時(shí)監(jiān)控。

CPU與外部設(shè)備并行工作,以中斷方式相聯(lián)系,提高工作效率。解決快速CPU與慢速外設(shè)之間的矛盾。在多項(xiàng)外部設(shè)備同時(shí)提出中斷請(qǐng)求情況下,CPU能根據(jù)輕重緩急響應(yīng)外設(shè)的中斷請(qǐng)求。

中斷的作用:對(duì)于MCS-51單片機(jī)中斷系統(tǒng)的組成可以用一句話來(lái)講,叫做:“五源中斷,兩級(jí)管理”

五個(gè)中斷源:入口地址外部中斷0(/INT0)0003HT0溢出中斷000BH

外部中斷1(/INT1)0013HT1溢出中斷001BH

串口中斷0023H二、中斷請(qǐng)求源(“五源中斷”)中斷源的中斷請(qǐng)求,如何通知CPU?利用中斷請(qǐng)求標(biāo)志位來(lái)通知?。?!以上6個(gè)中斷請(qǐng)求標(biāo)志位分別分布在TCON、SCON兩個(gè)寄存器中。TCONIT0IE0IT1IE1TR0TF0TR1TF1TF1——T1的溢出中斷標(biāo)志硬件置1,硬件清0(也可軟件清0)TF0——T0的溢出中斷標(biāo)志。(同TF1,只是針對(duì)T0的)IE1——外部中斷1(/INT1)請(qǐng)求標(biāo)志。外部有中斷請(qǐng)求時(shí),硬件使IE1置1,硬件清0。IE0——外部中斷0(/INT0)請(qǐng)求標(biāo)志。IT1——外部中斷1(/INT1)觸發(fā)類(lèi)型控制位。

IT1=0,低電平觸發(fā)。IT1=1,下降沿觸發(fā)。

IT0——

外中斷0(/INT0)觸發(fā)類(lèi)型控制位,用法同IT1。

SCON

RI

TIRB8TB8RENSM2SM1SM0TI——串口發(fā)送中斷標(biāo)志位。

發(fā)送完數(shù)據(jù),硬件使TI置1,軟件清0(CLRTI)

RI——串行口接收中斷標(biāo)志位。

硬件置1,軟件清0。

在中斷源與CPU之間有二級(jí)中斷允許控制邏輯電路,類(lèi)似開(kāi)關(guān),其中第一級(jí)為一個(gè)總開(kāi)關(guān),第二級(jí)為五個(gè)分開(kāi)關(guān),由IE控制。

三、中斷控制(兩級(jí)管理)1、中斷屏蔽(第一級(jí)管理)IEEX0ET0EX1ET1ES————EAEA——

總控制位

“—”——未定義位ES——

串口控制位

ET1——T1中斷控制位

EX1——/INT1控制位

ET0——T0中斷控制位

EX0——/INT0控制位

若為“1”,開(kāi)關(guān)接通,允許例如SETBEA若為“0”,開(kāi)關(guān)斷開(kāi),不允許例如CLRIE.72、中斷優(yōu)先級(jí)(第二級(jí)管理)為什么要有中斷優(yōu)先級(jí)?CPU同一時(shí)間只能響應(yīng)一個(gè)中斷請(qǐng)求。若同時(shí)來(lái)了兩個(gè)或兩個(gè)以上中斷請(qǐng)求,就必須有先有后。?。。?/p>

為此將5個(gè)中斷源分成高級(jí)、低級(jí)兩個(gè)級(jí)別,高級(jí)優(yōu)先,由IP控制。

IPPX0PT0PX1PT1

PS——————PS——串口的中斷優(yōu)先級(jí)別PT1——定時(shí)/計(jì)數(shù)器T1的中斷優(yōu)先級(jí)別PX1——外部中斷1的中斷優(yōu)先級(jí)別PT0——定時(shí)/計(jì)數(shù)器T0的中斷優(yōu)先級(jí)別PX0——外部中斷0的中斷優(yōu)先級(jí)別該位是“1”時(shí),為高級(jí)優(yōu)先級(jí)該位是“0”時(shí),為低級(jí)優(yōu)先級(jí)同一級(jí)中的5個(gè)中斷源的優(yōu)先順序是:/INT0中斷

T0溢出中斷

/INT1中斷

T1溢出中斷

串口中斷

高低出廠前已由廠家固化順序——事先約定中斷優(yōu)先原則:(概括為四句話)1、低級(jí)不打斷高級(jí)2、高級(jí)不睬低級(jí)3、同級(jí)不能打斷4、同級(jí)、同時(shí)中斷,事先約定。

事件1事件2子程序2子程序1中斷嵌套的概念:

主程序中斷中斷四、MCS-51中斷的響應(yīng)過(guò)程

CPU每個(gè)機(jī)器周期都需要順序檢查每個(gè)中斷源,當(dāng)檢測(cè)到有中斷請(qǐng)求時(shí),能否響應(yīng),還要看下述情況是否存在:

(1)CPU正處理相同級(jí)別或更高級(jí)別的中斷;(2)正在執(zhí)行指令,還未到最后一個(gè)機(jī)器周期;(3)正在執(zhí)行的指令是RETI或訪問(wèn)IP、IE指令,則執(zhí)行完上述指令后,再執(zhí)行一條指令后,才會(huì)響應(yīng)新中斷。

日常生活中的中斷與單片機(jī)中斷的比較:

某同學(xué)

單片機(jī)過(guò)程說(shuō)明正在看書(shū)

執(zhí)行主程序有人找出去

中斷信號(hào)

中斷請(qǐng)求暫??磿?shū)

暫停執(zhí)行主程序

中斷響應(yīng)書(shū)中作記號(hào)

當(dāng)前PC入棧

保護(hù)斷點(diǎn)出去做事

執(zhí)行中斷程序

中斷服務(wù)回來(lái)繼續(xù)看

返回主程序

中斷返回響應(yīng)過(guò)程:(假設(shè)已使某中斷請(qǐng)求標(biāo)志置1)(1)先使相應(yīng)優(yōu)先級(jí)狀態(tài)觸發(fā)器置1;(2)執(zhí)行一個(gè)硬件子程序的調(diào)用,1)硬件清零相應(yīng)中斷請(qǐng)求標(biāo)志(TI、RI除外)2)將當(dāng)前PC內(nèi)容壓入堆?!Wo(hù)斷點(diǎn);3)將中斷服務(wù)子程序入口地址送PC——轉(zhuǎn)移。

返回過(guò)程:(RETI執(zhí)行后)(1)使相應(yīng)優(yōu)先級(jí)狀態(tài)觸發(fā)器清0。(2)從堆棧中彈出棧頂?shù)膬蓚€(gè)字節(jié)內(nèi)容送PC——恢復(fù)斷點(diǎn)。(3)CPU接著中斷處繼續(xù)執(zhí)行原程序。

注意:1)保護(hù)斷點(diǎn)與保護(hù)現(xiàn)場(chǎng)以及恢復(fù)斷點(diǎn)與恢復(fù)現(xiàn)場(chǎng)的區(qū)別。2)外部中斷響應(yīng)時(shí)間在3~8個(gè)機(jī)器周期之間。

利用外部中斷實(shí)現(xiàn)單步操作:

8031+5v在主程序中:CLRIT0SETBEASETBPX0SETBEX0………在中斷服務(wù)子程序中:JNBP3.2,$JBP3.2,$RETI小結(jié):1、MCS-51單片機(jī)中斷系統(tǒng)有幾個(gè)中斷源?分別是什么?事先約定的優(yōu)先順序是怎樣的?2、如何進(jìn)行中斷允許控制?如何進(jìn)行中斷優(yōu)先級(jí)控制?3、中斷優(yōu)先的規(guī)則是什么?

§4-2定時(shí)/計(jì)數(shù)器一、定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)§4-2定時(shí)/計(jì)數(shù)器一、定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)需要說(shuō)明的是,用做“定時(shí)器”時(shí),每個(gè)機(jī)器周期計(jì)數(shù)加1,因此也可以把它看作是在累加機(jī)器周期。由于MCS—51單片機(jī)一個(gè)機(jī)器周期包含12個(gè)振蕩周期,所以,它的計(jì)數(shù)速率為振蕩周期的1/12?!?-2定時(shí)/計(jì)數(shù)器一、定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)§4-2定時(shí)/計(jì)數(shù)器一、定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)51子系列單片機(jī)內(nèi)有兩個(gè)十六位增一定時(shí)/計(jì)數(shù)器TH0計(jì)數(shù)值高八位TL0計(jì)數(shù)值低八位TH1計(jì)數(shù)值高八位TL1計(jì)數(shù)值低八位TMODTCON工作方式定時(shí)/計(jì)數(shù)控制控制控制1、工作方式控制寄存器

TMOD

TMODM0

M1C/GATE

M0

M1C/GATET1T0GATE——門(mén)控位。

GATE=0啟動(dòng)不受/INT0或/INT1的控制;

GATE=1啟動(dòng)受/INT0或/INT1的控制。

C/T——外部計(jì)數(shù)器/定時(shí)器方式選擇位

C//T=0定時(shí)方式;

C//T=1計(jì)數(shù)方式。

M1M0——

工作模式選擇位(編程可決定四種工作模式)。

2、定時(shí)/計(jì)數(shù)器控制寄存器TCONTCONTF1TR1TF0TR0IE1IT1IE0IT0

能否啟動(dòng)定時(shí)/計(jì)數(shù)器工作與GATE有關(guān),分兩種情況:

GATE=0時(shí),若TRi=1,開(kāi)啟Ti計(jì)數(shù)工作;(i=0或1)若TRi=0,停止Ti計(jì)數(shù)。

GATE=1時(shí),若TRi=1且/INTi=1時(shí)開(kāi)啟Ti計(jì)數(shù);若TRi

=1且/INTi=0時(shí)不能開(kāi)啟Ti計(jì)數(shù)。

若TRi=0,

停止Ti計(jì)數(shù)。

TR0——定時(shí)/計(jì)數(shù)器0運(yùn)行控制位。

軟件置位,軟件復(fù)位。

TR1——定時(shí)/計(jì)數(shù)器1運(yùn)行控制位。(用法與TR1類(lèi)似)

二、定時(shí)/計(jì)數(shù)器的四種工作模式

M1M0模式說(shuō)明00013位定時(shí)/計(jì)數(shù)器高八位TH(7~0)+低五位TL(4~0)01116位定時(shí)/計(jì)數(shù)器

TH(7~0)+TL(7~0)1028位計(jì)數(shù)初值自動(dòng)重裝

TL(7~0)TH(7~0)113T0運(yùn)行,而T1停止工作,8位定時(shí)/計(jì)數(shù)。

二、定時(shí)/計(jì)數(shù)器的四種工作模式對(duì)于TMOD寄存器而言,只能采用字節(jié)傳送指令來(lái)設(shè)置,而不能使用位手址方式來(lái)設(shè)置。如:MOVTMOD,#33H是正確的SETBM1是錯(cuò)誤的1、模式0計(jì)數(shù)寄存器TLi

低5位+THi8位(T1、T0的等效邏輯結(jié)構(gòu))TLi(5位)THi(8位)TFi中斷控制BAC/T=0振蕩器1/12&≥1TiTRiGATEINTiC/T=10~40~7C//T=0——定時(shí);C//T=1——對(duì)外計(jì)數(shù)。定時(shí):fosc/12=1/(12/fosc)=1/T波形等間隔,次數(shù)已定,時(shí)間確定即對(duì)機(jī)器周期進(jìn)行計(jì)數(shù)。左圖定時(shí)時(shí)間為N*TN個(gè)方波T計(jì)數(shù):脈沖不等間隔。

每個(gè)下降沿計(jì)數(shù)一次

確認(rèn)一次負(fù)跳變需兩個(gè)機(jī)器周期,

所以,計(jì)數(shù)頻率最高為fosc/24。

2、模式1與模式0相似。與模式0的區(qū)別:計(jì)數(shù)位數(shù)不同。計(jì)數(shù)寄存器:THi(高8位)+TLi(低8位)

TFi中斷TLi(8位)THi(8位)0~70~7控制BAC/T=0振蕩器1/12&≥1TiTRiGATEINTiC/T=13、模式2與模式0、1的區(qū)別:1)計(jì)數(shù)位數(shù)不同;2)初值自動(dòng)重裝。

TFi中斷TLi(8位)THi(8位)控制BAC/T=0振蕩器1/12&≥1TiTRiGATEINTiC/T=14、模式3T0定時(shí)/計(jì)數(shù),而T1停止計(jì)數(shù),但可作波特率發(fā)生器。T0分成兩獨(dú)立定時(shí)/計(jì)數(shù)器TL0和TH0。TL0使用C//T、GATE、TR0、/INT0、TF0定時(shí)/計(jì)數(shù),TH0使用TR1、TF1因此,只能用于定時(shí)

TF0中斷控制BAC/T=0振蕩器1/12&≥1TiTRiGATEINTiC/T=1TL0(8位)振蕩器1/12TH0TF1中斷(a)TL0作8位定時(shí)/計(jì)數(shù)器(b)TH0作8位定時(shí)器模式3時(shí),T1可定時(shí)為模式0、1、2的定時(shí)/計(jì)數(shù),但不可中斷,所以一般只作串口波特率發(fā)生器用。振蕩器1/12TL1(5位)TH1(8位)串行口C/T=0C/T=1T1(P3.5)振蕩器1/12TL1(8位)TH1(8位)串行口C/T=0C/T=1T1(P3.5)TLi(8位)THi(8位)振蕩器1/12C/T=0C/T=1T1(P3.5)串行口(a)T0模式3時(shí)T1模式0(b)T0模式3時(shí)T1模式1(c)T0模式3時(shí)T1模式2編程前確定參數(shù):(1)定時(shí)/計(jì)數(shù)器——T0、T1選擇其一,(2)工作方式——C//T及GATA,(3)計(jì)數(shù)初值——加1計(jì)數(shù)、16位。

計(jì)數(shù):X=M-N;M=213=8192(模式0)M=216=65536(模式1)M=28=256(模式2、模式3)定時(shí):X=M–N=M–t/T(t為所要求的定時(shí)時(shí)間,T為機(jī)器周期)

(4)工作模式——M1、M0

N0010

1046MX四、定時(shí)/計(jì)數(shù)器的應(yīng)用編制初始化程序:1)寫(xiě)TMOD;2)確定IE、IP;3)寫(xiě)計(jì)數(shù)初值;4)啟動(dòng)計(jì)數(shù)(TRi)

例1、設(shè)計(jì)一個(gè)能產(chǎn)生t=1ms的周期信號(hào)發(fā)生器,試編程。解:選T0;C//T=0,GATE=0

N=t/T=t/[12×(1/fosc)]=500

所以,X=M-500,

模式0、模式1均可,取模式0,M=213=8192X=8192-500=7692=1E0CH=0001111000001100B,

1E0CH01100TL011110000TH0F0H0CH先將低五位放入TL0中,再將剩余的數(shù)從右向左數(shù)出八位放入TH0中。

LJMPMAINORG000BHLJMPINSE1ORG1000HMAIN:

MOVSP,#60HMOVTL0,#0CHMOVTH0,#0F0HMOVTMOD,#00H

SETBTR0SETBET0SETBEASJMP$

………ORG0000H

INSE1:MOVTL0,#0CHMOVTH0,#0F0HCPLP10RETI小結(jié):1、MCS-51單片機(jī)內(nèi)有幾個(gè)定時(shí)計(jì)數(shù)器?如何計(jì)數(shù)?2、T0、T1有幾種工作方式?3、編程應(yīng)用前要事先確定的參數(shù)有幾個(gè)?

§4-3定時(shí)/計(jì)數(shù)器的應(yīng)用TF1TR1TF0TR0IE1IT1IE0IT0

M0

M1C/GATE

M0

M1C/GATETMODTCON例2、設(shè)fosc=6MHz,利用單片機(jī)內(nèi)定時(shí)/計(jì)數(shù)器及P10口線輸出1000個(gè)脈沖,脈沖周期為2mas,試編程。

8031P1.0T12ms

T=12×1/fosc=2us

選取T0定時(shí);T1計(jì)數(shù)。

設(shè)T0采用中斷方式產(chǎn)生周期為2ms方波,T1對(duì)該方波計(jì)數(shù),當(dāng)輸出至第1000個(gè)脈沖時(shí),使TF1置1。在主程序中用查詢方法,檢測(cè)到TF1變1時(shí),關(guān)掉T0,停止輸出方波。

T0、T1參數(shù)的確定:T0模式0、定時(shí):脈寬為脈沖周期的一半所以,X=213-1ms/2us=0001111000001100BTH0=0F0H;TL0=0CHT1模式1、計(jì)數(shù):N=1000

則X=65536-1000=64536=0FC18H

(若選模式0也可以,此時(shí)X=7192=1C18H)

程序:

ORG0000HLJMPMAINORG000BHLJMPTOSORG1000H

MAIN:MOVTMOD,#50H;T0定時(shí),模式0;T1計(jì)數(shù),模式1MOVTL0,#0CHMOVTH0,#0F0HMOVTL1,#18HMOVTH1,#0FCH

SETBTR1SETBTR0SETBET0SETBEAWAIT:

JNBTF1,WAIT;查詢1000個(gè)脈沖計(jì)夠沒(méi)有到?

CLREACLRET0ANLTCON,#0FH;停T0、T1SJMP$

TOS:MOVTL0,#0CHMOVTH0,#0F0HCPLP10RETIEND例3、脈沖參數(shù)測(cè)量——GATE功能的使用。脈沖高電平(計(jì)數(shù))長(zhǎng)度值存于21H、20H中,脈沖低電平長(zhǎng)度存于23H、22H中。電路連接如下圖所示。解:復(fù)習(xí)GATE的用法:

GATE=0時(shí),TRi=1,即可啟動(dòng)Ti定時(shí)/計(jì)數(shù)

GATE=1時(shí),TRi=1,且=1,才啟動(dòng)定時(shí)/計(jì)數(shù)。8031P3.2P3.11被測(cè)信號(hào)21a3T0計(jì)數(shù)T1計(jì)數(shù)

ORG0000HLJMPMAINORG2000HMAIN:MOVTMOD,#99H;T0、T1均工作在定時(shí),;模式1,GATE=1MOVA,#00H;T0、T1賦計(jì)數(shù)初值00H,

;定時(shí)最長(zhǎng)時(shí)間為0000~65536

MOVTL0,A

MOVTH0,AMOVTL1,AMOVTH1,A

TEST0:JBP32,TEST0;檢測(cè)是否到a點(diǎn)

SETBTR0;到a點(diǎn),TR0=1,做好取計(jì)時(shí)值準(zhǔn)備。TEST1:JNBP32,TEST1;檢測(cè)是否到1點(diǎn)

SETBTR1;到1點(diǎn)T0計(jì)時(shí);TR1=1,做好T1計(jì)時(shí)準(zhǔn)備。TEST2:JBP32,TEST2;檢測(cè)是否到2點(diǎn)

CLRTR0;到2點(diǎn),停止T0計(jì)時(shí),T1開(kāi)始計(jì)時(shí)。

MOV20H,TH0;保存T0計(jì)時(shí)結(jié)果

MOV21H,TL0TEST3:JBP33,TEST3;檢測(cè)是否到3點(diǎn)

CLRTR1;到3點(diǎn),停止T1計(jì)數(shù)

MOV22H,TH1;保存T1計(jì)數(shù)結(jié)果

MOV23H,TL1LCALLDISPSJMP$

小結(jié):1、定時(shí)/計(jì)數(shù)的四種方式是怎樣的?2、如何計(jì)算計(jì)數(shù)初值?如何編程送入計(jì)數(shù)初值?3、GATE的用法是怎樣的?

8051803180C318751805280328752(DIP封裝)15915204036312921VccP0.0/AD0P0.7/AD7EA/VPPALE/PROGPSENP2.0/A8P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P2.6/A14P2.7/A15P2.5/A13P2.4/A12P2.3/A11P2.2/A10P2.1/A9T2/P1.0T2EX

/P1.1P1.2P1.3P1.4P1.5P1.6P1.7RSTRXD

/P3.0TXD

/P3.1INT0/P3.2INT1/P3.3T0/P3.4T1/P3.5WR

/P3.6RD

/P3.7XTALXTAL1VSS

1.初始化的一般步驟:(1)確定定時(shí)價(jià)數(shù)器工作模式(計(jì)數(shù)或是定時(shí))、入TMOD寄存器。(2)設(shè)置定時(shí)/計(jì)數(shù)器的初值,可以直接將初值寫(xiě)入TH0、TL0或THl、TL1中。(3)根據(jù)功能要求設(shè)置是否使用中斷功能。如需開(kāi)放中斷,則對(duì)應(yīng)位賦值。(4)啟動(dòng)定時(shí)器,可使用SETBTRn指令,n=0或1。

在定時(shí)所數(shù)器運(yùn)行過(guò)程中,用戶經(jīng)常會(huì)需要了解當(dāng)前的計(jì)數(shù)值。所謂飛讀,是指在不影響定時(shí)/計(jì)數(shù)器正常工作的條件下,用軟件去讀取當(dāng)前的計(jì)數(shù)值。MCS—51單片祝的TL0、TH0以及TLl、TH1是允許在運(yùn)行中讀寫(xiě)的,只是操作要考慮周全。主要是要考慮正在讀取的時(shí)候發(fā)生低字節(jié)向高字節(jié)進(jìn)位的情況。這種情況的解決方案是,先讀取高字節(jié),再讀取低字節(jié),然后重讀高字節(jié)以驗(yàn)證其間高字節(jié)是否因進(jìn)位而不同,若因進(jìn)位而不同,則重新再讀一次。當(dāng)定階計(jì)數(shù)器工作在計(jì)數(shù)方式時(shí),計(jì)數(shù)肋沖來(lái)自對(duì)應(yīng)的外部輸入引腳T0和T1,在每個(gè)機(jī)器周期的采樣期間,計(jì)數(shù)器對(duì)外部輸入信號(hào)進(jìn)行采樣,當(dāng)一個(gè)機(jī)器周期的采樣值為高電平,而下一個(gè)周期的采樣值為低電平,即輸入信號(hào)出現(xiàn)1到0的負(fù)跳變時(shí),計(jì)數(shù)值增加1。由于計(jì)數(shù)器識(shí)別一個(gè)1到0的跳變需要2個(gè)機(jī)器周期,因此,計(jì)數(shù)器的最高計(jì)數(shù)頻率為系統(tǒng)振蕩周期的1/24。并且,為了確保一個(gè)電平在變化前至少被采樣一次,就必須要求這一電平至少保持一個(gè)機(jī)器周期時(shí)間。如果機(jī)器周期為T(mén)則對(duì)信號(hào)的要求為:§4-4MCS-51單片機(jī)串行接口一、串行通信概述1、什么叫串行通信?

在生活中同學(xué)們排橫隊(duì)行走——并行;排縱隊(duì)行走——串行。計(jì)算機(jī)中在傳輸信息、數(shù)據(jù)時(shí)也有并行、串行的問(wèn)題。0010001001P1.0P1.1P1.2P1.3RXDTXD單片機(jī)外設(shè)1外設(shè)21111110101000并行通信的特點(diǎn):短距離、高速度,傳輸線多。

串行通信的特點(diǎn):傳輸線少,方便、長(zhǎng)距離傳輸。接收設(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ù)起始位空閑位

異步通信的幀格式(由4部分組成):起始位、數(shù)據(jù)位、奇偶校驗(yàn)位、停止位。異步通信的特點(diǎn):(1)每幀傳送一個(gè)字符(字節(jié)),字符間不一定相連;(2)系統(tǒng)簡(jiǎn)單可靠、造價(jià)低,(3)傳輸速度較低。異步通信的幀格式(由4部分組成):起始位、數(shù)據(jù)位、奇偶校驗(yàn)位、停止位。異步通信的特點(diǎn):(1)每幀傳送一個(gè)字符(字節(jié)),字符間不一定相連;(2)系統(tǒng)簡(jiǎn)單可靠、造價(jià)低,(3)傳輸速度較低。二、同步通信

同步通信的含義:發(fā)送端和接收端使用同一個(gè)時(shí)鐘,同步發(fā)、收。同步通信的幀格式:由同步字符和多個(gè)(大量)連續(xù)的數(shù)據(jù)構(gòu)成。同步通信的特點(diǎn):傳輸速度高、系統(tǒng)復(fù)雜、造價(jià)高。異步——發(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波特。

三、波特率

是描述數(shù)據(jù)傳輸速率的物理量。定義為:每秒鐘傳送的二進(jìn)制代碼的位數(shù)。

單位:比特(b/s)9.1.4串行通信協(xié)議(異步協(xié)議)

協(xié)議:是對(duì)數(shù)據(jù)傳送方式的規(guī)定。

幀格式1、起始位2、數(shù)據(jù)位:5~8位3、奇偶校驗(yàn)位:1位4、停止位:1~2位5、波特率6、握手信號(hào)9.2串行口及應(yīng)用

8051有一可編程的全雙工串行通信接口,可用作異步串行通信,也可用作同步移位寄存器;可單機(jī)通信,也可多機(jī)通信;其幀格式有8位、10位、11位;可設(shè)置不同波特率。

9.2.18051串行口一、8051串行口結(jié)構(gòu)1、發(fā)送部分發(fā)送寄存器SBUF、發(fā)送移位寄存器(并串)2、接收部分接收移位寄存器(串并)、接收寄存器SBUF3、時(shí)鐘部分(產(chǎn)生波特率)

定時(shí)器T1、分頻器(2、16分頻)等

8051串行口結(jié)構(gòu)1、發(fā)送部分2、接收部分3、時(shí)鐘部分發(fā)送接收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)SMODPCON——電源管理寄存器SMOD位用于決定波特率的倍數(shù)。020=1倍121=2倍SCON——串行口控制寄存器SM0SM1SM2RENTB8RB8

TI

RITI/RI:中斷請(qǐng)求標(biāo)志位(前面已講過(guò))RB8:接收的第九位數(shù)TB8:發(fā)送的第九位數(shù)REN:允許接收控制位SM2:多機(jī)通信控制位(常與RB8配合,決定是否激活RI)SM0、SM1:工作方式選擇位(四種工作方式)三、串行通信工作方式

8051有4種工作方式,有3種幀格式,波特率可變。1、串行口方式0

方式0為同步移位寄存器輸入/輸出方式,常用于擴(kuò)展I/O口。

此時(shí),SM0=0、SM1=0

(1)方式0的特點(diǎn):1)一幀僅有8位數(shù)據(jù),無(wú)起始和結(jié)束位,低位在前。2)RXD引腳用于傳送數(shù)據(jù),TXD用于傳送時(shí)鐘。3)波特率固定,其值為?osc/12。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ò)展。2、串行口的工作方式(1)方式0:為同步移位寄存器輸入輸出方式,常用于擴(kuò)展IO端口。在方式0狀態(tài)下,其波特率是固定的,為fosc/12,數(shù)據(jù)出RXD(P3.0)輸入/輸出山,而TXD(P3.1線專(zhuān)用于輸出時(shí)鐘脈沖給外部寄存器,發(fā)送和接收都是8位數(shù)據(jù),低位在前。

發(fā)送過(guò)程:當(dāng)一個(gè)數(shù)據(jù)寫(xiě)入串行口發(fā)送緩沖器SBUF時(shí),串行口即8位數(shù)據(jù)以fosc/12的波特率從RXD(P3.0)引腳輸出(從低位到高位),發(fā)送完8位數(shù)據(jù)后,由硬件將中斷標(biāo)志位TI置“1”,請(qǐng)求中斷,在再次發(fā)送數(shù)據(jù)之前,必須用軟件將TI清零。2、串行口的工作方式(1)方式0:接收過(guò)程:接收是在RI=0的條件下,使REN=1來(lái)啟動(dòng)接收過(guò)程。接收數(shù)據(jù)由RXD輸入,TXD輸出同步移位脈沖,收到8位數(shù)據(jù)以后.內(nèi)硬件使RI=1,在中斷允許時(shí),可以發(fā)出串行口接收中斷申請(qǐng)。RI=1表示接收數(shù)據(jù)已裝入接收數(shù)據(jù)緩沖器中,可以由CPU讀入累加器A或其他的RAM單元。RI也必須由軟件請(qǐng)零,以準(zhǔn)備接收下一個(gè)數(shù)據(jù)。SCON控制字的SM2位(多機(jī)通訊控制位)必須為0。從而不影響TB8和RB8位,由于波特率固定,無(wú)須用定時(shí)器提供。當(dāng)以中斷方式傳送數(shù)據(jù)時(shí),CPu響應(yīng)中斷并不會(huì)清除RI、TI標(biāo)志。所以在中斷服務(wù)程序中必須由指令請(qǐng)零。

(2)方式0發(fā)送

用于擴(kuò)展并行輸出口,用74LS164芯片。啟動(dòng)輸出(發(fā)送)用“向SBUF寫(xiě)數(shù)據(jù)指令”。用RXD引腳傳送數(shù)據(jù),TXD引腳傳送時(shí)鐘。

74LS164可級(jí)連多片。

(3)方式0接收

用于擴(kuò)展并行輸入口,用74LS165芯片。啟動(dòng)輸入(接收):REN置1(且RI=0)。用RXD引腳傳送數(shù)據(jù),用TXD引腳傳送時(shí)鐘。

74LS165可級(jí)連多片。移位/置數(shù)時(shí)鐘禁止

162、串行口方式1

方式1是真正用于串行發(fā)送和接收,為10位通用異步接口。此時(shí),SM0=0、SM1=1

(1)特點(diǎn):1)一幀有10位,1位起始,8位數(shù)據(jù)位,1位停止位。接收時(shí)停止位進(jìn)入SCON的RB8。2)RXD引腳用于接收數(shù)據(jù),TXD引腳用于發(fā)送數(shù)據(jù)??梢酝瑫r(shí)進(jìn)行收、發(fā)。3)波特率可變,由T1的溢出率決定。(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。

(2)方式1發(fā)送啟動(dòng)發(fā)送:

用“向SBUF寫(xiě)數(shù)據(jù)指令”便啟動(dòng)了發(fā)送。數(shù)據(jù)從TXD引腳送出。數(shù)據(jù)發(fā)完后TI置1。發(fā)送時(shí)序如下圖所示。

(3)方式1接收1)接收條件:SCON中的REN置12)接收過(guò)程:

REN置1后,串行口對(duì)接收引腳RXD檢測(cè),當(dāng)RXD由高變低時(shí)開(kāi)始移位接收;接收完后將停止位裝入RB8中。3)接收的數(shù)據(jù)有效的條件:

a)RI=0;b)SM2=0,或者SM2=1并且RB8=1

滿足以上2條,則將8位數(shù)據(jù)裝入SBUF中,并且RI

置1。有以下情況之一則數(shù)據(jù)無(wú)效:

a)RI=1;b)SM2=1并且RB8=0注意:除了方式2、3的多機(jī)通信之外,SM2應(yīng)清0接收時(shí)序如下圖所示。(2)方式1:8位UART

波特率為(2SMOD×T1的溢出率)/32,可變。方式1為10位通用異步接口:一位起始位、8位數(shù)據(jù)位和一位停止位,此時(shí)SCON中的SMo、SMl兩位為01。串行口電路在發(fā)送時(shí)能自動(dòng)插入起始位和停止位,在接收數(shù)據(jù)時(shí),停止位進(jìn)入特殊功能寄存器SCON的某一位。方式1的傳送波特率是可變的。

方式1發(fā)送:數(shù)據(jù)從引腳加(P3.1)端輸出,當(dāng)執(zhí)行數(shù)據(jù)寫(xiě)入發(fā)送數(shù)據(jù)緩沖器SBuF命令時(shí),就啟動(dòng)了發(fā)送器開(kāi)始。發(fā)送時(shí)的定時(shí)信號(hào),也就是發(fā)送移位時(shí)鐘(Tx時(shí)鐘),它是由定時(shí)器T[送來(lái)的溢出信號(hào)經(jīng)過(guò)16分頻或32分頻(取決SMOD的值)而取得的。發(fā)送開(kāi)始的同時(shí),內(nèi)部控制信號(hào)有效,將起始位向TxD輸出,此后每過(guò)一個(gè)Tx時(shí)鐘周期就產(chǎn)生一個(gè)移位脈沖,并由TxD輸出一個(gè)數(shù)據(jù)位,當(dāng)8位數(shù)據(jù)位全部發(fā)完后,置位TI,并申請(qǐng)中斷。(2)方式1:8位UART方式1接收:數(shù)據(jù)從引腳RXD(P3.0)端輸入。接收是在SCON寄存器中REN位置“l(fā)”的前提下,并檢測(cè)到起始位(RxD上檢測(cè)“1-0”的跳變,即起始位)而開(kāi)始。

在第9位數(shù)據(jù)收齊之后(8位數(shù)據(jù),一位停止位),必須同時(shí)滿足兩個(gè)條件,這次接收才真正有效:RI=0和SM2=0或者接收到的停止位為1。如果不滿足這兩個(gè)條件,則這一次收到的數(shù)據(jù)就不裝入SBuF中,實(shí)際上就意味著丟失了一組數(shù)據(jù)。因?yàn)榇锌隈R上又開(kāi)始尋找下一個(gè)起始位準(zhǔn)備接收下一組數(shù)據(jù)了。3、串行口方式2和方式3

此時(shí),SM0=1、SM1=0、1

(1)特點(diǎn):1)一幀有11位。1位起始,8位數(shù)據(jù)位,1位校驗(yàn)/特征位(接收時(shí)該位進(jìn)入SCON的RB8),1位停止位。2)RXD引腳用于接收數(shù)據(jù),TXD引腳用于發(fā)送數(shù)據(jù)??梢酝瑫r(shí)進(jìn)行收、發(fā)。3)方式2波特率固定有兩種值;方式3波特率可變,由T1的溢出率決定。4)可以進(jìn)行多機(jī)通信。(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。

送RB8(2)方式2、3的發(fā)送與接收

與方式1類(lèi)似,從略。時(shí)序如下圖所示,僅多了1位。發(fā)送時(shí)序接收時(shí)序四、波特率設(shè)計(jì)

波特率是串行通信協(xié)議中的一個(gè)重要內(nèi)容。在8051單片機(jī)串行通信的4種工作方式中,方式0和方式2的波特率固定,方式1和方式3的波特率可變,由T1的溢出率確定。1、方式0的波特率

波特率產(chǎn)生原理如下圖所示。波特率值=

?osc/12書(shū)中用≌,示數(shù)據(jù)關(guān)系2、方式2的波特率波特率產(chǎn)生原理如下圖所示。

波特率值=(2SMOD/64)×?osc

SMOD是PCON中的最高位,稱(chēng)為波特率加倍位,為1時(shí)加倍。3、方式1和方式3的波特率波特率產(chǎn)生原理如下圖所示。方式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)

波特率值=(2SMOD/32)×(T1溢出率)T1溢出率=1/定時(shí)時(shí)間t∵t=(2N-初值X)*機(jī)器周期Tcy

=(2N-初值X)×12/?osc∴波特率值=(2SMOD/32)×?osc/(12×(2N-X))

=?osc×(SMOD+1)/(384×(2N-X))∴初值X=

2N-?osc×(SMOD+1)/(384×波特率值)

13T1以模式0工作8192N=16T1以模式1工作對(duì)應(yīng)2N=65536

8T1以模式2工作256注意:T1以模式0、1工作時(shí),(1)需要編寫(xiě)中斷處理程序,在程序中需重新賦初值;(2)且有時(shí)間誤差,可調(diào)整初值補(bǔ)償。T1以模式2工作無(wú)這些問(wèn)題。例、若fosc=6MHz,波特率為2400波特,設(shè)SMOD=1,則定時(shí)/計(jì)數(shù)器T1的計(jì)數(shù)初值為多少?并進(jìn)行初始化編程。

解:X=256-2SMOD×fosc/(2400×32×12)=242.98≈243=F3H

fosc=11.0592MHz,波特率為2400,設(shè)SMOD=0,則X=F4H。初始化編程:MOVTMOD,#20HMOVPCON,#80HMOVTH1,#0F3HMOVTL1,#0F3HSETBTR1

MOVSCON,#50H

常用的波特率與T1的初值、SMOD、振蕩頻率等參數(shù)的對(duì)應(yīng)關(guān)系如表9-2所示。

例9-18051單片機(jī)的時(shí)鐘振蕩頻率為11.0592MHz,選用定時(shí)器T1工作于模式2作為波特率發(fā)生器,波特率為2400b/s。求T1的初值X,并編寫(xiě)初始化程序段。解:設(shè)波特率加倍位SMOD=0

X=256-11.0592×106×(0+1)/(384×2400)=244=F4H

初始化程序段::MOVTMOD,#20HMOVTH1,#0F4HMOVTL1,#0F4HSETBTR1

:二、串行口方式1的發(fā)送和接收例9-5用8051的串行口以方式1發(fā)送ASCII數(shù)據(jù)塊,要求波特率為1200b/s,進(jìn)行校驗(yàn)。試編寫(xiě)采用查詢方式發(fā)送的程序。設(shè)數(shù)據(jù)在片內(nèi)RAM的20H~3FH單元,?osc=11.0592MHz。解:(1)最高位作校驗(yàn)位,采用奇校驗(yàn),P最高位

(2)用定時(shí)器/計(jì)數(shù)器1以模式2定時(shí),作為波特率發(fā)生器;計(jì)算初值,由初值X=

2N-?osc×(SMOD+1)/(384×波特率值)這里N=8,?osc=11.0592MHz

波特率為1200b/s,取SMOD=0PCON=00H得初值X=232D=0E8H。(3)TMOD=00100000B=20H

(4)SCON=01000000B=40H(5)程序清單:主程序

MOVTMOD,#20HMOV TL1,#0E8HMOVTH1,#0E8HSETBTR1MOVSCON,#40HMOVR0,#20HMOVR7,#32MOVA,@R0LCALLSP-OUTJNBP,ERRORINCR0DJNZR7,LP:串行口發(fā)送子程序

MOVC,PCPLCMOVACC.7,CMOVSBUF,AJNBTI,$CLRTIRETERROR:(略)SP-OUT:

P為0說(shuō)明發(fā)送出的數(shù)據(jù)中有偶數(shù)個(gè)1,是錯(cuò)誤的。LP:

例9-6用8051的串行口以方式1接收帶奇偶校驗(yàn)位的數(shù)據(jù)塊(與上題配合)。試編寫(xiě)采用查詢方式的程序,接收的數(shù)據(jù)放在片內(nèi)RAM的20H~3FH單元。?osc=11.0592MHz。解:(1)最高位為校驗(yàn)位(采用奇校驗(yàn)),應(yīng)去掉

(2)用定時(shí)器/計(jì)數(shù)器1以模式2定時(shí),作為波特率發(fā)生器;計(jì)算初值,由初值X=

2N-?osc×(SMOD+1)/(384×波特率值)這里N=8,?osc=11.0592MHz

波特率為1200b/s,取SMOD=0PCON=00H得初值X=232D=0E8H。

(3)TMOD=00100000B=20H

(4)SCON=01010000B=50H(5)程序清單:主程序MOVSCON,#50HMOVPCON,#0MOVTMOD,#20HMOVTL1,#0E8HMOVTH1,#0E8HSETBTR1MOVR0,#20HMOVR7,#32LCALLSP-INJC

ERRORMOV

@R0,AINCR0DJNZR7,LP:串行口接收子程序

JNBRI,$CLRRIMOVSBUF,AMOVC,PCPLCANLA,#7FHRETERROR:(略)SP-IN:LP:

C為1說(shuō)明接收的數(shù)據(jù)有偶數(shù)個(gè)1,是錯(cuò)誤的(因采用奇校驗(yàn))。小結(jié):1、什么叫串行通信?2、UART叫什么?(通用異步接收/發(fā)送器)3、單工、半雙工、全雙工?4、串口工作用到哪些寄存器?(PCON、SCON、SBUF)5、串口有幾種工作方式?6、波特率如何設(shè)置?(T1的計(jì)數(shù)初值如何確定)

中斷源與中斷標(biāo)志位分類(lèi)中斷源SFR中的中斷申請(qǐng)標(biāo)志位中斷原因中斷入口外部中斷源外部中斷0IE0(TCON.1)P3.2/腳上的信號(hào)可以引起中斷申請(qǐng)0003H外部中斷1IE1(TCON.3)P3.3/腳上的信號(hào)可以引起中斷申請(qǐng)0013H內(nèi)部中斷源T0:定時(shí)器/計(jì)數(shù)器0中斷IF0(TCON.5)T0計(jì)數(shù)溢出后引起中斷申請(qǐng)000BHT0:定時(shí)器/計(jì)數(shù)器1中斷IE0(TCON.7)T1計(jì)數(shù)溢出后引起中斷申請(qǐng)001BH串行口中斷RI(SCON.0)串行口接收完一幀數(shù)據(jù)后引起中斷申請(qǐng)0023HTI(SCON.1)串行口發(fā)送完一幀數(shù)據(jù)后引起中斷申請(qǐng)INT1INT0INT0INT1外部中斷TF1TR1TF0TR0IE1IT1IE0IT0TCON.7.6.5.4.3.2.1TCON.0TCON:用于T0和T1

用于外部中斷IT0(TCON.0)——外部中斷0觸發(fā)方式控制位IE0(TCON.1)——外部中斷0中斷申請(qǐng)標(biāo)志位IT1(TCON.1)——觸發(fā)方式控制位,功能同IT0IE1(TCON.1)——中斷申請(qǐng)標(biāo)志位,功能同IE0INT1INT1中斷允許寄存器IEEAESET1EX1ET0EX0IE.7.6.5.4.3.2.1IE.0IE:總中斷允許EX0(IE.0)——外部中斷允許位ET0(IE.1)——

T0中斷允許位EX1(IE.2)——中斷允許位ET1(IE.3)—— T1中斷允許位ES(IE.4)—— 串行口中斷允許位EA(IE.7)—— 總中斷允許位INT0INT1中斷優(yōu)先級(jí)寄存器IP——————PSPT1PX1PT0PX0 IE.4.3.2.1IP.0IE:保留位INT0優(yōu)先級(jí)T0INT1T1串行口優(yōu)先級(jí)中斷入口中斷源中斷入口地址0003HT0000BH0013HT1001BH串行口0023HINT0INT1堆棧應(yīng)用用堆棧保護(hù)斷點(diǎn)的方法堆棧區(qū)與SP應(yīng)注意的五點(diǎn):

1)從棧底到棧頂 2)數(shù)據(jù)先進(jìn)后出 3)PUSH與POP成對(duì)使用 4)堆棧區(qū)字節(jié)再做數(shù)據(jù)緩沖區(qū)使用 5)必須對(duì)SP置初值中斷響應(yīng)全過(guò)程中斷申請(qǐng)的準(zhǔn)備中斷申請(qǐng)的提出響應(yīng)中斷申請(qǐng)的條件CPU響應(yīng)一個(gè)中斷之后的操作中斷嵌套在中斷服務(wù)子程序執(zhí)行完的操作中斷實(shí)例——管腳輸入單脈沖的實(shí)驗(yàn)圖中的按鍵S每被壓下一次,則單片機(jī)P1口上點(diǎn)亮的一個(gè)發(fā)光二極管VL將向下循環(huán)移一位。1111R1R0R6R7VL1VL0VL6VL7…P1.0P1.1P1.6P1.7……INT1+5VR9S8031STR_ADD EQU 0000HBRK_ADD EQU 0013H

;中斷服務(wù)子程序入口 ORG STR_ADD AJMP MAIN ORG BRK_ADD AJMP BREAK ORG STR_ADD+#30H ;MAIN=4030HMAIN: MOV A,#01H SETB IT1 ;設(shè)置成沿觸發(fā)方式 MOV IE,#10000100B ;開(kāi)中斷 MOV P1,#0 ;關(guān)燈ROTATE: NOP SJMP ROTATE ORG STR_ADD+#60H ;BREAK=4060HBREAK: MOV P1,A ;點(diǎn)亮一個(gè)燈 RL A ;循環(huán)左移一位 CLR IE1 ;清中斷申請(qǐng)標(biāo)志 RETI ;中斷返回 END第二節(jié)

定時(shí)器/計(jì)數(shù)器及其應(yīng)用與定時(shí)器/計(jì)數(shù)器有關(guān)的特殊功能寄存器計(jì)數(shù)器定時(shí)器/計(jì)數(shù)器方式寄存器TMODGATEC/TM1M0GATEC/TM1M0TMOD.7.6.5.4.3.2.1TMOD.0TMOD: T1方式字段 T0方式字段GATE(位TMOD.3)——門(mén)控位。與TCON.4都為高電平 時(shí)才能啟動(dòng)T0C/T(位TMOD.2)——定時(shí)或計(jì)數(shù)功能選擇位。M1和M0(TMOD.1和TMOD.0)——工作方式選擇位。TF1TR1TF0TR0IE1IT1IE0IT0TCON.7.6.5.4.3.2.1TCON.0TCON:定時(shí)器控制 外部中斷控制定時(shí)器/計(jì)數(shù)器控制寄存器TCONTR0(

TCON.0)——T0的運(yùn)行控制位。TF0(

TCON.0)——T0溢出兼中斷申請(qǐng)標(biāo)志位。TR1——

T1的運(yùn)行控制位。TF1——

T1溢出兼中斷申請(qǐng)標(biāo)志位。

注:TMOD和TCON的復(fù)位值都是00H定時(shí)器/計(jì)數(shù)器的四種工作方式(一)方式0——13位定時(shí)器/計(jì)數(shù)器1。晶振電路機(jī)器周期C/T=0C/T=1TL0(5位)TH0(8位)TF0T0溢出標(biāo)志位門(mén)控開(kāi)關(guān)中斷允許GATE位門(mén)控信號(hào)≥1&TR0位門(mén)控信號(hào)門(mén)控電平S6S5外部計(jì)數(shù)脈沖P3.4/

T0P3.2/INT0門(mén)控腳定時(shí)器/計(jì)數(shù)器的四種工作方式(二)方式1——16位定時(shí)器/計(jì)數(shù)器方式2——可自動(dòng)重裝初值的 8位定時(shí)器/計(jì)數(shù)器方式3——兩個(gè)8位定時(shí)器/計(jì)數(shù)器定時(shí)器/計(jì)數(shù)器應(yīng)用實(shí)例·方式0應(yīng)用

例1

已知單片機(jī)晶振頻率為6MHz,要求使用T0定時(shí)器1ms,使單片機(jī)P1.0腳上連續(xù)輸出周期為2ms的方波。 解: 1、計(jì)算并確定T0的初值; 2、寫(xiě)程序(如下)

ORG 0000H ;復(fù)位入口RESET: AJMP START ORG 000BH ;T0中斷入口 AJMP T0INT ORG 0030HSTART: MOV SP,#60H ;初始化程序 MOV TH0,#0F0H ;T0賦初值 MOV TL0,#0CH SETB TR0 ;啟動(dòng)T0 SETB ET0 ;開(kāi)中斷 SETB EA ;開(kāi)總中斷MAIN: AJMP MAIN ;主程序T0INT: CPL P1.0 ;P1.0腳取反 MOV TL0,#0CH ;重裝初值 MOV TH0,#0F0H RETI精度不高,原因: 1,中斷服務(wù)子程序執(zhí)行時(shí)間未計(jì)入T0定時(shí) 2,從中斷申請(qǐng)到CPU響應(yīng)該中斷所經(jīng)歷的 時(shí)間未計(jì)入T0定時(shí)將中斷服務(wù)子程序改為:T0INT: CLR EA ;關(guān)總中斷 CLR TR1 ;停止T0計(jì)數(shù) MOV A,#0F0H ;取高8位計(jì)算的初值 ADD A,TH0 ;加修正值 MOV TH0,A ;修正后送TH0 MOV A,#0CH ;取低5位計(jì)算的初值 ADD A,#0EH ;加14個(gè)機(jī)器周期 JNB ACC.5,MMM ;加修正值 JNC TH0 ;判低5位有進(jìn)位否 ANL A,#0001111BMMM: MOV TL0,A ;修正后閉塞TL0 CPL P1.0 SETB TR1 ;啟動(dòng)T0 SETB EA RETI補(bǔ)償方法,原理: 1,在中斷服務(wù)子程序執(zhí)行過(guò)程中關(guān)掉總中斷 防止其它中斷嵌套影響定時(shí)精度 2,用CLRTR0指令停止T0計(jì)數(shù)定時(shí)器/計(jì)數(shù)器應(yīng)用實(shí)例·方式1應(yīng)用

例2

試用單片機(jī)定時(shí)器/計(jì)數(shù)器T1的方式1完成對(duì)某生產(chǎn)線的傳送帶上不斷傳送的產(chǎn)品進(jìn)行計(jì)數(shù).+6V11+5V7V燈控S4010640106R3R2R1R5R4VTHL1紅傳送帶光電開(kāi)關(guān)HL2C5C48031P3.3/INT0P3.5/T1其它電路

ORG 0000H ;復(fù)位入口 AJMP START ;T1中斷入口 ORG 001BH AJMP 0500H ORG 0100HSTART: MOV SP,#65H ;初始化程序 MOV TCON,#00H ;可省略 MOV TMOD,#0D0H MOV TH0,#00H ;可省略 MOV TL0,#00H ;可省略 MOV R0,#00H ;清中斷次數(shù)計(jì)數(shù)單元 MOV P3,#28H ;設(shè)置P3.5第二功能 SETB TR1 ;啟動(dòng)T1 SETB ET1 ;開(kāi)T1中斷 SETB EA ;開(kāi)總中斷MAIN ACALL XSZ ;主程序,調(diào)顯示子程序 ……………… ORG 0500HT1INT: INC R0 ;中斷服務(wù)子程序 RETI ORG 0600HXSZ: ……………… ;顯示子程序,略 RET方式2應(yīng)用例3 設(shè)單片機(jī)8031使用的晶振頻率為6MHz,編程使P1.7腳輸出1kHz連續(xù)方波。

ORG 0

AJMP 0050H

ORG 000BH

AJMP 0250H

ORG 0050H

START: MOV SP,#60H

MOV TMOD,#2

MOV TH0,#6

MOV TL0,#6

MOV IP,#2

SETB TR0

MOV IE,#82H

MAIN: AJMP MAIN

ORG 0250H

T0INT: CPL P1.7

RETI例4 8031型單片機(jī)晶振為6MHz,設(shè)定8031和T1做為串行口波特率發(fā)生器,此時(shí)T1沒(méi)有申請(qǐng)中斷的功能。要求使用T0完成對(duì)某高頻發(fā)射機(jī)同步頭信號(hào)的寬度進(jìn)行監(jiān)測(cè)。

ORG 0

AJMP 0030H

ORG 001BH

AJMP 0700H

ORG 0030H

START: MOV SP,#60H

MOV IP,#8

MOV TMOD,#00101001B

MOV TL0,#0

MOV TH0,#

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論