單片機(jī)第4章 定時(shí)與中斷_第1頁(yè)
單片機(jī)第4章 定時(shí)與中斷_第2頁(yè)
單片機(jī)第4章 定時(shí)與中斷_第3頁(yè)
單片機(jī)第4章 定時(shí)與中斷_第4頁(yè)
單片機(jī)第4章 定時(shí)與中斷_第5頁(yè)
已閱讀5頁(yè),還剩67頁(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)介

SingleChipMicrocomputer第四章80C51

的定時(shí)與中斷系統(tǒng)定時(shí)器的組成、工作原理及控制單片機(jī)的中斷系統(tǒng)定時(shí)器的工作方式及應(yīng)用本章內(nèi)容CPUTCON(88H)TH1TL1TH0TL0INT1(P3.3)INT0(P3.2)中斷T1(P3.5)定時(shí)器1定時(shí)器0溢出啟動(dòng)(8DH)(8BH)(8CH)(8AH)啟動(dòng)內(nèi)部總線溢出工作方式工作方式T0(P3.4)TMOD(89H)1、單片機(jī)定時(shí)器/計(jì)數(shù)器組成一、80C51單片機(jī)的定時(shí)器/計(jì)數(shù)器定時(shí)器1(16位)定時(shí)器0(16位)控制寄存器方式寄存器定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)組成:80C51定時(shí)/計(jì)數(shù)器由定時(shí)器0、定時(shí)器1、定時(shí)器方式寄存器TMOD和定時(shí)器控制寄存器TCON四部分組成定時(shí)器0(T0)和定時(shí)器1(T1):(1)80C51單片機(jī)內(nèi)部有兩個(gè)16位的可編程定時(shí)/計(jì)數(shù)器,稱為定時(shí)器0(簡(jiǎn)稱T0)和定時(shí)器1(簡(jiǎn)稱T1),可編程選擇其作為定時(shí)器用或作為計(jì)數(shù)器用。(2)16位的定時(shí)/計(jì)數(shù)器分別由兩個(gè)8位寄存器組成,即:T0由TH0和TL0構(gòu)成,T1由TH1和TL1構(gòu)成,TL0、TL1、TH0、TH1的訪問(wèn)地址依次為8AH

8DH。每個(gè)寄存器均可單獨(dú)訪問(wèn),這些寄存器是用于存放定時(shí)初值或計(jì)數(shù)初值的。

定時(shí)器0或定時(shí)器1用作計(jì)數(shù)器時(shí),對(duì)芯片引腳T0(P3.4)或T1(P3.5)上輸入的脈沖計(jì)數(shù),每輸入一個(gè)脈沖,加法計(jì)數(shù)器加1;作定時(shí)功能時(shí)。定時(shí)器/計(jì)數(shù)器的定時(shí)功能也是通過(guò)計(jì)數(shù)實(shí)現(xiàn)的,它的計(jì)數(shù)脈沖是由單片機(jī)的片內(nèi)振蕩器輸出經(jīng)12分頻后產(chǎn)生的信號(hào),即為對(duì)機(jī)器周期計(jì)數(shù)。

T機(jī)器=12T時(shí)鐘=121/fosc2、定時(shí)器/計(jì)數(shù)器的功能

門控位。當(dāng)GATE=0時(shí),軟件控制位TR0或TR1置1即可啟動(dòng)定時(shí)器;當(dāng)GATE=1時(shí),軟件控制位TR0或TR1須置1,同時(shí)還須(P3.2)或(P3.3)為高電平方可啟動(dòng)定時(shí)器,常用于測(cè)量信號(hào)的脈寬。3、定時(shí)器/計(jì)數(shù)器工作方式控制寄存器(TMOD)M0

M1M0M1D0D1D2

D3D4D5D6

D7定時(shí)器T1定時(shí)器T0注:TMOD不能位尋址,只能用字節(jié)指令(MOVTMOD,#DATA)設(shè)置,其中高4位定義定時(shí)器1、低4位定義定時(shí)器0的工作方式。

功能選擇位,當(dāng)設(shè)置為定時(shí)器工作方式該位為“0”;當(dāng)設(shè)置為計(jì)數(shù)器工作方式該位為“1”。M1M0工作方式功能說(shuō)明

00方式013位計(jì)數(shù)器

01方式116位計(jì)數(shù)器

10方式2自動(dòng)重裝8位計(jì)數(shù)器

11方式3定時(shí)器0:分成兩個(gè)8位計(jì)數(shù)器定時(shí)器1:停止計(jì)數(shù)4、定時(shí)器/計(jì)數(shù)器控制寄存器(TCON)TF1/TF0:T1/T0的溢出中斷標(biāo)志。T1/T0被啟動(dòng)計(jì)數(shù)后,從初值做加1計(jì)數(shù),計(jì)滿溢出后由硬件置位TF1/TF0。在中斷允許時(shí)向CPU發(fā)出中斷請(qǐng)求,當(dāng)進(jìn)入中斷服務(wù)程序后,由硬件復(fù)位。TR1/TR0:T1/T0的運(yùn)行控制位。由軟件置1或清0來(lái)啟動(dòng)或關(guān)閉定時(shí)器1。IT0IE0IT1IE1TR0TF0TR1TF1D0D1D2D3D4D5D6D7定時(shí)器控制位

中斷控制

1).定時(shí)/計(jì)數(shù)器的初始化步驟

由于定時(shí)/計(jì)數(shù)器的功能是由軟件編程確定的,所以,一般在使用定時(shí)器/計(jì)數(shù)前都要對(duì)其進(jìn)行初始化。初始化驟如下:

(1)確定定時(shí)/計(jì)數(shù)器的工作方式,確定方式控制字,并寫(xiě)入TMOD。

(2)預(yù)置定時(shí)初值或計(jì)數(shù)初值,根據(jù)定時(shí)時(shí)間或計(jì)數(shù)次數(shù),計(jì)算定時(shí)初值或計(jì)數(shù)初值,并寫(xiě)入TH0、TL0或TH1、TL1。

(3)根據(jù)需要開(kāi)啟定時(shí)/計(jì)數(shù)器的中斷,直接對(duì)IE寄存器中的相應(yīng)位(EA、EX0、EX1、ET0、ET1)賦值。

(4)啟動(dòng)定時(shí)/計(jì)數(shù)器工作,將TCON中的TR1或TR0置1。5、定時(shí)器/計(jì)數(shù)器的初始化2).定時(shí)或計(jì)數(shù)初值的計(jì)算定時(shí)/計(jì)數(shù)器的初值因工作方式的不同而不同,其定時(shí)或計(jì)數(shù)初值的計(jì)算見(jiàn)表4-2。注:對(duì)表4-2作如下說(shuō)明:●表中T表示定時(shí)時(shí)間,T機(jī)表示機(jī)器周期(T機(jī)=12×1/fosc);●計(jì)數(shù)初值公式中的計(jì)數(shù)值為脈沖個(gè)數(shù);●在方式3中只討論T0。T0被分為兩個(gè)獨(dú)立的8位計(jì)數(shù)器TL0和TH0。而TL0可定時(shí)亦可計(jì)數(shù);而TH0只能用作簡(jiǎn)單的內(nèi)部定時(shí),不能用作對(duì)外部脈沖進(jìn)行計(jì)數(shù)。

【例4-1】:定時(shí)器1(T1)采用方式1來(lái)定時(shí),要求每50ms溢出一次,如采用12MHz晶振,則計(jì)數(shù)周期T機(jī)=1

s,求定時(shí)初值X。解:根據(jù)定時(shí)初值X的計(jì)算公式可得:

【例4-2】:要求定時(shí)器1(T1)采用方式0、方式1和方式2來(lái)計(jì)100個(gè)脈沖的計(jì)數(shù)初值X。解:根據(jù)計(jì)數(shù)初值X的計(jì)算公式可得:方式0:X=213-計(jì)數(shù)值=8192-100=8092=1F9CH方式1:X=216-計(jì)數(shù)值

=65536-100=65436=FF9CH方式2:X=28-計(jì)數(shù)值=256-100=156=9CH3).定時(shí)或計(jì)數(shù)初值的裝入現(xiàn)以【例4-2】的計(jì)數(shù)初值X為例,來(lái)介紹定時(shí)/計(jì)數(shù)器在不同工作方式下初值的裝入方法。①方式0是13位定時(shí)/計(jì)數(shù)器,若采用定時(shí)/計(jì)數(shù)器T1,則計(jì)數(shù)初值X的高八位裝入TH1,而低五位裝入TL1的低五位(TL1的高三位無(wú)效,可填補(bǔ)0)。所以要裝入1F9CH初值,應(yīng)按照如下方法進(jìn)行。

1F9CH=0001

111110011100B把13位中的高八位11111100B裝入TH1,而把13位中的低五位xxx11100B裝入TL1(xxx用“0”填入)。用指令來(lái)裝入計(jì)數(shù)初值為:

MOVTH1,#0FCH;#FCH→TH1MOVTL1,#1CH;#1CH→TL1②方式1是16位定時(shí)/計(jì)數(shù)器,若采用定時(shí)/計(jì)數(shù)器T1,則計(jì)數(shù)初值X的高八位裝入TH1,而低八位裝入TL1,用指令來(lái)裝入計(jì)數(shù)初值為:

MOVTH1,#0FFH;#0FFH→TH1MOVTL1,#9CH;#9CH→TL1③方式2是自動(dòng)重裝入初值8位定時(shí)/計(jì)數(shù)器,只要裝入一次,以后就自動(dòng)裝入初值。若采用定時(shí)/計(jì)數(shù)器T1,則計(jì)數(shù)初值X既要裝入TH1,也要裝入TL1,用指令來(lái)裝入計(jì)數(shù)初值為:

MOVTH1,#9CH;#9CH→TH1MOVTL1,#9CH;#9CH→TL1工作方式0(M1M0=00)特點(diǎn):13位的計(jì)數(shù)器結(jié)構(gòu)(由TH和TL的低五位構(gòu)成)計(jì)數(shù)范圍:1~213定時(shí)時(shí)間:(8192-初值)*T機(jī)器周期6、定時(shí)器/計(jì)數(shù)器的工作方式工作方式0的邏輯結(jié)構(gòu)圖及工作過(guò)程01啟動(dòng)(1)開(kāi)始計(jì)數(shù)寫(xiě)入初始值:MOVTH0,#DATA1MOVTL0,#DATA2N次計(jì)數(shù)1例1工作方式1(M1M0=01)特點(diǎn):16位的計(jì)數(shù)器結(jié)構(gòu)(由TH和TL的全部構(gòu)成)計(jì)數(shù)范圍:1~216定時(shí)時(shí)間:(65536-初值)*T機(jī)器周期工作方式1的邏輯結(jié)構(gòu)圖及工作過(guò)程01啟動(dòng)(1)開(kāi)始計(jì)數(shù)寫(xiě)入初始值:MOVTH0,#DATA1MOVTL0,#DATA2N次計(jì)數(shù)1例2工作方式2(M1M0=10)特點(diǎn):為8位的計(jì)數(shù)器結(jié)構(gòu)(由TL的全部構(gòu)成,TH作為預(yù)置寄存器)計(jì)數(shù)范圍:1~28定時(shí)時(shí)間:(256-初值)*T機(jī)器周期在計(jì)數(shù)溢出后不需要由軟件向計(jì)數(shù)器賦初始值,而改由TH完成。工作方式2的邏輯結(jié)構(gòu)圖例3工作方式3(M1M0=11)特點(diǎn):定時(shí)器T0被分解為兩個(gè)獨(dú)立的8位計(jì)數(shù)器(TL0和TH0).TL0占用原T0的控制位、引腳和中斷,TH0占用T1的控制位和中斷。計(jì)數(shù)范圍:1~28定時(shí)時(shí)間:(256-初值)*T機(jī)器周期工作方式3的邏輯結(jié)構(gòu)圖例1:用定時(shí)器1、方式0實(shí)現(xiàn)1s定時(shí)。

(fosc=12MHz)分析:定時(shí)器1、方式0,則TMOD=0000××××B

由于T機(jī)器=12T時(shí)鐘=121/fosc=1us,而方式0的最大定時(shí)時(shí)間為8.192ms,所以可選擇:5ms再循環(huán)200次。由于計(jì)數(shù)值=5ms/1us=5000,所以初始值=213-計(jì)數(shù)值=3192=0110001111000B∴TH1=TL1=

0110001111000×××B=63HB=18H參考程序:DELAY_t1_0:MOVR3,#200;5ms循環(huán)次數(shù)

MOVTMOD,#00H;設(shè)置定時(shí)器1方式0MOVTH1,#63H;置初始值

MOVTL1,#18HSETBTR1;啟動(dòng)T1LP1:JBCTF1,LP2;5ms到轉(zhuǎn)LP2SJMPLP1;沒(méi)有到循環(huán)

LP2:MOVTH1,#63H;重置初始值

MOVTL1,#18HDJNZR3,LP1;1s到?

RET例2:用定時(shí)器0、方式1實(shí)現(xiàn)1s定時(shí)。

(fosc=12MHz)分析:定時(shí)器0、方式1,則TMOD=××××0001B

由于T機(jī)器=12T時(shí)鐘=121/fosc=1us,而方式1的最大定時(shí)時(shí)間為65.536ms,所以可選擇:50ms再循環(huán)20次。由于計(jì)數(shù)值=50ms/1us=50000,所以初始值=216-計(jì)數(shù)值=15536=3CB0H∴TH0=3CH;

TL0=0B0H。參考程序:DELAY_t0_1:MOVR3,#20;50ms循環(huán)次數(shù)

MOVTMOD,#01H;設(shè)置定時(shí)器0方式1MOVTH0,#3CH;置初始值

MOVTL0,#0B0HSETBTR0;啟動(dòng)T0LP3:JBCTF0,LP4;50ms到?到轉(zhuǎn)LP4SJMPLP3;沒(méi)有到循環(huán)

LP4:MOVTH0,#3CH;重置初始值

MOVTL0,#0B0HDJNZR3,LP3;1s到?

RET例3:用定時(shí)器1、方式2實(shí)現(xiàn)1s定時(shí)。

(fosc=12MHz)分析:定時(shí)器1、方式2,則TMOD=0010××××B

由于T機(jī)器=12T時(shí)鐘=121/fosc=1us,而方式2的最大定時(shí)時(shí)間為0.256ms,所以可選擇:0.25ms(250us)再循環(huán)100*40次。由于計(jì)數(shù)值=0.25ms/1us=250,所以初始值=28-計(jì)數(shù)值=6∴TH1=TL1=06H。

參考程序:DELAY_t1_2:MOVR4,#40;25ms循環(huán)次數(shù)

MOVR5,#100;250us循環(huán)次數(shù)

MOVTMOD,#20H;設(shè)置定時(shí)器1方式2MOVTH1,#06H;置初始值

MOVTL1,#06HSETBTR1;啟動(dòng)T1LP5:JBCTF1,LP6;250us到?

SJMPLP5LP6:DJNZR5,LP5;25ms到?

MOVR5,#100DJNZR4,LP5;1s到?

RET例4:用T0方式2定時(shí),并由P1.0輸出周期為2s的方波.(設(shè)fosc=6Mhz)分析:要由P1.0輸出2s方波,可由T0每定時(shí)1s,使P1.0反相一次.初始化設(shè)置:TMOD:00000010B初始值:∵fosc=6Mhz∴T=2us

方式2的最大定時(shí)為:512us取用500us,再循環(huán)2000次即可.

(100*20)

∴初始值=28-500/2=6參考程序1:

org0start:movr1,#20

movr2,#100

mov

tmod,#02h

movth0,#06h

movtl0.#06h

setbtr0lp1:jbctf0,lp2

sjmplp1

lp2:djnzr2,lp1

movr2,#100

djnzr1,#lp1

movr1,#20

cplP1.0

sjmplp1endorg0start:movp1,#0hnext:

cplP1.0calltimer0_2

sjmpnexttimer0_2:

movr1,#20

movr2,#100

mov

tmod,#02h

movth0,#06h

movtl0,#06h

setbtr0lp1:jbctf0,lp2

sjmplp1lp2:djnzr2,lp1

movr2,#100

djnzr1,lp1retend[例3]如圖4-7所示,P1口中接有八個(gè)發(fā)光二極管,編程使八個(gè)管輪流點(diǎn)亮,每個(gè)管亮100ms,采用定時(shí)T0方式1,設(shè)晶振為6MHz。分析:利用T0完成100ms的定時(shí),當(dāng)P1口線輸出高電平“1”時(shí),發(fā)光二極管亮,每隔100ms“1”左移一次,采用定時(shí)方式1,先計(jì)算定時(shí)初值:

仿真鏈接程序如下:

ORG0100HMOVA,#01H;置第一個(gè)LED亮

LOOP0:MOVP1,A

MOVTMOD,#01H;T0工作于方式1MOVTH0,#3CH;置定時(shí)器初值

MOVTL0,#0B0H;定時(shí)100msSETBTR0;啟動(dòng)T0LOOP1:JBCTF0,LOOP2;100ms到轉(zhuǎn)L002,并清TF0SJMPLOOP1LOOP2:RLASJMPLOOP0//例4:用定時(shí)器T0查詢方式控制P2口8位LED閃爍。要求:T0工作于方式1,LED的閃爍周期為100ms,即亮50ms,熄滅50ms。解:定時(shí)器0、方式1,則TMOD=××××0001B

由于T機(jī)器=12T時(shí)鐘=121/fosc=1us,而方式1的最大定時(shí)時(shí)間為65.536ms,所以可選擇:50ms。由于計(jì)數(shù)值=50ms/1us=50000,所以初始值=216-計(jì)數(shù)值=15536=3CB0H∴TH0=(65536-50000)/256;

TL0=(65536-50000)%256。#include<reg51.h>//包含51單片機(jī)寄存器定義的頭文件/**************************************************************函數(shù)功能:主函數(shù)**************************************************************/voidmain(void){ TMOD=0x01;//使用定時(shí)器T0的模式1 TH0=(65536-50000)/256;//定時(shí)器T0的高8位賦初值

TL0=(65536-50000)%256;//定時(shí)器T0的高8位賦初值

TR0=1;//啟動(dòng)定時(shí)器T0 P2=0xff;//先熄滅P2口的燈

while(1)//無(wú)限循環(huán)

{ while(TF0==0)//查詢標(biāo)志位是否溢出

;//空操作

TF0=0;//若計(jì)時(shí)時(shí)間到,TF0=1,需要軟件將其清0 P2=~P2;//將P2按位取反,實(shí)現(xiàn)LED的閃爍

TH0=(65536-50000)/256;//定時(shí)器T0的高8位賦初值

TL0=(65536-50000)%256;//定時(shí)器T0的高8位賦初值

}}//例5:用定時(shí)器T1查詢方式控制P3.7的蜂鳴器發(fā)出1KHz音頻。解:定時(shí)器1、方式1,則TMOD=0001××××B

只要讓P3.7的電平信號(hào)每隔音頻的半個(gè)周期取反一次即可發(fā)出1KHz音頻。

#include<reg51.h>//包含51單片機(jī)寄存器定義的頭文件sbitsound=P3^7;//將sound位定義為P3.7引腳/**************************************************************函數(shù)功能:主函數(shù)**************************************************************/voidmain(void){ TMOD=0x10;//使用定時(shí)器T1的模式1 TH1=(65536-1000)/256;//定時(shí)器T1的高8位賦初值

TL1=(65536-1000)%256;//定時(shí)器T1的高8位賦初值

TR1=1;//啟動(dòng)定時(shí)器T1 while(1)//無(wú)限循環(huán)等待查詢

{ while(TF1==0)//查詢標(biāo)志位是否溢出

; TF1=0;//若計(jì)時(shí)時(shí)間到,TF0=1,需要軟件將其清0 sound=~sound;//將P3.7引腳輸出電平取反

TH1=(65536-1000)/256;//定時(shí)器T0的高8位賦初值

TL1=(65536-1000)%256;//定時(shí)器T0的高8位賦初值

}}二、MCS-51單片機(jī)的中斷系統(tǒng)

CPU在執(zhí)行程序的過(guò)程中,由于某種外界的原因,必須盡快終止CPU當(dāng)前的程序執(zhí)行,而去執(zhí)行相應(yīng)的處理程序,待處理結(jié)束后,再回來(lái)繼續(xù)執(zhí)行開(kāi)始被終止的程序。這種程序在執(zhí)行過(guò)程中由于外界的原因而被中間打斷的情況稱為“中斷”。1、中斷的概念2、中斷的作用可以實(shí)現(xiàn)CPU與外部設(shè)備的并行工作,提高CPU利用效率??梢詫?shí)現(xiàn)CPU對(duì)外部事件的實(shí)時(shí)處理,進(jìn)行實(shí)時(shí)控制。實(shí)現(xiàn)多項(xiàng)任務(wù)的實(shí)時(shí)切換。3、80C51單片機(jī)的中斷源定時(shí)中斷:由單片機(jī)的定時(shí)器/計(jì)數(shù)器的溢出標(biāo)志觸發(fā)的中斷,80C51單片機(jī)有T0和T1兩個(gè)定時(shí)中斷。80C51單片機(jī)具有多中斷控制,它由以下幾部分組成:外中斷:由外部信號(hào)觸發(fā)的中斷,80C51有2個(gè)外部中斷(/INT0)和(/INT1)。串行口中斷:為單片機(jī)的串行數(shù)據(jù)傳輸設(shè)置的中斷,80C51單片機(jī)有1個(gè)串行中斷。

4、中斷系統(tǒng)內(nèi)部結(jié)構(gòu)示意圖中斷允許控制寄存器中斷優(yōu)先級(jí)控制寄存器/INT0T0/INT1T1TX/RXIE---中斷允許控制寄存器5、中斷控制寄存器EX0ET0EX1ET1ES--------EAD0D1D2D3D4D5D6D7總中斷允許控制位。EA=1,開(kāi)放所有中斷。EA=0,禁止所有中斷。串行口中斷允許位。ES=1,允許串行口中斷ES=0,禁止串行口中斷定時(shí)器1中斷允許位。ET1=1,允許T1中斷;ET1=0,禁止T1中斷。外部中斷1中斷允許位。EX1=1,允許外部中斷1中斷EX1=0,禁止外部中斷1中斷定時(shí)器0中斷允許位。ET0=1,允許定時(shí)器0中斷;ET0=0,禁止定時(shí)器0中斷。外部中斷0中斷允許位。EX0=1,允許外部中斷0中斷;EX0=0,禁止外部中斷0中斷。IP---中斷優(yōu)先級(jí)控制寄存器PX0PT0PX1PT1PS------------D0D1D2D3D4D5D6D75、中斷控制寄存器串行口中斷優(yōu)先控制位PS=1,設(shè)定串行口為高優(yōu)先級(jí)中斷PS=0,設(shè)定串行口為低優(yōu)先級(jí)中斷。定時(shí)器T1中斷優(yōu)先控制位PT1=1,設(shè)定定時(shí)器T1中斷為高優(yōu)先級(jí)中斷;PT1=0,設(shè)定定時(shí)器T1中斷為低優(yōu)先級(jí)中斷。外部中斷1中斷優(yōu)先控制位PX1=1,設(shè)定外部中斷1為高優(yōu)先級(jí)中斷;PX1=0,設(shè)定外部中斷1為低優(yōu)先級(jí)中斷。定時(shí)器T0中斷優(yōu)先控制位PT0=1,設(shè)定定時(shí)器T0中斷為高優(yōu)先級(jí)中斷;PT0=0,設(shè)定定時(shí)器T0中斷為低優(yōu)先級(jí)中斷。外部中斷0中斷優(yōu)先控制位PX0=1,設(shè)定外部中斷0為高優(yōu)先級(jí)中斷;PX0=0,設(shè)定外部中斷0為低優(yōu)先級(jí)中斷。

注意:當(dāng)系統(tǒng)復(fù)位后,所有中斷源均設(shè)定為低優(yōu)先級(jí)中斷。即:IP=×××00000BTCON--定時(shí)器/計(jì)數(shù)器控制寄存器IT0IE0IT1IE1TR0TF0TR1TF1D0D1D2D3D4D5D6D75、中斷控制寄存器

定時(shí)器IT1/IT0:外中斷1/0觸發(fā)方式控制位。當(dāng)ITi=0時(shí),外部中斷1/0為電平觸發(fā)方式。當(dāng)ITi=1時(shí),外部中斷1/0為脈沖觸發(fā)方式。IE1/IE0:外部中斷1/0標(biāo)志。IEi=1,外部中斷1/0向CPU申請(qǐng)中斷。SCON--串行口控制寄存器RI

TIRB8TB8RENSM2SM1SM0D0D1D2D3D4D5D6D75、中斷控制寄存器通信TI:串行發(fā)送中斷標(biāo)志CPU將數(shù)據(jù)寫(xiě)入發(fā)送緩沖器SBUF時(shí),就啟動(dòng)發(fā)送,每發(fā)送完一個(gè)串行幀,硬件將使TI置位。RI:串行接收中斷標(biāo)志在串行口允許接收時(shí),每接收完一個(gè)串行幀,硬件將使RI置位。

ORG0000H AJMPMAIN

ORG000BH AJMPINTT0

ORG0100HMAIN:MOVR0,#08H…

…INTT0:…RETIEND…0000H0001H0002H0003H000BH0100H…000CH0101H0102HAJMPMAINAJMPINTT07808T0溢出中斷,TF0=1···SPINTT0AJMPCPU響應(yīng)該中斷(PC)(PC)+1保護(hù)斷點(diǎn)中斷處理

執(zhí)行主程序中斷返回AJMPINTT0(PC)(PC)+16、中斷處理過(guò)程(以T0中斷為例)80C51中斷入口地址分配外部中斷0---------0003H外部中斷1---------0013H定時(shí)器T0溢出中斷------000BH定時(shí)器T1溢出中斷------001BH串行通信中斷--------0023H7、中斷控制程序設(shè)計(jì)例1:在P1.0上產(chǎn)生周期為1s的方波。設(shè)晶振頻率

12MHz。分析:由于周期為1s,所以每500ms將P1.0反相,即可。選用定時(shí)器0、方式1,則TMOD=××××0001B

由于T機(jī)器=12T時(shí)鐘=121/fosc=1us,而方式1的最大定時(shí)時(shí)間為65.536ms,所以可選擇:50ms再循環(huán)10次。

由于:

計(jì)數(shù)值=50ms/1us=50000,所以初始值=216-計(jì)數(shù)值=15536=3CB0H∴TH0=3CH;

TL0=0B0H。

ORG0000HAJMPMAINORG000BH;T0中斷入口地址

AJMPINTT0MAIN:MOVR0,#10MOVTMOD,#01H;定時(shí)器T0,方式1MOVTH0,#3CH;置初始值

MOVTL0,#0B0HMOVIE,#82H;開(kāi)中斷,EA=1,ET0=1SETBTR0;啟動(dòng)T0WAIT:SJMPWAITINTT0:MOVTH0,#3CH;置初始值

MOVTL0,#0B0HDJNZR0,NEXT;50ms到?

CPLP1.0NEXT:RETIEND參考程序://實(shí)例:用定時(shí)器T0的中斷控制1位LED閃爍#include<reg51.h>//包含51單片機(jī)寄存器定義的頭文件sbitD1=P2^0;//將D1位定義為P2.0引腳/**************************************************************函數(shù)功能:主函數(shù)**************************************************************/voidmain(void){EA=1;//開(kāi)總中斷ET0=1;//定時(shí)器T0中斷允許TMOD=0x01;//使用定時(shí)器T0的模式2TH0=(65536-46083)/256;//定時(shí)器T0的高8位賦初值TL0=(65536-46083)%256;//定時(shí)器T0的高8位賦初值TR0=1;//啟動(dòng)定時(shí)器T0while(1)//無(wú)限循環(huán)等待中斷

;//空操作}/************************************************************函數(shù)功能:定時(shí)器T0的中斷服務(wù)程序************************************************************/voidTime0(void)interrupt1using0//“interrupt”聲明函數(shù)為中斷服務(wù)函數(shù)

//其后的1為定時(shí)器T0的中斷編號(hào);0表示使用第0組工作寄存器

{D1=~D1;//按位取反操作,將P2.0引腳輸出電平取反

TH0=(65536-46083)/256;//定時(shí)器T0的高8位重新賦初值

TL0=(65536-46083)%256;//定時(shí)器T0的高8位重新賦初值

}例2:定時(shí)/中斷的綜合應(yīng)用。用定時(shí)器T0、方式2實(shí)現(xiàn)1s定時(shí),控制LDE1~LDE8的循環(huán)點(diǎn)亮,同時(shí)用一開(kāi)關(guān)實(shí)現(xiàn)暫停-繼續(xù)控制功能。

(fosc=6MHz)分析:由于T機(jī)器=12T時(shí)鐘=121/fosc=2us,而方式2的最大定時(shí)時(shí)間為0.512ms,所以可選擇:0.5ms再循環(huán)2000次。由于計(jì)數(shù)值=0.5ms/2us=250,所以初始值=28-計(jì)數(shù)值=6∴TH0=TL0=06H。org0ajmpstartorg0003hajmpint_int0;p3.2引入外部脈沖org000bhajmpint_t0;t0中斷wei

equ20h.0;標(biāo)志位start:setb

wei

movr1,#20;50ms循環(huán)次數(shù)

movr2,#100;500us循環(huán)次數(shù)

movtmod,#02h;T0方式2

movth0,#6;置初始值

movtl0,#6

setbet0;開(kāi)T0中斷

setbit0;int0為電平觸發(fā)

setbex0;開(kāi)int0中斷

setbea;開(kāi)CPU中斷

setbtr0;啟動(dòng)T0

mova,#0feh;置初始輸出值

movp1,a

sjmp$參考程序:int_t0:djnzr2,next;50ms到?

movr2,#100

djnzr1,next;1s到?

movr1,#20

rla;輸出數(shù)據(jù)左移一位

movp1,anext:retiint_int0:

jb

wei,lp1;當(dāng)int0有中斷請(qǐng)求時(shí),判斷

setb

wei

setbtr0

sjmplp2lp1:clrtr0;暫停

clr

weilp2:retiend參考程序(續(xù)):外部中斷源的擴(kuò)展單片機(jī)僅有兩個(gè)外部中斷輸入端.可用兩種方法擴(kuò)展:1.定時(shí)器T0,T1。(工作在計(jì)數(shù)方式下)

2.中斷和查詢結(jié)合。

1.用定時(shí)器作外部中斷源例將定時(shí)器T0擴(kuò)展為外部中斷源。解:將定時(shí)器T0設(shè)定為方式2(自動(dòng)恢復(fù)計(jì)數(shù)初值),TH0和TF0的初值均設(shè)置為FFH,允許T0中斷,CPU開(kāi)放中斷,源程序如下:

MOV TMOD,#06H MOV TH0,#0FFH MOV TL0,#0FFH SETB TR0 SETB ET0 SETB EA …T0引腳每輸入一個(gè)負(fù)跳變,TF0都會(huì)置1,向CPU請(qǐng)求中斷

T0腳相當(dāng)于邊沿觸發(fā)的外部中斷源輸入線。2.中斷和查詢相結(jié)合圖:一個(gè)外中斷擴(kuò)展成多個(gè)外中斷的原理圖中斷服務(wù)程序如下:

ORG 0003H ;外部中斷0入口

AJMP INT0 ;轉(zhuǎn)向中斷服務(wù)程序入口

INT0:PUSH PSW ;保護(hù)現(xiàn)場(chǎng)

PUSH ACCJBP1.0,EXT0;中斷源查詢并轉(zhuǎn)相應(yīng)中斷服務(wù)程序

JB P1.1,EXT1JB P1.2,EXT2JB P1.3,EXT3EXIT:POP ACC ;恢復(fù)現(xiàn)場(chǎng)

POP PSWRETI

EXT0:

;EXINT0中斷服務(wù)程序

AJMP EXITEXT1:

;EXINT1中斷服務(wù)程序

AJMP EXITEXT2:

;EXINT2中斷服務(wù)程序

AJMP EXITEXT3:

;EXINT3中斷服務(wù)程序

AJMP EXIT

同樣,外部中斷1也可作相應(yīng)的擴(kuò)展。中斷系統(tǒng)的應(yīng)用中斷系統(tǒng)的初始化實(shí)質(zhì)上是針對(duì)4個(gè)與中斷有關(guān)的特殊功能寄存器TCON、SCON、IE和IP進(jìn)行控制和管理,具體步驟如下:

1、開(kāi)CPU中斷總開(kāi)關(guān)(EA);

2、設(shè)置中斷允許寄存器IE中相應(yīng)的位,確定各個(gè)中斷源是否允許中斷;

3、對(duì)多級(jí)中斷設(shè)置中斷優(yōu)先級(jí)寄存器IP中相應(yīng)的位,確定各中斷源的優(yōu)先級(jí)別;

4、設(shè)置定時(shí)器控制寄存器TCON中相應(yīng)的位,確定外部中斷是邊沿觸發(fā)還是電平觸發(fā)的觸發(fā)方式。[例10]:用89S51單片機(jī)控制一個(gè)交通信號(hào)燈系統(tǒng),晶振采用12MHz。設(shè)設(shè)A車道與B車道交叉組成十字路口,A是主道,B是支道。設(shè)計(jì)要求如下:

1、用發(fā)光二極管模擬交通信號(hào)燈,用按鍵開(kāi)關(guān)模擬車輛檢測(cè)信號(hào);

2、正常情況下,A、B兩車道輪流放行,A車道放行50s,其中5s用于警告;B車道放行30s,其中5s用于警告。

3、在交通繁忙時(shí),交通信號(hào)燈控制系統(tǒng)應(yīng)有手控開(kāi)關(guān),可人為地改變信號(hào)燈的狀態(tài),以緩解交通擁擠狀況。在B車道放行期間,若A車道有車而B(niǎo)車道無(wú)車,按下開(kāi)關(guān)K1使A車道放行15s;在A車道放行期間,若B車道有車而A車道無(wú)車,按下開(kāi)關(guān)K2使B車道放行15s。

4、有緊急車輛通過(guò)時(shí),按下K3開(kāi)關(guān)使A、B車道均為紅燈,禁行20s。解:設(shè)計(jì)步驟如下:

一、總體設(shè)計(jì)思想根據(jù)設(shè)計(jì)要求,制定總體設(shè)計(jì)思想如下:

1、正常情況下運(yùn)行主程序,采用0.5秒延時(shí)子程序的反復(fù)調(diào)用來(lái)實(shí)現(xiàn)各種定時(shí)時(shí)間;

2、一道有車而另一道無(wú)車時(shí),采用外部中斷1執(zhí)行中斷服務(wù)程序,并設(shè)置該中斷為低優(yōu)先級(jí)中斷;

3、有緊急車輛通過(guò)時(shí),采用外部中斷0執(zhí)行中斷服務(wù)程序,并設(shè)置該中斷為高優(yōu)先級(jí)中斷,實(shí)現(xiàn)二級(jí)中斷嵌套。二、硬件設(shè)計(jì)用12只發(fā)光二極管模擬交通信號(hào)燈,以89S51單片機(jī)的P1口控制這12只發(fā)光二極管,由于單片機(jī)帶負(fù)載能力有限,因此,在P1口與發(fā)光二極管之間用74LS07作驅(qū)動(dòng)電路,P1口輸出低電平時(shí),信號(hào)燈亮;輸出高電平時(shí),信號(hào)燈滅。在正常情況和交通繁忙時(shí),A、B兩車道的六只信號(hào)燈的控制狀態(tài)有五種形式,即P1口控制功能及相應(yīng)控制碼如表4-2所示??刂茽顟B(tài)P1口控制碼P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0未用未用B道綠燈B道黃燈B道紅燈A道綠燈A道黃燈A道紅燈A道放行,B道禁止F3H11110011A道警告,B道禁止F5H11110101A道禁止,B道放行DEH11011110A道禁止,B道警告EEH11101110A道禁止,B道禁止F6H11110110表4-2交通信號(hào)燈與控制狀態(tài)的對(duì)應(yīng)關(guān)系

分別以按鍵K1、K2模擬A、B道的車輛檢測(cè)信號(hào),開(kāi)關(guān)K1按下時(shí),B車道放行;開(kāi)關(guān)K2按下時(shí),A車道放行;開(kāi)關(guān)K1和K2的控制信號(hào)經(jīng)異或取反后,產(chǎn)生中斷請(qǐng)求信號(hào)(低電平有效),通過(guò)外部中斷1向CPU發(fā)出中斷請(qǐng)求;因此產(chǎn)生外部中斷1中斷的條件應(yīng)是:,可用集成塊74LS266(如無(wú)74LS266,可用74LS86與74LS04組合)來(lái)實(shí)現(xiàn)。采用中斷加查詢擴(kuò)展法,可以判斷出要求放行的是A車道(按下開(kāi)關(guān)K1)還是B車道(按下開(kāi)關(guān)K2)。以按鍵K0模擬緊急車輛通過(guò)開(kāi)關(guān),當(dāng)K0為高電平時(shí)屬正常情況,當(dāng)K0為低電平時(shí),屬緊急車輛通過(guò)的情況,直接將K0信號(hào)接至(P3.2)腳即可實(shí)現(xiàn)外部中斷0中斷。綜上所述,可設(shè)計(jì)出硬件電路如圖4-15。圖4-15交通燈模擬控制電路圖三、軟件設(shè)計(jì)

1、主程序采用查詢方式定時(shí),由R2寄存器確定調(diào)用0.5秒延時(shí)子程序的次數(shù),從而獲取交通燈的各種時(shí)間。子程序采用定時(shí)器1方式1查詢式定時(shí),定時(shí)器定時(shí)50ms,R3寄存器確定50ms循環(huán)10次,從而獲取0.5秒的延時(shí)時(shí)間。有車車道放行中

2、有車車道放行的中斷服務(wù)程序首先要保護(hù)現(xiàn)場(chǎng),因需用到延時(shí)子程序和P1口,故需保護(hù)的寄存器有R3、P1、TH1和TL1,保護(hù)現(xiàn)場(chǎng)時(shí)還需關(guān)中斷,以防止高優(yōu)先級(jí)中斷(緊急車輛通過(guò)所產(chǎn)生的中斷)出現(xiàn)導(dǎo)致程序混亂。

3、開(kāi)中斷,由軟件查詢P3.0和P3.1口,判別哪一道有車,再根據(jù)查詢情況執(zhí)行相應(yīng)的服務(wù)。待交通燈信號(hào)出現(xiàn)后,保持15秒的延時(shí),然后,關(guān)中斷,恢復(fù)現(xiàn)場(chǎng),再開(kāi)中斷,返回主程序。

4、緊急車輛出現(xiàn)時(shí)的中斷服務(wù)程序也需保護(hù)現(xiàn)場(chǎng),但無(wú)需關(guān)中斷(因其為高優(yōu)先級(jí)中斷),然后執(zhí)行相應(yīng)的服務(wù),待交通燈信號(hào)出現(xiàn)后延時(shí)15秒,確保緊急車輛通過(guò)交叉路口,然后,恢復(fù)現(xiàn)場(chǎng),返回主程序。程序設(shè)計(jì)如下:

ORG0000H LJMPMAIN ;轉(zhuǎn)向主程序

ORG0003H LJMPINT0 ;轉(zhuǎn)向緊急車輛中斷服務(wù)程序

ORG0013H LJMPINT1 ;轉(zhuǎn)向有車車道中斷服務(wù)程序

ORG0200HMAIN:MOVSP,#30HSETBPX0 ;置外部中斷0為高優(yōu)先級(jí)中斷

MOVTCON,#00H ;置外部中斷0、1為電平觸發(fā)

MOVTMOD,#10H;置定時(shí)器1為方式1MOVIE,#85H ;開(kāi)CPU中斷,開(kāi)外中斷0、1中斷

LOOP:MOVP1,#0F3H;A道綠燈放行,B道紅燈禁止

MOVR1,#90 ;置0.5秒循環(huán)次數(shù)(0.5×90=45S)

DIP1:ACALLDELAY;調(diào)用0.5秒延時(shí)子程序DJNZR1,DIP1;45秒不到繼續(xù)循環(huán)

MOVR1,#06 ;置A綠燈閃爍循環(huán)次數(shù)

WAN1:CPLP1.2 ;A綠燈閃爍

ACALLDELAYDJNZR1,WAN1 ;閃爍次數(shù)未到繼續(xù)循環(huán)

MOVP1,#0F5H;A黃燈警告,B紅燈禁止

MOV R

溫馨提示

  • 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)論