單片機(jī)原理與接口技術(shù)PPT電子課件教案-第7章_MCS-51單片機(jī)定時(shí)計(jì)數(shù)器和串行接口.ppt_第1頁
單片機(jī)原理與接口技術(shù)PPT電子課件教案-第7章_MCS-51單片機(jī)定時(shí)計(jì)數(shù)器和串行接口.ppt_第2頁
已閱讀5頁,還剩106頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1,12:45,單片機(jī)原理與接口技術(shù),第7章 mcs-51單片機(jī) 定時(shí)/計(jì)數(shù)器和串行接口,2,12:45,(1) 了解定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)和工作原理。 (2) 熟悉定時(shí)/計(jì)數(shù)器的控制寄存器。 (3) 掌握定時(shí)/計(jì)數(shù)器的應(yīng)用編程。 (4) 了解串行通信接口的結(jié)構(gòu)和工作原理。 (5) 熟悉串行通信接口的控制寄存器。 (6) 掌握串行通信的應(yīng)用編程。,本章教學(xué)要求,3,12:45,本 章 目 錄,7.1 定時(shí)/計(jì)數(shù)器 7.1.1 定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)與原理 7.1.2 定時(shí)/計(jì)數(shù)器的工作方式 7.1.3 定時(shí)/計(jì)數(shù)器對(duì)輸入信號(hào)的要求 7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用 7.2 串行通信接口 7.2.1 串行通信基礎(chǔ)知識(shí) 7.2.2 mcs-51串行通信接口 7.2.3 串行通信接口的應(yīng)用 習(xí)題與思考題,4,12:45,7.1 定時(shí)/計(jì)數(shù)器,mcs-51單片機(jī)內(nèi)有2個(gè)16位可編程的定時(shí)/計(jì)數(shù)器,即定時(shí)器0(t0)和定時(shí)器1(t1)。 兩個(gè)定時(shí)/計(jì)數(shù)器都有定時(shí)或事件計(jì)數(shù)的功能,可用于定時(shí)控制、延時(shí)、對(duì)外部事件計(jì)數(shù)和檢測等應(yīng)用。,5,12:45,7.1.1 定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)與原理,t0和t1受特殊功能寄存器tmod和tcon控制??捎绍浖O(shè)置為定時(shí)或計(jì)數(shù)工作方式。,1定時(shí)/計(jì)數(shù)器t0、t1結(jié)構(gòu),-t0、t1結(jié)構(gòu),6,12:45,2加1計(jì)數(shù)器,t0、t1都是16位加1計(jì)數(shù)器,th0、tl0構(gòu)成定時(shí)/計(jì)數(shù)器t0加1計(jì)數(shù)器的高8位和低8位。 加1計(jì)數(shù)器的初值可以通過程序進(jìn)行設(shè)定,設(shè)定不同的初值,就可以獲得不同的計(jì)數(shù)值或定時(shí)時(shí)間。,7.1.1 定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)與原理,-加1計(jì)數(shù)器,7,12:45,3定時(shí)控制寄存器(tcon),tf0、tf1:計(jì)數(shù)溢出標(biāo)志位。 tf0=1或tf1=1是計(jì)數(shù)溢出; tf0=0或tf1=0是計(jì)數(shù)未滿。 tr0、tr1:啟/??刂莆?。 tr0=1或tr1=1,使t0或t1啟動(dòng)計(jì)數(shù); tr0=0或tr1=0,使t0或t1停止計(jì)數(shù)。,7.1.1 定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)與原理,-tcon,8,12:45,4工作方式控制寄存器(tmod),gate:門控信號(hào)。當(dāng)gate=0時(shí),trx=1即可啟動(dòng)定時(shí)器工作; 當(dāng)gate=1時(shí),要求同時(shí)有trx=1和intx=1才可啟動(dòng)定時(shí)器工作(x是1、2)。 c/t:定時(shí)/計(jì)數(shù)器選擇位。 c/t =1,為計(jì)數(shù)器工作方式; c/t =0,為定時(shí)器工作方式。,7.1.1 定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)與原理,m1、m0: 定時(shí)/計(jì)數(shù)器工作模式選擇位 m1m0=00 工作方式0(13位方式) m1m0=01 工作方式1(16位方式) m1m0=10 工作方式2(8位自動(dòng)再裝入方式) m1m0=11 工作方式3(t0為2個(gè)8位方式),-tmod,9,12:45,5t0、t1定時(shí)功能和計(jì)數(shù)功能的選擇,通過選擇控制c/t實(shí)現(xiàn)定時(shí)器或計(jì)數(shù)器的功能選擇。 當(dāng)c/t=0時(shí),選擇定時(shí)器功能; 當(dāng)c/t=1時(shí),選擇計(jì)數(shù)器功能。,7.1.1 定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)與原理,-定時(shí)/計(jì)數(shù)功能選擇,10,12:45,對(duì)單片機(jī)內(nèi)部機(jī)器周期產(chǎn)生的脈沖進(jìn)行計(jì)數(shù),計(jì)數(shù)器每個(gè)機(jī)器周期自動(dòng)加1。如果單片機(jī)的晶振頻率為12mhz,則計(jì)數(shù)頻率為1mhz,或者說計(jì)數(shù)器每加1,可實(shí)現(xiàn)1s的計(jì)時(shí)。,7.1.1 定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)與原理,定時(shí)器功能( c/t =0):,-定時(shí)器功能,11,12:45,對(duì)外部事件產(chǎn)生的脈沖進(jìn)行計(jì)數(shù)。對(duì)于mcs-51單片機(jī)來說,p3.4和p3.5兩個(gè)信號(hào)引腳分別是t0和t1計(jì)數(shù)器的計(jì)數(shù)脈沖信號(hào)輸入端,當(dāng)該引腳輸入脈沖發(fā)生負(fù)跳變時(shí),加1計(jì)數(shù)器自動(dòng)加1。,7.1.1 定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)與原理,計(jì)數(shù)器功能( c/t =1):,-計(jì)數(shù)器功能,12,12:45,7.1.2 定時(shí)/計(jì)數(shù)器的工作方式,定時(shí)/計(jì)數(shù)器t0、t1可以有四種不同的工作方式: 方式0、方式1、方式2 和 方式3 4種工作方式由tmod中的m1、m0兩位決定,見表7-3所示。,-四種工作方式,13,12:45,當(dāng)tmod中m1m0=00時(shí),選定方式0 (13位狀態(tài))進(jìn)行工作。 c/t=1時(shí),圖中電子開關(guān)s1切至下端,13位定時(shí)/計(jì)數(shù)器處于計(jì)數(shù)器狀態(tài),加法計(jì)數(shù)器對(duì)t0引腳上的外部輸入脈沖計(jì)數(shù)。計(jì)數(shù)值:n=8192-x。x是由th0、tl0設(shè)定的初值。x=8191時(shí)為最小計(jì)數(shù)值l,x=0時(shí)為最大計(jì)數(shù)值8192,即計(jì)數(shù)范圍為18192(213)。,7.1.2 定時(shí)/計(jì)數(shù)器的工作方式,1方式0,-方式0,13位計(jì)數(shù),14,12:45,c/t=0時(shí),圖中電子開關(guān)s1切至上端,加法計(jì)數(shù)器對(duì)機(jī)器周期計(jì)數(shù),13位定時(shí)/計(jì)數(shù)器處于定時(shí)器狀態(tài)。定時(shí)時(shí)間:td=(8192-x)tcy。如果晶振頻率fosc=12mhz,即機(jī)器周期為1s,則定時(shí)范圍為1s8192s。,7.1.2 定時(shí)/計(jì)數(shù)器的工作方式,-方式0,13位定時(shí),1方式0,15,12:45,無論是計(jì)數(shù)器狀態(tài)還是計(jì)時(shí)器狀態(tài),隨著加法計(jì)數(shù)的增大,tl0的低5位溢出后自動(dòng)向th0進(jìn)位,th0溢出后,將溢出標(biāo)志位tf0置位,并向cpu發(fā)出中斷請(qǐng)求。,7.1.2 定時(shí)/計(jì)數(shù)器的工作方式,-方式0計(jì)數(shù)溢出置位tf0,1方式0,16,12:45,7.1.2 定時(shí)/計(jì)數(shù)器的工作方式,-啟動(dòng)方式,17,12:45,當(dāng)tmod中m1m0=01時(shí),選定方式1 (16位狀態(tài))進(jìn)行工作。,7.1.2 定時(shí)/計(jì)數(shù)器的工作方式,-方式1,16位定時(shí)/計(jì)數(shù),2方式1,當(dāng)作為計(jì)數(shù)器使用時(shí),計(jì)數(shù)范圍是165536(216); 當(dāng)作為定時(shí)器使用時(shí),定時(shí)器的定時(shí)時(shí)間為:td=(216-count)tcy。如果晶振頻率fosc=12mhz,則定時(shí)范圍為:165536s。,18,12:45,方式0和方式1具有共同的特點(diǎn),即當(dāng)加法計(jì)數(shù)器發(fā)生溢出后,自動(dòng)處于0狀態(tài),如果要實(shí)現(xiàn)循環(huán)計(jì)數(shù)或周期定時(shí),就需要程序不斷反復(fù)給計(jì)數(shù)器賦初值,這就影響了計(jì)數(shù)或定時(shí)精度,并給程序設(shè)計(jì)增添了麻煩。而方式2具有初值自動(dòng)重新加載功能,其邏輯結(jié)構(gòu)如圖7-5所示。,7.1.2 定時(shí)/計(jì)數(shù)器的工作方式,-方式2,自動(dòng)重載初值,3方式2,19,12:45,當(dāng)m1m0=10時(shí),定時(shí)/計(jì)數(shù)器選定方式2進(jìn)行工作。 該方式下,16位計(jì)數(shù)器被分為兩個(gè)8位寄存器tl0和th0,其中tl0作為計(jì)數(shù)器,th0作為計(jì)數(shù)器tl0的初值預(yù)置寄存器,并始終保持為初值常數(shù)。當(dāng)tl0計(jì)數(shù)溢出時(shí),系統(tǒng)將tf0置位,并向cpu申請(qǐng)中斷,同時(shí)將th0的內(nèi)容重新裝入tl0,繼續(xù)計(jì)數(shù)。,7.1.2 定時(shí)/計(jì)數(shù)器的工作方式,-方式2,自動(dòng)重載初值,20,12:45,4方式3,7.1.2 定時(shí)/計(jì)數(shù)器的工作方式,-方式3,在前述方式0、1、2 三種工作方式中,t0和t1兩個(gè)定時(shí)/計(jì)數(shù)器具有相同的功能。 在方式3下,t0和t1的功能完全不同。 當(dāng)m1m0=11時(shí): t0定時(shí)/計(jì)數(shù)器處于方式3工作模式。 t1定時(shí)/計(jì)數(shù)器只能工作在方式0、1、2下。,21,12:45,4方式3,7.1.2 定時(shí)/計(jì)數(shù)器的工作方式,-方式3時(shí)t0的結(jié)構(gòu),1) t0的方式3工作模式 在方式3下,t0被拆成兩個(gè)獨(dú)立的8位計(jì)數(shù)器tl0和th0。 tl0既可以計(jì)數(shù)使用,又可以定時(shí)使用,構(gòu)成了1個(gè)8位的定時(shí)/計(jì)數(shù)器(tl0)。t0的控制位和引腳信號(hào)全歸tl0使用,其功能和操作與方式0或方式1完全相同,而且工作邏輯結(jié)構(gòu)也極其類似。 th0只能作為1個(gè)8位定時(shí)器使用(不能用做外部計(jì)數(shù)方式)。而且由于t0的控制位已被tl0獨(dú)占,因此只好借用定時(shí)/計(jì)數(shù)器t1的控制位tr1和tf1,以計(jì)數(shù)溢出去置位tf1,還占用t1的中斷源。而定時(shí)的啟動(dòng)和停止則受tr1的狀態(tài)控制。 由于tl0既能做定時(shí)器使用,也能做計(jì)數(shù)器使用,而th0只能做定時(shí)器使用,因此在工作方式3下,定時(shí)/計(jì)數(shù)器t0可以構(gòu)成兩個(gè)獨(dú)立的定時(shí)器或1個(gè)定時(shí)器、1個(gè)計(jì)數(shù)器。,22,12:45,1) t0的方式3工作模式 t0為方式3工作模式時(shí)可以構(gòu)成兩個(gè)獨(dú)立的定時(shí)器或1個(gè)定時(shí)器、1個(gè)計(jì)數(shù)器。,7.1.2 定時(shí)/計(jì)數(shù)器的工作方式,-方式3時(shí)t0的結(jié)構(gòu),23,12:45,2) t0在方式3時(shí)t1的工作模式,7.1.2 定時(shí)/計(jì)數(shù)器的工作方式,-方式3時(shí)t1的工作模式,如果定時(shí)/計(jì)數(shù)器t0已工作在方式3下,則定時(shí)/計(jì)數(shù)器t1只能工作在方式0、方式1或方式2下。此時(shí)由于t1的運(yùn)行控制位tr1及計(jì)數(shù)溢出標(biāo)志位tf1已被定時(shí)/計(jì)數(shù)器t0借用而沒有計(jì)數(shù)溢出標(biāo)志位可供使用,因此只能把計(jì)數(shù)溢出直接送給串行口,作為串行口的波特率發(fā)生器使用,以確定串行通信的速率。 當(dāng)作為波特率發(fā)生器使用時(shí),只需要設(shè)置好工作方式,便可自動(dòng)運(yùn)行。如要停止工作,只需送入一個(gè)把t1設(shè)置為方式3的方式控制字就可以了。因?yàn)槎〞r(shí)/計(jì)數(shù)器t1不能在方式3下使用,如果硬把它設(shè)置為方式3,則停止工作。,24,12:45,2) t0在方式3時(shí)t1的工作模式,7.1.2 定時(shí)/計(jì)數(shù)器的工作方式,-方式3時(shí)t1的工作模式,如果定時(shí)/計(jì)數(shù)器t0已工作在方式3下,則定時(shí)/計(jì)數(shù)器t1只能工作在方式0、方式1或方式2下。,25,12:45,7.1.3 定時(shí)/計(jì)數(shù)器對(duì)輸入信號(hào)的要求,定時(shí)/計(jì)數(shù)器的作用是用來精確地確定某一段時(shí)間間隔(作為定時(shí)器用)或累計(jì)外部輸入的脈沖個(gè)數(shù)(作為計(jì)數(shù)器用)。當(dāng)用作定時(shí)器時(shí),在其輸入端輸入周期固定的脈沖,根據(jù)定時(shí)/計(jì)數(shù)器中累計(jì)的脈沖個(gè)數(shù),即可計(jì)算出所定時(shí)間的長度。 當(dāng)mcs-5l內(nèi)部的定時(shí)/計(jì)數(shù)器被選定為定時(shí)器工作模式時(shí),計(jì)數(shù)輸入信號(hào)是內(nèi)部時(shí)鐘脈沖,每個(gè)機(jī)器周期產(chǎn)生一個(gè)脈沖位,計(jì)數(shù)器增l,因此定時(shí)/計(jì)數(shù)器的輸入脈沖的周期與機(jī)器周期一樣,為時(shí)鐘振蕩頻率的l/12。當(dāng)采用12mhz頻率的晶振時(shí),計(jì)數(shù)速率為1mhz,輸入脈沖的周期間隔為1s。由于定時(shí)的精度決定于輸入脈沖的周期,因此當(dāng)需要高分辨率的定時(shí)時(shí),應(yīng)盡量選用頻率較高的晶振。,定時(shí)器作用,-定時(shí)器作用,26,12:45,當(dāng)定時(shí)/計(jì)數(shù)器用作計(jì)數(shù)器時(shí),計(jì)數(shù)脈沖來自外部輸入引腳t0或t1。當(dāng)輸入信號(hào)產(chǎn)生由1至0的跳變(即負(fù)跳變)時(shí),計(jì)數(shù)器的值增l。 由于確認(rèn)一次負(fù)跳變需要用2個(gè)機(jī)器周期,即24個(gè)振蕩周期,因此外部輸入的計(jì)數(shù)脈沖的最高頻率為振蕩器頻率的1/24,例如,選用6mhz頻率的晶振,允許輸入的脈沖頻率為250khz,如果選用12mhz頻率的晶振,則可輸入500khz的外部脈沖。 對(duì)于外部輸入信號(hào)的占空比并沒有什么限制,但為了確保某一給定的電平在變化之前能被采樣一次,則這一電平至少要保持一個(gè)機(jī)器周期。,7.1.3 定時(shí)/計(jì)數(shù)器對(duì)輸入信號(hào)的要求,-計(jì)數(shù)器作用,計(jì)數(shù)器作用,27,12:45,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,(1)初始化步驟 1) 設(shè)置工作方式 2) 計(jì)算加1計(jì)數(shù)器的計(jì)數(shù)初值count,并將計(jì)數(shù)初值count送入th、tl中 3) 啟動(dòng)計(jì)數(shù)器工作,即將trx置1 4) 若采用中斷方式,則應(yīng)設(shè)置t0、t1及cpu開中斷,1定時(shí)/計(jì)數(shù)器初始化,-初始化步驟,28,12:45,(2)計(jì)數(shù)方式初始化,假設(shè)t0工作于計(jì)數(shù)方式1,計(jì)數(shù)值n = 1,即每當(dāng)t0引腳輸入一個(gè)計(jì)數(shù)脈沖就使加1計(jì)數(shù)器產(chǎn)生溢出,通常可以使用這種方法擴(kuò)展外中斷。 為了使加1計(jì)數(shù)器每加一次1就溢出,加1計(jì)數(shù)器的初值count=0ffffh=216-1,其中16為工作方式1時(shí)加1計(jì)數(shù)器的位數(shù),1為計(jì)數(shù)值x。 現(xiàn)用n表示加1計(jì)數(shù)器的位數(shù),用x表示計(jì)數(shù)值,則計(jì)數(shù)初值count=2n-x,式中,n = 13,16,8和8,分別對(duì)應(yīng)工作方式0,1,2和3。,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-計(jì)數(shù)器初始化,29,12:45,例7-1 定時(shí)/計(jì)數(shù)器t0工作于計(jì)數(shù)方式,計(jì)數(shù)值x=1,允許中斷,分別使用工作方式1、方式0和方式2。進(jìn)行初始化編程。,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-計(jì)數(shù)器初始化,例7-1,1) 假設(shè)t1定時(shí)/計(jì)數(shù)器閑置不用,可設(shè)控制寄存器tmod的高4位為0000,即:tmod74 = 0000b。 2) t0定時(shí)/計(jì)數(shù)器工作于計(jì)數(shù)方式,可確定t0的gate = 0, c/t = 1,即:tmod32 = 01b。,30,12:45,3) t0工作于方式1時(shí),應(yīng)確定m1m0 = 01 即,tmod10 = 01b 則,tmod = 0000,0101b = 05h 計(jì)數(shù)器位數(shù)n = 16,計(jì)數(shù)器初值 count = 216-1 = 1111,1111,1111,1111b = ffffh 即,th0 = ffh,tl0 = ffh,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-計(jì)數(shù)器初始化,例7-1,31,12:45,4) t0工作于方式0時(shí),應(yīng)確定m1m0 = 00 即,tmod10 = 00b 則,tmod = 0000,0100b = 04h 計(jì)數(shù)器位數(shù)n = 13,計(jì)數(shù)器初值 count = 213-1 = 1111,1111,1,1111b 即,th0 = ffh(高8位ffh送入th0中) tl0 = 1fh(低5位1fh送入tl0中),7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-計(jì)數(shù)器初始化,例7-1,32,12:45,5) t0工作于方式2時(shí),應(yīng)確定m1m0 =10 即,tmod10 =10b 則,tmod = 0000,0110b = 06h 計(jì)數(shù)器位數(shù)n = 8,計(jì)數(shù)器初值 count = 28-1 = 1111,1111b = ffh 即,th0 = ffh,tl0 = ffh,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-計(jì)數(shù)器初始化,例7-1,33,12:45,按照前面分析,初始化程序如下。 1) t0工作于方式1的初始化程序 匯編程序段: mov tmod, #05h ;設(shè)置t0工作于計(jì)數(shù)方式1 mov th0, #0ffh ;加1計(jì)數(shù)器高8位th0賦初值ffh mov tl0, #0ffh ;加1計(jì)數(shù)器低8位tl0賦初值ffh setb et0 ;t0開中斷 setb ea ;cpu開中斷 setb tr0 ;啟動(dòng)t0計(jì)數(shù),7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-計(jì)數(shù)器初始化,例7-1,34,12:45,c語言程序段: #include sbit et0=ie1; /*定義cpu中斷控制字ie第1位為et0*/ sbit ea=ie7; /*定義cpu中斷控制字ie第7位為ea*/ sbit tr0=tcon4; /*定義tcon第4位為tr0*/ tmod=0x05; /*設(shè)置t0工作于計(jì)數(shù)方式1*/ th0=0xff; /*加1計(jì)數(shù)器高8位th0賦初值ffh*/ tl0=0xff; /*加1計(jì)數(shù)器低8位tl0賦初值ffh*/ et0=1; /*t0開中斷*/ ea=1; /*cpu開中斷*/ tr0=1; /*啟動(dòng)t0*/,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-計(jì)數(shù)器初始化,例7-1,35,12:45,2) t0工作于方式0的初始化程序 mov tmod, #04h ;設(shè)置t0工作于計(jì)數(shù)方式0 mov th0, #ffh ;加1計(jì)數(shù)器高8位th0賦初值ffh mov tl0, #1fh ;加1計(jì)數(shù)器低8位tl0賦初值1fh setb et0 ;t0開中斷 setb ea ;cpu開中斷 setb tr0 ;啟動(dòng)t0 3) t0工作于方式2的初始化程序 mov tmod, #06h ;設(shè)置t0工作于計(jì)數(shù)方式2 mov tl0, #0ffh ;計(jì)數(shù)器tl1賦初值ffh mov th0, #0ffh ;重裝寄存器th1賦初值ffh setb et0 ;t0開中斷 setb ea ;cpu開中斷 setb tr0 ;啟動(dòng)t0,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-計(jì)數(shù)器初始化,例7-1,36,12:45,(3)定時(shí)方式初始化,若系統(tǒng)主頻 fosc=6mhz,則機(jī)器周期tcy=2s,即計(jì)數(shù)器加一次1所用時(shí)間為2s,若計(jì)數(shù)器加100次產(chǎn)生溢出(計(jì)數(shù)值n=100),則定時(shí)時(shí)間為200s,即定時(shí)器定時(shí)時(shí)間td=ntcy。 計(jì)數(shù)值n與計(jì)數(shù)器初值count的關(guān)系是n=2n-count 所以,定時(shí)時(shí)間td =(2n-count)tcy 計(jì)數(shù)初值count=2n-td/tcy 式中,n=13、16、8、8,分別對(duì)應(yīng)方式0、1、2、3,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-定時(shí)器初始化,37,12:45,1) 假設(shè)t1定時(shí)/計(jì)數(shù)器閑置不用,可設(shè)控制寄存器tmod的高4位為0000,即,tmod74 = 0000b。 2) t0工作于定時(shí)方式,可確定t0的gate=0,c/t=0,即tmod32 = 00b。,例7-2 t0工作于定時(shí)方式1,定時(shí)時(shí)間td=2ms,系統(tǒng)主頻fosc=8mhz,允許中斷, 對(duì)t0進(jìn)行初始化編程。,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-定時(shí)器初始化,例7-2,38,12:45,3) t0工作于方式1時(shí),應(yīng)確定m1m0=01 即,tmod10=01b 則:tmod=0000,0001b=01h 4) 系統(tǒng)主頻fosc=8mhz,時(shí)鐘周期tcp=1/8s 系統(tǒng)機(jī)器周期tcy=12tcp=12/8=1.5s 計(jì)數(shù)器位數(shù)n=16,定時(shí)時(shí)間td=2ms=2000s 計(jì)數(shù)初值count=2n-td/tcy=216-2000/1.5 =64203=facbh 即:th0=fah,tl0=cbh,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-定時(shí)器初始化,例7-2,39,12:45,匯編語言初始化程序段: mov tmod, #01h ;設(shè)置t0工作于定時(shí)方式1 mov th0, #0fah ;加1計(jì)數(shù)器高8位th0賦初值fah mov tl0, #0cbh ;加1計(jì)數(shù)器低8位tl0賦初值cbh setb et0 ;t0開中斷 setb ea ;cpu開中斷 setb tr0 ;啟動(dòng)t0開始定時(shí),7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-定時(shí)器初始化,例7-2,40,12:45,1) 假設(shè)t0定時(shí)/計(jì)數(shù)器閑置不用,可設(shè)控制寄存器tmod的低4位為0000,即,tmod30 = 0000b。 2) t1工作于定時(shí)方式,可確定t1的gate = 0, c/t=0,即,tmod76=00b。,例7-3 t1工作于定時(shí)方式2,定時(shí)時(shí)間td=500s, 系統(tǒng)主頻fosc= 6 mhz, 不允許中斷。對(duì)t1進(jìn)行初始化編程。,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-定時(shí)器初始化,例7-3,41,12:45,3) t1工作于方式2時(shí),應(yīng)確定m1m0 = 10 即, tmod54=10b。則, tmod=0010,0000b=20h。 4) 系統(tǒng)主頻fosc= 6 mhz,時(shí)鐘周期tcp = 1/6s, tcy = 12tcp = 12/6 = 2s, 計(jì)數(shù)器位數(shù)n = 8,定時(shí)時(shí)間td = 500s, 計(jì)數(shù)初值count = 2n-td/tcy = 28-500/2 = 6 = 06h, 即,th0 = 06h,tl0 = 06h。,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-定時(shí)器初始化,例7-3,42,12:45,匯編語言初始化程序段: mov tmod, #20h ;設(shè)置t1工作于計(jì)數(shù)方式2 mov tl1, #06h ;計(jì)數(shù)器tl1賦初值06h mov th1, #06h ;重裝寄存器th1賦初值06h clr et1 ;t1關(guān)中斷 setb tr1 ;啟動(dòng)t1,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-定時(shí)器初始化,例7-3,43,12:45,c語言初始化程序段: #include sbit et1=ie3; /*定義cpu中斷控制字ie第3位為et1*/ sbit tr1=tcon6; /*定義tcon第6位為tr1*/ tmod=0x20; /*設(shè)置t1為定時(shí)方式2*/ tl1=0x06; /*計(jì)數(shù)器tl1賦初值06h*/ th1=0x06; /*重裝寄存器th1賦初值06h*/ et1=0; /*t1關(guān)中斷*/ tr1=1; /*啟動(dòng)t1*/,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-定時(shí)器初始化,例7-3,44,12:45,2定時(shí)/計(jì)數(shù)器應(yīng)用實(shí)例,分析: 周期為2ms的方波要求定時(shí)間隔為1ms,每次時(shí)間到將p1.0取反。定時(shí)器計(jì)數(shù)頻率為fosc/12,tcy=12/fosc=1s。每個(gè)機(jī)器周期定時(shí)器計(jì)數(shù)加1,1ms=1000s,需計(jì)數(shù)次數(shù)為1000/(12/fosc)=1000。由于計(jì)數(shù)器向上計(jì)數(shù),為得到l000個(gè)計(jì)數(shù)之后的定時(shí)器溢出,必須給定時(shí)器賦初值65536-1000,c語言中相當(dāng)于-1000。 用定時(shí)器1的方式1編程,采用中斷方式。,例7-4 設(shè)單片機(jī)的fosc=12mhz,要求在p1.0腳上輸出周期為2ms的方波。,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-應(yīng)用實(shí)例,例7-4,45,12:45,(1)匯編語言程序: org 0000h ;復(fù)位入口 ajmp start org 001bh ;t1中斷服務(wù)程序入口地址 ajmp t1int org 0030h start:mov sp, #60h ;初始化程序 mov tmod, #10h ;設(shè)置t1工作于定時(shí)方式1 mov th1, #0fch ;設(shè)置加1計(jì)數(shù)器的計(jì)數(shù)初值高字節(jié) mov tl1, #18h ;設(shè)置加1計(jì)數(shù)器的計(jì)數(shù)初值低字節(jié) setb tr1 ;啟動(dòng)t1 setb et1 ;開t1中斷 setb ea ;開總允許中斷 main: ajmp main ;主程序 t1int: cpl p1.0 ;t1中斷服務(wù)程序 mov th1, #0fch mov tl1, #18h reti,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-應(yīng)用實(shí)例,例7-4,46,12:45,(2)c51程序段: #include sbit rect_wave=p10; /*方波由p1.0口輸出*/ void time1_over(void); /*計(jì)數(shù)器計(jì)數(shù)時(shí)間到子程序*/ void main(void) tmod=0x10; /*設(shè)置定時(shí)/計(jì)數(shù)器1為工作方式1*/ th1=-1000/256; /*設(shè)置計(jì)數(shù)初值高字節(jié)*/ tl1=-1000%256; /*設(shè)置計(jì)數(shù)初值低字節(jié)*/ ie=0x00; /*禁止中斷*/ tr1=1; /*啟動(dòng)定時(shí)*/ for (; ;) if (tf1) /*查詢計(jì)數(shù)溢出*/ time1_over( ); /*調(diào)用計(jì)數(shù)器計(jì)數(shù)時(shí)間到子程序*/ ,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-應(yīng)用實(shí)例,例7-4,47,12:45,void time1_over(void) /*計(jì)數(shù)器計(jì)數(shù)時(shí)間到子程序*/ th1=-1000/256; /*設(shè)置計(jì)數(shù)初值高字節(jié)*/ tl1=-1000%256; /*設(shè)置計(jì)數(shù)初值低字節(jié), 重啟定時(shí)器*/ tf1=0; /*計(jì)數(shù)溢出標(biāo)志位清0*/ rect_wave=!rect_wave; /*輸出取反*/ ,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-應(yīng)用實(shí)例,例7-4,48,12:45,例7-5 設(shè)一只發(fā)光二極管led和8051的p1.0腳相連。當(dāng)p1.0腳是高電平時(shí),led發(fā)亮;當(dāng)p1.0腳是低電平時(shí),led熄滅。編制程序用定時(shí)器來實(shí)現(xiàn)發(fā)光二極管led的閃爍功能,設(shè)置led每1s閃爍一次。已知單片機(jī)系統(tǒng)主頻為12mhz。,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-應(yīng)用實(shí)例,例7-5,49,12:45,設(shè)計(jì)思想: 定時(shí)/計(jì)數(shù)器的最長定時(shí)是65.536ms,無法實(shí)現(xiàn)1s的定時(shí)??梢圆捎密浖?jì)數(shù)器來進(jìn)行設(shè)計(jì)。定義一個(gè)軟件計(jì)數(shù)器單元30h,先用定時(shí)/計(jì)數(shù)器t0做一個(gè)50ms的定時(shí)器,定時(shí)時(shí)間到后將軟件計(jì)數(shù)器中的值加1,如果軟件計(jì)數(shù)器計(jì)到了20(1s),取反p1.0,并清除軟件計(jì)數(shù)器中的值,否則直接返回。則完成了20次定時(shí)中斷才取反一次p1.0,實(shí)現(xiàn)定時(shí)時(shí)間2050=1000ms=1s的定時(shí)。 定時(shí)/計(jì)數(shù)器t0采用工作方式1(16位定時(shí)器), 其初值為:21650ms/1s=6553650000=15536=3cb0h,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-應(yīng)用實(shí)例,例7-5,50,12:45,程序如下: org 0000h ajmp start ;轉(zhuǎn)入主程序 org 000bh ;定時(shí)/計(jì)數(shù)器t0的中斷服務(wù)程序入口地址 ajmp time0 ;跳轉(zhuǎn)到真正的定時(shí)器中斷服務(wù)程序處 org 0030h start:mov sp, #60h ;設(shè)置堆棧指針 mov p1, #00h ;關(guān)發(fā)光二極管led(使其滅) mov 30h, #00h ;軟件計(jì)數(shù)器預(yù)清0 mov tmod, #01h ;定時(shí)/計(jì)數(shù)器t0工作于方式1 mov th0, #3ch ;設(shè)置定時(shí)/計(jì)數(shù)器的初值 mov tl0, #0b0h setb ea ;開總中斷允許 setb et0 ;開定時(shí)/計(jì)數(shù)器t0中斷允許 setb tr0 ;啟動(dòng)定時(shí)/計(jì)數(shù)器t0 loop:jmp loop ;循環(huán)等待,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-應(yīng)用實(shí)例,例7-5,51,12:45,time0:inc 30h ;中斷程序 mov a, 30h cjne a, #14h, ret0 ;與20比較,不等轉(zhuǎn)ret0 mov 30h, #00h cpl p1.0 ret0: mov th0, #3ch ;重設(shè)定時(shí)初值,啟動(dòng) mov tl0, #0b0h reti,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-應(yīng)用實(shí)例,例7-5,52,12:45,盡管mcs-51為用戶只提供了兩個(gè)外部中斷源,但用戶可以根據(jù)實(shí)際需求,進(jìn)行多于兩個(gè)外部中斷請(qǐng)求的擴(kuò)展,其中有很多擴(kuò)展方法。在此重點(diǎn)介紹利用定時(shí)器中斷作為外部中斷的擴(kuò)展。 mcs-51有兩個(gè)定時(shí)/計(jì)數(shù)器t0、t1,若選擇它們以計(jì)數(shù)器方式工作,當(dāng)引腳t0或t1上發(fā)生負(fù)跳變時(shí),t0或t1計(jì)數(shù)器則加1。利用這個(gè)特性,借用引腳t0或t1作為外部中斷請(qǐng)求輸入線,若設(shè)定計(jì)數(shù)初值為滿量程,計(jì)數(shù)器加1,就會(huì)產(chǎn)生溢出中斷請(qǐng)求,tf0或tf1變成了外部中斷請(qǐng)求標(biāo)志位,t0或t1的中斷入口地址被擴(kuò)展成了外部中斷源的入口地址。值得注意的是,當(dāng)使用定時(shí)器作為外部中斷時(shí),定時(shí)器以前的功能將失效,除非用軟件對(duì)它進(jìn)行復(fù)用。,3采用定時(shí)/計(jì)數(shù)器擴(kuò)展外部中斷,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-擴(kuò)展外部中斷,53,12:45,將定時(shí)器t0引腳作為外部中斷源使用的具體做法為,設(shè)定相應(yīng)定時(shí)器工作方式為方式2,計(jì)數(shù)器th0、tl0初值為0ffh,允許計(jì)數(shù)器t0中斷,則t0的初始始化程序如下: mov tmod, 06h ;將計(jì)數(shù)器t0設(shè)定為 ;方式2外部計(jì)數(shù) mov tl0, #0ffh ;設(shè)置計(jì)數(shù)器初值 mov th0, #0ffh ;設(shè)置重裝計(jì)數(shù)器初值 setb et0 ;允許t0中斷 setb ea ;cpu開中斷 setb tr0 ;啟動(dòng)t0,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-擴(kuò)展外部中斷,54,12:45,#include void main(void) tmod=0x66; /*兩個(gè)定時(shí)/計(jì)數(shù)器都設(shè)為方式2 外部計(jì)數(shù)模式*/ th1=0xff; /*設(shè)定重裝值,tl1不用設(shè)置*/ th0=0xff; /*設(shè)定重裝值,tl0不用設(shè)置*/ tcon=0x50; /*置位tr1、tr0,開始計(jì)數(shù)*/ ie=0x9f; /*中斷使能*/ ,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-擴(kuò)展外部中斷,55,12:45,/*定時(shí)器0中斷服務(wù)程序*/ void timer0_int(void) interrupt 1 tf0=0; /*計(jì)數(shù)溢出標(biāo)志位清0*/ /*定時(shí)器1中斷服務(wù)程序*/ void timer1_int(void) interrupt 3 tf1=0; /*計(jì)數(shù)溢出標(biāo)志位清0*/ ,7.1.4 定時(shí)/計(jì)數(shù)器的應(yīng)用,-擴(kuò)展外部中斷,56,12:45,7.2 串行通信接口,數(shù)據(jù)通信的傳輸方式有: 單工方式:數(shù)據(jù)僅按一個(gè)固定方向傳送。 半雙工方式:數(shù)據(jù)可實(shí)現(xiàn)雙向傳送,但不能同時(shí)進(jìn)行。 全雙工方式:允許雙方同時(shí)進(jìn)行數(shù)據(jù)雙向傳送。,7.2.1 串行通信基礎(chǔ)知識(shí),1數(shù)據(jù)通信的傳輸方式,-數(shù)據(jù)通信傳輸方式,57,12:45,2并行通信和串行通信,數(shù)據(jù)通信:指計(jì)算機(jī)與計(jì)算機(jī)或外設(shè)之間的數(shù)據(jù)傳送。 “信”:指一種信息,是由數(shù)字1和0構(gòu)成的具有一定規(guī)則并反映確定信息的一個(gè)數(shù)據(jù)或一批數(shù)據(jù)。 這種數(shù)據(jù)傳輸有兩種基本方式: 并行通信:是數(shù)據(jù)的每位被同時(shí)傳輸出去或接收進(jìn)來。 串行通信:數(shù)據(jù)傳輸是逐位傳輸?shù)摹?在相同條件下,串行通信比并行通信傳輸速度慢。,7.2.1 串行通信基礎(chǔ)知識(shí),-并行通信,串行通信,58,12:45,根據(jù)串行通信的不同工作方式,還可將發(fā)送接收線合二為一,成為發(fā)送/接收復(fù)用線(如半雙工)。即便在實(shí)際應(yīng)用中可能還要附加一些信號(hào)線,如應(yīng)答信號(hào)線、準(zhǔn)備好信號(hào)線等。 在多字節(jié)數(shù)據(jù)通信中,串行通信與并行通信相比,其工程實(shí)現(xiàn)上造價(jià)要低得多。 串行通信已被越來越廣泛地采用,尤其是,串行通信通過在信道中設(shè)立調(diào)制/解調(diào)器中繼站等,可使數(shù)據(jù)傳輸?shù)降厍虻拿總€(gè)角落。目前,飛速發(fā)展的計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)(互聯(lián)網(wǎng)、廣域網(wǎng)、局域網(wǎng))均為串行通信。,7.2.1 串行通信基礎(chǔ)知識(shí),-串行通信,串行通信,59,12:45,3異步串行通信和同步串行通信,異步串行通信: 簡稱異步通信。所傳輸?shù)臄?shù)據(jù)格式(也稱為串行幀)由1個(gè)起始位、7個(gè)或8個(gè)數(shù)據(jù)位、12個(gè)停止位(含1.5個(gè)停止位)和1個(gè)校驗(yàn)位組成。起始位約定為0,空閑位約定為1。在異步通信方式中,接收器和發(fā)送器有各自的時(shí)鐘,它們的工作是非同步的。 異步通信的實(shí)質(zhì)是指通信雙方采用獨(dú)立的時(shí)鐘,每個(gè)數(shù)據(jù)均以起始位開始,停止位結(jié)束,起始位觸發(fā)甲乙雙方同步時(shí)鐘。每個(gè)異步串行幀中的1位彼此嚴(yán)格同步,位周期相同。所謂異步是指發(fā)送、接收雙方的數(shù)據(jù)幀與幀之間不要求同步,也不必同步。,7.2.1 串行通信基礎(chǔ)知識(shí),-異步串行通信,60,12:45,3異步串行通信和同步串行通信,同步串行通信: 簡稱同步通信。發(fā)送器和接收器由同一個(gè)時(shí)鐘源控制。在異步通信中,每傳輸一幀字符都必須加上起始位和停止位,占用了傳輸時(shí)間,在要求傳送數(shù)據(jù)量較大的場合,速度就會(huì)慢得多。同步傳輸方式去掉了這些起始位和停止位,只在傳輸數(shù)據(jù)塊時(shí)先送出一個(gè)同步頭(字符)標(biāo)志即可。 同步傳輸方式比異步傳輸方式速度快,這是它的優(yōu)勢(shì)。但同步傳輸方式也有其缺點(diǎn),即它必須要用一個(gè)時(shí)鐘來協(xié)調(diào)收發(fā)器的工作,所以它的設(shè)備也較復(fù)雜。,7.2.1 串行通信基礎(chǔ)知識(shí),-同步串行通信,61,12:45,4波特率及時(shí)鐘頻率,波特率(br):單位時(shí)間傳輸?shù)臄?shù)據(jù)位數(shù)。 單位:bps (bit per second),1 bps=1 bit/s。 波特率的倒數(shù)即為每位傳輸所需的時(shí)間。 發(fā)送/接收時(shí)鐘頻率與波特率有關(guān),即 ft/r=nbrt/r 式中,ft/r為發(fā)/收時(shí)鐘頻率,單位:hz; brt/r為發(fā)/收波特率,單位:bps; n為波特率因子。 同步通信n=1。異步通信n可取1、16或64。也就是說,同步通信中數(shù)據(jù)傳輸?shù)牟ㄌ芈始礊橥綍r(shí)鐘頻率;而異步通信中,時(shí)鐘頻率可為波特率的整數(shù)倍。,7.2.1 串行通信基礎(chǔ)知識(shí),-波特率,時(shí)鐘頻率,62,12:45,5串行通信的校驗(yàn),異步通信時(shí)可能會(huì)出現(xiàn)幀格式錯(cuò)、超時(shí)錯(cuò)等傳輸錯(cuò)誤。在具有串行口應(yīng)用的單片機(jī)開發(fā)中,應(yīng)考慮在通信過程中對(duì)數(shù)據(jù)差錯(cuò)進(jìn)行校驗(yàn),因?yàn)椴铄e(cuò)校驗(yàn)是保證準(zhǔn)確無誤通信的關(guān)鍵。 常用差錯(cuò)校驗(yàn)方法有奇偶校驗(yàn)(mcs-51系列單片機(jī)編程采用此法)、和校驗(yàn)及循環(huán)冗余碼校驗(yàn)。,7.2.1 串行通信基礎(chǔ)知識(shí),-傳輸?shù)臏?zhǔn)確性,63,12:45,發(fā)送數(shù)據(jù)時(shí), 數(shù)據(jù)位尾隨1位數(shù)據(jù), 為奇偶校驗(yàn)位(1或0)。 當(dāng)設(shè)置為奇校驗(yàn)時(shí),數(shù)據(jù)中“1”的個(gè)數(shù)與校驗(yàn)位“1”的個(gè)數(shù)之和應(yīng)為奇數(shù)。 當(dāng)設(shè)置為偶校驗(yàn)時(shí),數(shù)據(jù)中“1”的個(gè)數(shù)與校驗(yàn)位“1”的個(gè)數(shù)之和應(yīng)為偶數(shù)。 接收時(shí),接收方應(yīng)具有與發(fā)送方一致的差錯(cuò)檢驗(yàn)設(shè)置。當(dāng)接收一個(gè)字符時(shí),對(duì)“1”的個(gè)數(shù)進(jìn)行校驗(yàn),若二者不一致,則說明數(shù)據(jù)傳送出現(xiàn)了差錯(cuò)。 奇偶校驗(yàn)是按字符校驗(yàn),數(shù)據(jù)傳輸速度將受到影響。這種特點(diǎn)使得它一般只用于異步串行通信中。,7.2.1 串行通信基礎(chǔ)知識(shí),(1) 奇偶校驗(yàn),-奇偶校驗(yàn),64,12:45,發(fā)送方將所發(fā)送的數(shù)據(jù)塊求和(字節(jié)數(shù)求和),并產(chǎn)生一個(gè)字節(jié)的校驗(yàn)字符(校驗(yàn)和)附加到數(shù)據(jù)塊末尾。 接收方接收數(shù)據(jù)時(shí)也是先對(duì)數(shù)據(jù)塊求和,將所得結(jié)果與發(fā)送方的校驗(yàn)和進(jìn)行比較,相符則無差錯(cuò),否則即出現(xiàn)了差錯(cuò)。 特點(diǎn)是無法檢驗(yàn)出字節(jié)位序的錯(cuò)誤。,7.2.1 串行通信基礎(chǔ)知識(shí),(2) 和校驗(yàn),-和校驗(yàn),65,12:45,這種校驗(yàn)是對(duì)一個(gè)數(shù)據(jù)塊校驗(yàn)一次。例如對(duì)磁盤信息的訪問、rom或ram存儲(chǔ)區(qū)的完整性等的檢驗(yàn)。 這種方法廣泛應(yīng)用于串行通信方式。,7.2.1 串行通信基礎(chǔ)知識(shí),(3)循環(huán)冗余碼校驗(yàn),-循環(huán)冗余碼校驗(yàn),66,12:45,7.2.2 mcs-51串行通信接口,mcs-51單片機(jī)內(nèi)部有一個(gè)全雙工的串行通信口,即串行接收和發(fā)送緩沖器(sbuf),這兩個(gè)在物理上獨(dú)立的接收發(fā)送器,既可以接收數(shù)據(jù),也可以發(fā)送數(shù)據(jù)。但接收緩沖器只能讀出不能寫入,而發(fā)送緩沖器則只能寫入不能讀出,它們的地址為99h。,-sbuf,67,12:45,mcs-51單片機(jī)串行口構(gòu)成: 發(fā)送緩沖寄存器(sbuf) 發(fā)送控制器 發(fā)送控制門 接收緩沖寄存器(sbuf) 接收控制寄存器 移位寄存器 中斷,1串行口結(jié)構(gòu)與特殊功能寄存器,7.2.2 mcs-51串行通信接口,-串行口結(jié)構(gòu),68,12:45,與串行通信有關(guān)的控制寄存器共有4個(gè):sbuf、scon、pcon和ie。 在邏輯上,sbuf只有一個(gè),既表示發(fā)送寄存器,又表示接收寄存器。具有同一個(gè)單元地址99h。在物理上,sbuf有兩個(gè),一個(gè)是發(fā)送寄存器,另一個(gè)是接收寄存器。,7.2.2 mcs-51串行通信接口,(1)接收/發(fā)送緩沖器(sbuf),-接收/發(fā)送緩沖器(sbuf),69,12:45,scon是mcs-51的一個(gè)可位尋址的專用寄存器,用于串行數(shù)據(jù)通信的控制。單元地址98h,位地址9fh98h。scon各位的定義下表所示。,7.2.2 mcs-51串行通信接口,(2)串行控制寄存器(scon),-串行控制寄存器(scon),70,12:45,1) 串行口工作方式選擇位sm0、sm1 sm0、sm1由軟件置1或清0,用于選擇串行口的4種工作方式(方式0、1、2、3)。 詳見后面“2. mcs-51串行通信工作方式”。,7.2.2 mcs-51串行通信接口,-串行控制寄存器(scon),71,12:45,2) 多機(jī)通信控制位sm2 sm2=1時(shí),接收到一幀信息,如果接收到的第9位數(shù)據(jù)為1,硬件將ri置1,申請(qǐng)中斷;如果第九位數(shù)據(jù)為0,則ri不置1,且所接收的數(shù)據(jù)無效。 sm2=0時(shí),只要接收到一幀信息,不管第九位數(shù)據(jù)是0還是1,硬件都置ri=1,并申請(qǐng)中斷。ri由軟件清0,sm2由軟件置1或清0。 多機(jī)通信時(shí),各從機(jī)先將sm2置l。接收并識(shí)別主機(jī)發(fā)來的地址,當(dāng)?shù)刂放c本機(jī)相同時(shí),將sm2清0,與主機(jī)進(jìn)行數(shù)據(jù)傳遞。各機(jī)所發(fā)送的數(shù)據(jù)第9位必須為0。,7.2.2 mcs-51串行通信接口,-串行控制寄存器(scon),72,12:45,3) 允許接收控制位ren ren=1時(shí)允許并啟動(dòng)接收。 ren=0時(shí)禁止接收。 ren由軟件置1或清0。 4) 發(fā)送數(shù)據(jù)d8位tb8 tb8是方式2、方式3中要發(fā)送的第九位數(shù)據(jù),事先用軟件寫入1或0。方式0、方式1不用。,7.2.2 mcs-51串行通信接口,-串行控制寄存器(scon),73,12:45,5) 接收數(shù)據(jù)d8位rb8 方式2、方式3中,由硬件將接收到的第九位數(shù)據(jù)存入rb8。方式1中,停止位存入rb8。 6) 發(fā)送中斷標(biāo)志位ti 發(fā)送完一幀信息,由硬件使ti置1,ti必須由軟件清0。 7) 接收中斷標(biāo)志位ri 接收完一幀有效信息,由硬件使ri置1,ri必須由軟件清0。,7.2.2 mcs-51串行通信接口,-串行控制寄存器(scon),74,12:45,7.2.2 mcs-51串行通信接口,-pcon與ie,(3)電源控制寄存器(pcon) pcon主要是為chmos型單片機(jī)的電源控制而設(shè)置的專用寄存器。單元地址為87h,不能位尋址。pcon是一個(gè)8位寄存器,其最高位smod為波特率控制位:該位為1時(shí),波特率增大一倍。 (4)中斷允許控制寄存器(ie) ie的地址是a8h,其內(nèi)容第6章已介紹。其中串行口允許中斷的控制位為es,當(dāng)es=1,允許串行口中斷;當(dāng)es=0,禁止串行中斷。,75,12:45,2mcs-51串行通信工作方式,7.2.2 mcs-51串行通信接口,-工作方式,76,12:45,在方式0下,串行口作為同步移位寄存器使用。這時(shí)用rxd(p3.0)引腳作為數(shù)據(jù)移位的入口和出口,而由txd(p3.1)引腳提供移位脈沖。移位數(shù)據(jù)的發(fā)送和接收以8位為一幀,不設(shè)起始位和停止位,低位在前高位在后,其幀格式如圖7-10所示。,1) 串行工作方式0,7.2.2 mcs-51串行通信接口,-工作方式0,77,12:45,使用方式0實(shí)現(xiàn)數(shù)據(jù)的移位輸入/輸出時(shí),實(shí)際上是把串行口變成并行口使用。串行口作為并行輸出口使用時(shí),要有“串入并出”的移位寄存器配合,例如cd4049或74hc164,其電路連接如圖所示。,7.2.2 mcs-51串行通信接口,-工作方式0,用串行口實(shí)現(xiàn)并行輸出,78,12:45,如果把實(shí)現(xiàn)并入串出功能的移位寄存器(例如cd4014或74hc165)與串行口配合使用,如圖7-12所示,就可以把串行口變?yōu)椴⑿休斎肟谑褂谩?7.2.2 mcs-51串行通信接口,-工作方式0,用串行口實(shí)現(xiàn)并行輸入,79,12:45,2) 串行工作方式1 方式1是10位為一幀的異步串行通信方式。 方式1幀格式如圖7-13所示,包括1個(gè)起始位、8個(gè)數(shù)據(jù)位和1個(gè)停止位。,7.2.2 mcs-51串行通信接口,-工作方式1,異步通信用起始位“0”表示字符的開始,然后從低位到高位逐位傳送數(shù)據(jù),最后用停止位“1”表示字符結(jié)束。一個(gè)字符又稱一幀信息。,80,12:45,(1) 數(shù)據(jù)發(fā)送 方式1的數(shù)據(jù)發(fā)送是由一條寫發(fā)送緩沖寄存器指令(mov sbuf, a)開始的。隨后在串行口由硬件自動(dòng)加入起始位和停止位,構(gòu)成一個(gè)完整的幀格式,然后在移位脈沖的作用下,由txd端串行輸出。一個(gè)字符幀發(fā)送完后,使txd輸出線維持在1狀態(tài)下,并將scon寄存器的ti置1,通知cpu可以發(fā)送下一個(gè)字符。,7.2.2 mcs-51串行通信接口,-工作方式1,81,12:45,(2) 數(shù)據(jù)接收 接收數(shù)據(jù)時(shí),scon的ren位應(yīng)處于允許接收狀態(tài)(ren=1)。在此前提下,串行口采樣rxd端,當(dāng)采樣到從1向0的狀態(tài)跳變時(shí),就認(rèn)定是接收到起始位。隨后在移位脈沖的控制下,把接收到的數(shù)據(jù)位移入接收緩沖寄存器中,直到停止位到來之后把停止位送入rb8中,并置位接收中斷標(biāo)志位ri,通知cpu從sbuf取走接收到的一個(gè)字符,指令為mov a, subf。,7.2.2 mcs-51串行通信接口,-工作方式1,82,12:45,3) 串行工作方式2和方式3 方式2和方式3是11位一幀的串行通信方式。其幀格式如圖7-14所示,包括1個(gè)起始位,9個(gè)數(shù)據(jù)位和1個(gè)停止位。,7.2.2 mcs-51串行通信接口,-工作方式2、3,在方式2和方式3下,字符還是有8個(gè)數(shù)據(jù)位。第9個(gè)數(shù)據(jù)位d8,既可作為奇偶校驗(yàn)位使用,也可作為控制位使用,其功能由用戶確定。發(fā)送之前應(yīng)先將scon中的tb8準(zhǔn)備好,可使用如下指令完成。 setb tb8 ;tb8位置1 clr tb8 ;tb8位清零,83,12:45,3) 串行工作方式2和方式3,7.2.2 mcs-51串行通信接口,-工作方式2、3,準(zhǔn)備好第9位數(shù)據(jù)之后,再向sbuf寫入字符的8位數(shù)據(jù),并以此來啟動(dòng)串行發(fā)送。 一個(gè)字符幀發(fā)送完畢后,將ti位置1,其過程與方式1相同。 方式2的接收過程也與方式1類似,所不同的是在第9位數(shù)據(jù)上,串行口把接收到的8位數(shù)據(jù)送入sbuf,而把第9位數(shù)據(jù)送入rb8。 方式2和方式3的不同之處在于波特率的計(jì)算方法不同。方式3同方式1,即通過設(shè)置定時(shí)器1的初值來設(shè)定波特率。方式2的波特率是固定的,見下文所述。,84,12:45,方式0時(shí)波特率是固定的,為單片機(jī)晶振頻率的1/12,即br = fosc/12(fosc為晶振頻率)。 方式0的波特率是一個(gè)機(jī)器周期進(jìn)行一次移位。 當(dāng)fosc=6 mhz時(shí), 波特率為500 kbps, 即2 s移位一次; 當(dāng)fosc=12 mhz時(shí), 波特率為1 mbps, 即1 s移位一次。 方式2的波特率也是固定的,且有兩種。 一種是晶振頻率的1/32,即fosc/32。 另一種是晶振頻率的1/64,fosc/64。 用公式表示為:br = 2smod fosc/64 式中,smod為pcon寄存器最高位的值,smod=1表示波特率加倍。,7.2.2 mcs-51串行通信接口,-串行口波特率,3mcs-51串行口波特率,85,12:45,方式1和方式3的波特率是可變的,其波特率由定時(shí)器1的溢出率決定,公式為: br = 2smod fd / 32 式中,smod為pcon寄存器最高位的值,smod=1表示波特率加倍。而定時(shí)器1溢出率計(jì)算公式為: fd=fosc/(12*(256-th1) mcs-51單片機(jī)串行通信方式0到方式3的常用波特率如表7-6所示,以便查找對(duì)應(yīng)的方式設(shè)置及定時(shí)器1的時(shí)間常數(shù)。,7.2.2 mcs-51串行通信接口,-串行口波特率,3mcs-51串行口波特率,86,12:45,例7-6 使用74hc164的并行輸出引腳接8支發(fā)光二極管,利用它的串入并出功能,把發(fā)光二極管從左向右輪流點(diǎn)亮,并反復(fù)循環(huán)。發(fā)光二極管為共陰極型,電路連接如圖7-15所示。,7.2.3 串行通信接口的應(yīng)用,-串行移位輸出,1串口方式0應(yīng)用,分析:當(dāng)串行口把8位狀態(tài)碼串行移位輸出后,ti置1。把ti作為狀態(tài)查詢標(biāo)志,使用查詢方法。,87,12:45,org 1000h start:mov scon, #00h ;置串行口工作方式0 mov a, #80h ;最高位燈先亮 clr p1.0 ;關(guān)閉并行輸出 out0:mov sbuf, a ;開始串行輸出 out1:jnb ti, out1 ;輸出完否?未完,等待 clr ti ;完了,清零ti標(biāo)志位, ;以備下次發(fā)送 setb p1.0 ;打開并行口輸出 acall delay ;延時(shí)一段時(shí)間,-串行移位輸出,匯編程序1,7.2.3 串行通信接

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論