第6章+MCS-51單片機(jī)內(nèi)部資源及編程課件_第1頁(yè)
第6章+MCS-51單片機(jī)內(nèi)部資源及編程課件_第2頁(yè)
第6章+MCS-51單片機(jī)內(nèi)部資源及編程課件_第3頁(yè)
第6章+MCS-51單片機(jī)內(nèi)部資源及編程課件_第4頁(yè)
第6章+MCS-51單片機(jī)內(nèi)部資源及編程課件_第5頁(yè)
已閱讀5頁(yè),還剩102頁(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)介

1、第6章 MCS-51單片機(jī)內(nèi)部資源及編程 6.1 并行輸入/輸出接口6.2 定時(shí)/計(jì)數(shù)器接口6.3 串行接口單片機(jī)6.4 中斷系統(tǒng)第6章 MCS-51單片機(jī)內(nèi)部資源及編程 6.1 并行6.1 并行輸入/輸出接口 MCS-51單片機(jī)的內(nèi)部資源主要有:1、并行I/O口;2、定時(shí)器/計(jì)數(shù)器;3、串行接口;4、中斷系統(tǒng)。 6.1.1 并行口應(yīng)用與編程【例5-1】 利用單片機(jī)的P1口接8個(gè)發(fā)光二極管,P0口接8個(gè)開(kāi)關(guān),編程實(shí)現(xiàn),當(dāng)開(kāi)關(guān)動(dòng)作時(shí),對(duì)應(yīng)的發(fā)光二極管亮或滅。 6.1 并行輸入/輸出接口 MCS-51單片C51語(yǔ)言程序:#include void main(void)unsigned char i

2、;P0=0 xFF;for(;) i=P0;P1=i; 只須把P0口的內(nèi)容讀入后,通過(guò)P1口輸出即可。匯編程序: ORG 0100H MOV P0,#0FFHLOOP:MOV A,P0 MOV P1,A SJMP LOOPMCS-51P1.7P1.6P1.1P1.0P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0C51語(yǔ)言程序:只須把P0口的內(nèi)容讀入后,通過(guò)P1口輸出即可6.2 定時(shí)/計(jì)數(shù)器接口定時(shí)方法:1、硬件定時(shí):較長(zhǎng)時(shí)間;不夠靈活、方便;2、軟件定時(shí):編循環(huán)程序,時(shí)間精確;占用CPU;3、可編程定時(shí)器定時(shí):對(duì)系統(tǒng)時(shí)鐘脈沖記數(shù),靈活方便。計(jì)數(shù)器有加1計(jì)數(shù)或減1計(jì)數(shù)兩種形式。

3、加1計(jì)數(shù):計(jì)滿回0溢出;減1計(jì)數(shù):計(jì)滿回0。6.2 定時(shí)/計(jì)數(shù)器接口定時(shí)方法:計(jì)數(shù)器有加1計(jì)數(shù)或減16.2.1 定時(shí)/計(jì)數(shù)器的主要特性1、MCS-51系列中:51子系列有2個(gè)16位的可編程定時(shí)/計(jì)數(shù)器: 定時(shí)/計(jì)數(shù)器T0和定時(shí)/計(jì)數(shù)器T1;52子系列有3個(gè):還有一個(gè)定時(shí)/計(jì)數(shù)器T2。2、每個(gè)定時(shí)/計(jì)數(shù)器通過(guò)編程設(shè)定來(lái)實(shí)現(xiàn):對(duì)系統(tǒng)時(shí)鐘(fosc)計(jì)數(shù)實(shí)現(xiàn)定時(shí);對(duì)外部信號(hào)(T0/T1引腳)計(jì)數(shù)實(shí)現(xiàn)計(jì)數(shù)功能。3、每個(gè)定時(shí)/計(jì)數(shù)器都有多種工作方式,通過(guò)編程可設(shè)定工作于某種方式。T0有4種工作方式;T1有3種工作方式;T2有3種工作方式。4、每一個(gè)定時(shí)/計(jì)數(shù)器定時(shí)計(jì)數(shù)時(shí)間到時(shí)產(chǎn)生溢出,使相應(yīng)的溢出位置位

4、,溢出可通過(guò)查詢或中斷方式處理。6.2.1 定時(shí)/計(jì)數(shù)器的主要特性1、MCS-51系列中6.2.2 定時(shí)/計(jì)數(shù)器T0、T1的結(jié)構(gòu)及工作原理TH1TL1TH0TL0TCONTMOD啟動(dòng)啟動(dòng)溢出溢出工作方式工作方式中斷請(qǐng)求內(nèi)部總線TcyT1T06.2.2 定時(shí)/計(jì)數(shù)器T0、T1的結(jié)構(gòu)及工作原理TH1T加法計(jì)數(shù)器在使用時(shí)注意兩個(gè)方面:1、由于它是加法計(jì)數(shù)器,每來(lái)一個(gè)計(jì)數(shù)脈沖,加法器中的內(nèi)容加1個(gè)單位,當(dāng)由全1加到全0時(shí)計(jì)滿溢出,因而,如果要計(jì)N個(gè)單位,則首先應(yīng)向計(jì)數(shù)器置初值為X,且有:初值X=最大計(jì)數(shù)值(滿值)M計(jì)數(shù)值N 在不同的計(jì)數(shù)方式下,最大計(jì)數(shù)值(滿值)不一樣,一般來(lái)說(shuō),當(dāng)定時(shí)器/計(jì)數(shù)器工作于

5、n位計(jì)數(shù)方式時(shí),它的最大計(jì)數(shù)值(滿值)為M=2n。加法計(jì)數(shù)器在使用時(shí)注意兩個(gè)方面:2、當(dāng)定時(shí)/計(jì)數(shù)器工作于計(jì)數(shù)方式時(shí),對(duì)芯片引腳T0(P3.4)或T1(P3.5)上的輸入脈沖計(jì)數(shù),計(jì)數(shù)過(guò)程如下: 在每一個(gè)機(jī)器周期的S5P2時(shí)刻對(duì)T0(P3.4)或T1(P3.5)上信號(hào)采樣一次,如果上一個(gè)機(jī)器周期采樣到高電平,下一個(gè)機(jī)器周期采樣到低電平,則計(jì)數(shù)器在下一個(gè)機(jī)器周期的S3P2時(shí)刻加1計(jì)數(shù)一次。 因而需要兩個(gè)機(jī)器周期才能識(shí)別一個(gè)計(jì)數(shù)脈沖,所以外部計(jì)數(shù)脈沖的頻率應(yīng)小于振蕩頻率的1/24。2、當(dāng)定時(shí)/計(jì)數(shù)器工作于計(jì)數(shù)方式時(shí),對(duì)芯片引腳T0(P3.46.2.3 定時(shí)/計(jì)數(shù)器的方式和控制寄存器一定時(shí)/計(jì)數(shù)器的

6、方式寄存器TMOD其中:C/T:定時(shí)或計(jì)數(shù)方式選擇位: 當(dāng)C/T=1時(shí)工作于計(jì)數(shù)方式:計(jì)數(shù)引腳T0(T1)輸入的負(fù)脈沖; 當(dāng)C/T=0時(shí)工作于定時(shí)方式:計(jì)數(shù)內(nèi)部機(jī)器周期脈沖。 GATE:門控位,用于控制定時(shí)/計(jì)數(shù)器的啟動(dòng)是否受外部中斷請(qǐng)求信號(hào)的影響。 M1、M0為工作方式選擇位 ,用于對(duì)T0的4種工作方式,T1的3種工作方式進(jìn)行選擇,選擇情況如下: 6.2.3 定時(shí)/計(jì)數(shù)器的方式和控制寄存器一定時(shí)/計(jì)二定時(shí)/計(jì)數(shù)器的控制寄存器TCON其中:TF1:定時(shí)/計(jì)數(shù)器T1的溢出標(biāo)志位,當(dāng)定時(shí)/計(jì)數(shù)器T1計(jì)滿時(shí),由硬件使它置位,如中斷允許則觸發(fā)T1中斷。進(jìn)入中斷處理后由內(nèi)部硬件電路自動(dòng)清除。TR1:定時(shí)

7、/計(jì)數(shù)器T1的啟動(dòng)位,可由軟件置位或清零: 當(dāng)TR1=1時(shí)啟動(dòng);TR1=0時(shí)停止。TF0:定時(shí)/計(jì)數(shù)器T0的溢出標(biāo)志位,當(dāng)定時(shí)/計(jì)數(shù)器T0計(jì)滿時(shí),由硬件使它置位,如中斷允許則觸發(fā)T0中斷。進(jìn)入中斷處理后由內(nèi)部硬件電路自動(dòng)清除。TR0:定時(shí)/計(jì)數(shù)器T0的啟動(dòng)位,可由軟件置位或清零: 當(dāng)TR0=1時(shí)啟動(dòng);TR0=0時(shí)停止。二定時(shí)/計(jì)數(shù)器的控制寄存器TCON其中:5.2.3 定時(shí)/計(jì)數(shù)器的工作方式一、方式0 方式0是13位的定時(shí)/計(jì)數(shù)方式,因而最大計(jì)數(shù)值(滿值)為M=213=8192。如計(jì)數(shù)值為N,則置入的初值X為: X=8192-N 如定時(shí)/計(jì)數(shù)器T0的計(jì)數(shù)值為1000,則初值為7192,轉(zhuǎn)換成二

8、進(jìn)制數(shù)為1110000011000B,則TH0=11100000B=E0H,TL0=00011000B=18H。fosc5.2.3 定時(shí)/計(jì)數(shù)器的工作方式一、方式0 方式 方式0為13位計(jì)數(shù),由TL0的低5位(高3位未用)和TH0的8位組成。TL0的低5位溢出時(shí)向TH0進(jìn)位,TH0溢出時(shí),置位TCON中的TF0標(biāo)志,向CPU發(fā)出中斷請(qǐng)求。 方式0為13位計(jì)數(shù),由TL0的低5位(高3二、方式1 方式1的結(jié)構(gòu)與方式0結(jié)構(gòu)相同,只是把13位變成16位,16位的加法計(jì)數(shù)器被全部用上。 由于是16位的定時(shí)/計(jì)數(shù)方式,因而最大計(jì)數(shù)值(滿值)為M=216=65536。如計(jì)數(shù)值為N,則置入的初值X為:X=65

9、536-N如定時(shí)/計(jì)數(shù)器T0的計(jì)數(shù)值為1000,則初值為65536-1000=64536,轉(zhuǎn)換成二進(jìn)制數(shù)為1111110000011000B,則TH0=11111100B=FCH,TL0=00011000B=18 H。二、方式1 方式1的結(jié)構(gòu)與方式0結(jié)構(gòu)相同,只是 方式1的計(jì)數(shù)位數(shù)是16位,由TL0作為低8位、TH0作為高8位,組成了16位加1計(jì)數(shù)器 。計(jì)數(shù)個(gè)數(shù)與計(jì)數(shù)初值的關(guān)系為: 方式1的計(jì)數(shù)位數(shù)是16位,由TL0作為低8位三、方式2 方式2下,16位的計(jì)數(shù)器只用了8位來(lái)計(jì)數(shù),用的是TL0(或TL1)的8位來(lái)進(jìn)行計(jì)數(shù),而TH0(或TH1)用于保存初值。 當(dāng)TL0(或TL1)計(jì)滿時(shí)則溢出,一方

10、面使TF0(或TF1)置位,另一方面溢出信號(hào)又會(huì)觸發(fā)上圖中的三態(tài)門,使三態(tài)門導(dǎo)通,TH0(或TH1)的值就自動(dòng)裝入TL0(或TL1)。 三、方式2 方式2下,16位的計(jì)數(shù)器只用了8位來(lái)計(jì)數(shù), 由于是8位的定時(shí)/計(jì)數(shù)方式,因而最大計(jì)數(shù)值(滿值)為M=28=256。如計(jì)數(shù)值為N,則置入的初值X為:X=256-N 如定時(shí)/計(jì)數(shù)器T0的計(jì)數(shù)值為100,則初值為256-100=156,轉(zhuǎn)換成二進(jìn)制數(shù)為10011100B,則TH0=TL0=10011100B。 注意:由于方式2計(jì)滿后,溢出信號(hào)會(huì)觸發(fā)三態(tài)門自動(dòng)地把TH0(或TH1)的值裝入TL0(或TL1)中,因而如果要重新實(shí)現(xiàn)N個(gè)單位的計(jì)數(shù),不用重新置入

11、初值。 由于是8位的定時(shí)/計(jì)數(shù)方式,因而最大計(jì)數(shù)值(滿值)為M 方式2為自動(dòng)重裝初值的8位計(jì)數(shù)方式。 工作方式2特別適合于用作較精確的脈沖信號(hào)發(fā)生器。 計(jì)數(shù)個(gè)數(shù)與計(jì)數(shù)初值的關(guān)系為: 方式2為自動(dòng)重裝初值的8位計(jì)數(shù)方式。 工作方式2特別適合四、方式3 方式3只有定時(shí)/計(jì)數(shù)器T0才有,當(dāng)M1M0兩位為11時(shí),定時(shí)/計(jì)數(shù)器T0工作于方式3,方式3的結(jié)構(gòu)如下圖。 fosc振蕩器INT0T0四、方式3 方式3只有定時(shí)/計(jì)數(shù)器T0才有,當(dāng)M1 方式3下T0被分為兩個(gè)部分TL0和TH0,其中,TL0可作為定時(shí)/計(jì)數(shù)器使用,占用T0的全部控制位:GATE、C/T、TR0和TF0; TH0固定只能作定時(shí)器使用,

12、對(duì)機(jī)器周期進(jìn)行計(jì)數(shù),這時(shí)它占用定時(shí)/計(jì)數(shù)器T1的TR1位、TF1位和T1的中斷資源。fosc振蕩器INT0T0 方式3下T0被分為兩個(gè)部分TL0和TH0,其中,TL0可 方式3只適用于定時(shí)/計(jì)數(shù)器T0,定時(shí)器T1處于方式3時(shí)相當(dāng)于TR1=0,停止計(jì)數(shù)。 工作方式3將T0分成為兩個(gè)獨(dú)立的8位計(jì)數(shù)器TL0和TH0 。 方式3只適用于定時(shí)/計(jì)數(shù)器T0,定時(shí)器T6.2.4 定時(shí)/計(jì)數(shù)器的初始化編程及應(yīng)用一定時(shí)/計(jì)數(shù)器的編程MCS-51單片機(jī)定時(shí)/計(jì)數(shù)器初始化過(guò)程如下:1根據(jù)要求選擇方式,確定方式控制字,寫入方式控制寄存器TMOD。2計(jì)算定時(shí)/計(jì)數(shù)器的計(jì)數(shù)值,再由計(jì)數(shù)值求得初值,寫入初值寄存器(TL/T

13、H)。3開(kāi)放定時(shí)/計(jì)數(shù)器中斷(后面須編寫中斷服務(wù)程序)。4設(shè)置定時(shí)/計(jì)數(shù)器控制寄存器TCON的值,啟動(dòng)定時(shí)/計(jì)數(shù)器開(kāi)始工作。5等待定時(shí)/計(jì)數(shù)時(shí)間到,定時(shí)/計(jì)數(shù)到則執(zhí)行中斷服務(wù)程序;如用查詢處理則編寫查詢程序判斷溢出標(biāo)志,溢出標(biāo)志等于1,則進(jìn)行相應(yīng)處理。6.2.4 定時(shí)/計(jì)數(shù)器的初始化編程及應(yīng)用一定時(shí)/計(jì)例: T0運(yùn)行于定時(shí)器狀態(tài),時(shí)鐘振蕩周期為12MHz,要求定時(shí)100s。求不同工作方式時(shí)的定時(shí)初值C。解:fosc=12MHz T=1s X=100s/1s=(100)D= 64H方式0(13位方式): C=213- 64H=1F9CH方式1(16位方式): C=216- 64H=FF9CH方式

14、2、3(8位方式):C=28 - 64H=9CH注意:工作方式0的初值裝入方法:1F9CH=1 1111 1001 1100 B 可見(jiàn),TH0=0FCH,TL0=1CHTL0的低5位TH0的8位MOVTH0,#0FCHMOVTL0,#1CHT=12/ fosc例: T0運(yùn)行于定時(shí)器狀態(tài),時(shí)鐘振蕩周期為12MHz,二定時(shí)/計(jì)數(shù)器的應(yīng)用 通常利用定時(shí)/計(jì)數(shù)器來(lái)產(chǎn)生周期性的事件。例如:產(chǎn)生周期性波形。 思路:利用周期性的定時(shí),定時(shí)時(shí)間到則對(duì)輸出端進(jìn)行相應(yīng)的處理。 如:產(chǎn)生周期性的方波只須定時(shí)時(shí)間到對(duì)輸出端取反一次即可。二定時(shí)/計(jì)數(shù)器的應(yīng)用 通常利用定時(shí)/計(jì)數(shù)器來(lái)【例6-2】 設(shè)系統(tǒng)時(shí)鐘頻率為12MH

15、z,用定時(shí)/計(jì)數(shù)器T0編程實(shí)現(xiàn)從P1.0輸出周期為500s的方波。 分析:從P1.0輸出周期為500s的方波,只須P1.0每250s取反一次則可。 當(dāng)系統(tǒng)時(shí)鐘為12MHz,定時(shí)/計(jì)數(shù)器T0工作于方式2時(shí),最大的定時(shí)時(shí)間為256s,滿足250s的定時(shí)要求,方式控制字應(yīng)設(shè)定為0000 0010B(02H)。 系統(tǒng)時(shí)鐘為12MHz,定時(shí)250s,計(jì)數(shù)值N為250,初值X=256-250=6,則TH0=TL0=06H。500sT1T0【例6-2】 設(shè)系統(tǒng)時(shí)鐘頻率為12MHz,用定時(shí)/計(jì)數(shù)器T0匯編程序:ORG0000HLJMP MAINORG 000BH ;T0中斷處理程序CPL P1.0RETIOR

16、G 0100H ;主程序MAIN:MOV TMOD,#02H ;選擇T0的方式2,定時(shí)功能MOV TH0,#06HMOV TL0,#06HSETB EASETB ET0SETB TR0 ;啟動(dòng)T0SJMP $ENDC語(yǔ)言程序:# include /包含特殊功能寄存器庫(kù)sbit P1_0=P10;void main( void)TMOD=0 x02;TH0=0 x06;TL0=0 x06;EA=1;ET0=1;TR0=1;while(1); void time0_int(void) interrupt 1 /中斷服務(wù)程序 P1_0=!P1_0; (1)采用中斷處理方式的程序:匯編程序:C語(yǔ)言程序

17、:(1)采用中斷處理方式的程序:/*-REG51.HHeader file for generic 80C51 and 80C31 microcontroller.Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.All rights reserved.-*/#ifndef _REG51_H_#define _REG51_H_/* BYTE Register */sfr P0 = 0 x80;sfr P1 = 0 x90;sfr P2 = 0 xA0;sfr P3 = 0 xB0;sfr PSW = 0 xD

18、0;sfr ACC = 0 xE0;sfr B = 0 xF0;sfr SP = 0 x81;sfr DPL = 0 x82;sfr DPH = 0 x83;sfr PCON = 0 x87;sfr TCON = 0 x88;sfr TMOD = 0 x89;sfr TL0 = 0 x8A;/*-sfr TL1 = 0 x8B;sfr TH0 = 0 x8C;sfr TH1 = 0 x8D;sfr IE = 0 xA8;sfr IP = 0 xB8;sfr SCON = 0 x98;sfr SBUF = 0 x99;/* BIT Register */* PSW */sbit CY = 0 x

19、D7;sbit AC = 0 xD6;sbit F0 = 0 xD5;sbit RS1 = 0 xD4;sbit RS0 = 0 xD3;sbit OV = 0 xD2;sbit P = 0 xD0;/* TCON */sbit TF1 = 0 x8F;sbit TR1 = 0 x8E;sbit TF0 = 0 x8D;sbit TR0 = 0 x8C;sbit IE1 = 0 x8B;sbit IT1 = 0 x8A;sbit IE0 = 0 x89;sbit IT0 = 0 x88;/* IE */sbit EA = 0 xAF;sbit ES = 0 xAC;sbit ET1 = 0 x

20、AB;sbit EX1 = 0 xAA;sbit ET0 = 0 xA9;sbit EX0 = 0 xA8;/* IP */ sbit PS = 0 xBC;sbit PT1 = 0 xBB;sbit PX1 = 0 xBA;sbit PT0 = 0 xB9;sbit PX0 = 0 xB8;/* P3 */sbit RD = 0 xB7;sbit WR = 0 xB6;sbit T1 = 0 xB5;sbit T0 = 0 xB4;sbit INT1 = 0 xB3;sbit INT0 = 0 xB2;sbit TXD = 0 xB1;sbit RXD = 0 xB0;/* SCON */s

21、bit SM0 = 0 x9F;sbit SM1 = 0 x9E;sbit SM2 = 0 x9D;sbit REN = 0 x9C;sbit TB8 = 0 x9B;sbit RB8 = 0 x9A;sbit TI = 0 x99;sbit RI = 0 x98;#endifsfr TL1 = 0 x8B;/* IE */* (2)采用查詢方式處理的程序:C語(yǔ)言程序:# include /包含特殊功能寄存器庫(kù)sbit P1_0=P10;void main( )char i;TMOD=0 x02;TH0=0 x06;TL0=0 x06;TR0=1;for(;) if (TF0) TF0=0;P

22、1_0=! P1_0; /查詢計(jì)數(shù)溢出 匯編程序:ORG 0000HLJMP MAINORG 0100H ;主程序MAIN:MOV TMOD,#02HMOV TH0,#06HMOV TL0,#06HSETB TR0LOOP:JBC TF0,NEXT ;查詢T0計(jì)數(shù)溢出位SJMP LOOPNEXT:CPL P1.0SJMP LOOPSJMP $END(2)采用查詢方式處理的程序:C語(yǔ)言程序:匯編程序: 如果定時(shí)時(shí)間大于65536s,這時(shí)用一個(gè)定時(shí)/計(jì)數(shù)器直接處理不能實(shí)現(xiàn),這時(shí)可用:1、2個(gè)定時(shí)/計(jì)數(shù)器共同處理;2、1個(gè)定時(shí)/計(jì)數(shù)器配合軟件計(jì)數(shù)方式處理。 【例6-3】設(shè)系統(tǒng)時(shí)鐘頻率為12MHz,編

23、程實(shí)現(xiàn)從P1.1輸出周期為1s的方波。 如果定時(shí)時(shí)間大于65536s,這時(shí)用一個(gè)定時(shí) 這時(shí)應(yīng)產(chǎn)生500ms的周期定時(shí),定時(shí)到則對(duì)P1.1取反就可實(shí)現(xiàn)。由于定時(shí)時(shí)間較長(zhǎng),一個(gè)定時(shí)器不能直接實(shí)現(xiàn),可用定時(shí)/計(jì)數(shù)器T0產(chǎn)生周期性為10ms的定時(shí),然后用一個(gè)寄存器R2對(duì)10ms計(jì)數(shù)50次或T1對(duì)T0輸出的20ms計(jì)數(shù)脈沖計(jì)數(shù)25次實(shí)現(xiàn)。 系統(tǒng)時(shí)鐘12MHz,T0定時(shí)10ms,計(jì)數(shù)值N為10000,只能選方式1, (R2對(duì)10ms計(jì)數(shù)50次)方式控制字為00000001B(01H)。求初值X:X=65536-10000=55536 =11011000 11110000BTH0=11011000B=D8H

24、, TL0=11110000B=F0H。每20ms輸出1個(gè)下降沿計(jì)25次分析: 這時(shí)應(yīng)產(chǎn)生500ms的周期定時(shí),定時(shí)到則對(duì)P1.1取反就可(1)用寄存器R2作計(jì)數(shù)器軟件計(jì)數(shù),中斷處理方式。 匯編程序:ORG 0000HLJMP MAINORG 000BHLJMP INTT0ORG 0100HMAIN:MOV TMOD,#01HMOV TH0,#0D8HMOV TL0,#0F0HMOV R2,#00HSETB EASETB ET0SETB TR0SJMP $INTT0:MOV TH0,#0D8HMOV TL0,#0F0HINC R2CJNE R2,#32H,NEXTCPL P1.1MOV R2,

25、#00HNEXT:RETI ENDC語(yǔ)言程序:# include /包含特殊功能寄存器庫(kù)sbit P1_1=P11;char i;void main( )TMOD=0 x01;TH0=0 xD8;TL0=0 xF0;EA=1;ET0=1;i=0;TR0=1;while(1);void time0_int(void) interrupt 1 /中斷服務(wù)程序TH0=0 xD8;TL0=0 xF0;i+;if (i= =50) P1_1=! P1_1;i=0;(1)用寄存器R2作計(jì)數(shù)器軟件計(jì)數(shù),中斷處理方式。 (2) 用定時(shí)/計(jì)數(shù)器T1計(jì)數(shù)實(shí)現(xiàn): T1工作于計(jì)數(shù)方式時(shí),計(jì)數(shù)脈沖通過(guò)T1(P3.5)輸

26、入。 T0定時(shí)時(shí)間到對(duì)T1(P3.5)取反一次,則T1(P3.5)每20ms產(chǎn)生一個(gè)計(jì)數(shù)脈沖,那么定時(shí)500ms只須計(jì)數(shù)25次。 (2) 用定時(shí)/計(jì)數(shù)器T1計(jì)數(shù)實(shí)現(xiàn):設(shè)定時(shí)/計(jì)數(shù)器T1工作于方式2,計(jì)數(shù)模式,初值X=256-25=231= 11100111B=E7H,TH1=TL1=E7H。定時(shí)/計(jì)數(shù)器T0工作于方式1,定時(shí)模式,方式控制字為01100001B(61H)。 定時(shí)/計(jì)數(shù)器T0和T1都采用中斷方式工作。設(shè)定時(shí)/計(jì)數(shù)器T1工作于方式2,計(jì)數(shù)模式,匯編程序如下:ORG 0000HLJMP MAIN ORG 000BH;T0中斷入口MOV TH0,#0D8HMOV TL0,#0F0HCP

27、L P3.5RETI ORG 001BH;T1中斷入口CPL P1.1RETI ORG 0100H;主程序入口MAIN: MOV TMOD,#61HMOV TH0,#0D8HMOV TL0,#0F0HMOV TH1,#0E7HMOV TL1,#0E7HSETB EA;開(kāi)總中斷SETB ET0;允許T0中斷SETB ET1;允許T1中斷SETB TR0;qidong SETB TR1SJMP $ENDC語(yǔ)言程序如下:# include /包含特殊功能寄存器庫(kù)sbit P1_1=P11;sbit P3_5=P35;void main( )TMOD=0 x61;TH0=0 xD8;TL0=0 xF0

28、;TH1=0 xE7; TL1=0 xE7;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;while(1);void time0_int(void) interrupt 1 /T0中斷服務(wù)程序 TH0=0 xD8;TL0=0 xF0;P3_5=!P3_5;void time1_int(void) interrupt 3 /T1中斷服務(wù)程序 P1_1=! P1_1;匯編程序如下:C語(yǔ)言程序如下:長(zhǎng)定時(shí)方法:增加一個(gè)軟件計(jì)數(shù)器或一個(gè)硬件計(jì)數(shù)器。本題采用硬件方式:T0定時(shí),定時(shí)10ms; T1計(jì)數(shù)T0的定時(shí)跳變信號(hào)P1.0的負(fù)跳變次數(shù),計(jì)滿50個(gè)跳變?yōu)?秒。(查詢方法)START: MO

29、V TMOD,#61H MOV TL1,#0CDH MOV TH1,#0CDH CLR P1.0 SETB TR1;啟動(dòng)T1計(jì)數(shù)LOOP1: CPL P1.7LOOP2: MOV TL0 ,#78H MOV TH0,#0ECH SETB TR0;啟動(dòng)T0定時(shí)LOOP3: JBC TF0,LOOP4 SJMP LOOP3LOOP4: MOV TL0 ,#78H MOV TH0,#0ECH CPL P1.0 JBC TF1,LOOP1 SJMP LOOP2T=2s,X=5105個(gè)T,而最大只能65536個(gè)T,不能滿足要求,必須借助硬件計(jì)數(shù)器或軟件循環(huán)。 T0定時(shí)初值: (方式1)t=10ms,X=

30、5000D=1388H,C=216- 5000=EC78H T1計(jì)數(shù)初值: (方式2)X=50D,C=28- 50=CDHP1.7驅(qū)動(dòng)LED亮1秒滅1秒地閃爍,設(shè)時(shí)鐘頻率為6MHz。例:長(zhǎng)定時(shí)方法:增加一個(gè)軟件本題采用硬件方式:START: MO#includesbit P1_0=P10;sbit P1_7=P17;timer0 interrupt 1 using 1 /*T0中斷服務(wù)程序*/ P1_0=! P1_0;/*10ms定時(shí)時(shí)間到, P1.0反相*/ TH0=(65536-5000)/256;/*計(jì)數(shù)初值重裝載*/ TL0=(65536-5000)%256;timer1 interr

31、upt 3 using 2 /*T1中斷服務(wù)程序入口*/ P1_7=! P1_7; /*1s定時(shí)時(shí)間到, 燈改變狀態(tài)*/main( ) P1_7=0;/*置燈初始滅*/P1_0=1;/*保證第一次反相便開(kāi)始計(jì)數(shù)*/TMOD=0 x61;/*定時(shí)器0工作在方式1定時(shí),定時(shí)器1工作在方式2計(jì)數(shù) */TH0=(65536-5000)/256;/*預(yù)置計(jì)數(shù)初值*/TL0=(65536-5000)%256;TH1=256-50;TL1=256-50;IP=0 x08; /*置優(yōu)先級(jí)寄存器*/EA=1;/*CPU開(kāi)中斷*/ET0=1;/*開(kāi)T0中斷*/ET1=1;/*開(kāi)T1中斷*/TR0=1;/*啟動(dòng)T0

32、*/ TR1=1;/*啟動(dòng)T1*/for (;)reg51.h文件定義了所有8051的特殊功能寄存器及中斷利用C51程序?qū)崿F(xiàn)#includereg51.h文件定義了所6.3 串行接口6.3.1 通訊的基本概念一、并行通信和串行通信計(jì)算機(jī)與外界的通信有兩種基本方式:并行通信和串行通信。 并行數(shù)據(jù)傳送 同步 串行 異步(用于單片機(jī)中) 計(jì) 算 機(jī)01001001計(jì)算機(jī)01001001(或外設(shè))D0D1D2D3D4D5D6D7控制或選通狀態(tài)計(jì)算機(jī)計(jì)算機(jī)(或外設(shè))6.3 串行接口6.3.1 通訊的基本概念一、并行通信并行數(shù)據(jù)傳送串行數(shù)據(jù)傳送原理各數(shù)據(jù)位同時(shí)傳送數(shù)據(jù)位按位順序進(jìn)行優(yōu)點(diǎn)傳送速度快、效率高最

33、少只需一根傳輸線即可完成:成本低缺點(diǎn)數(shù)據(jù)位數(shù)傳輸線根數(shù):成本高速度慢應(yīng)用傳送距離30米,用于計(jì)算機(jī)內(nèi)部幾米幾千公里,用于計(jì)算機(jī)與外設(shè)之間根據(jù)信息傳送的方向,串行通信可以分為單工、半雙工和全雙工3種: (a) A B (b) (c) A B A B s s并行數(shù)據(jù)傳送串行數(shù)據(jù)傳送原理各數(shù)據(jù)位同時(shí)傳送數(shù)據(jù)位按位順序二、同步通信和異步通信串行通信按信息的格式又可分為異步通信和同步通信兩種方式。1、串行異步通信方式特點(diǎn):數(shù)據(jù)在線路上傳送時(shí)是以一個(gè)字符(字節(jié))為單位,未傳送時(shí)線路處于空閑狀態(tài),空閑線路約定為高電平“1”。傳送一個(gè)字符又稱為一幀信息,傳送時(shí)每一個(gè)字符前加一個(gè)低電平的起始位,然后是數(shù)據(jù)位,數(shù)

34、據(jù)位可以是58位,低位在前,高位在后,數(shù)據(jù)位后可以帶一個(gè)奇偶校驗(yàn)位,最后是停止位,停止位用高電平表示,它可以是1位、1位半或2位。格式如圖: 由于一次只傳送一個(gè)字符,因而一次傳送的位數(shù)比較少,對(duì)發(fā)送時(shí)鐘和接收時(shí)鐘的要求相對(duì)不高,線路簡(jiǎn)單,但傳送速度較慢。 第n+1個(gè)字符起始位奇偶校驗(yàn)位停止位下一個(gè)起始位D2D1D0D3D4D5D6D7數(shù)據(jù)位D0D10010/10/10/10/10/10/10/10/10/10/10/1D2第n個(gè)字符空閑“1”二、同步通信和異步通信串行通信按信息的格式又可分為異步通信和2、串行同步通信方式 串行同步通信方式的特點(diǎn)是數(shù)據(jù)在線路上傳送時(shí)以字符塊為單位,一次傳送多個(gè)字

35、符,傳送時(shí)須在前面加上一個(gè)或兩個(gè)同步字符,后面加上校驗(yàn)字符,格式如圖: 同步方式時(shí)一次連續(xù)傳送多個(gè)字符,傳送的位數(shù)多,對(duì)發(fā)送時(shí)鐘和接收時(shí)鐘要求較高,往往用同一個(gè)時(shí)鐘源控制,控制線路復(fù)雜,傳送速度快。三、波特率波特率是指串行通信中,單位時(shí)間傳送的二進(jìn)制位數(shù),單位為bps。 在異步通信中,傳輸速度往往又可用每秒傳送多少個(gè)字節(jié)來(lái)表示(Bps)。它與波特率的關(guān)系為:波特率(bps)=1個(gè)字符的二進(jìn)制位數(shù)字符/秒(Bps)例如:每秒傳送200個(gè)字符,每個(gè)字符1位起始位、8個(gè)數(shù)據(jù)位、1個(gè)校驗(yàn)位和1個(gè)停止位。則波特率為2200bps。 2、串行同步通信方式 串行同步通信方式的特點(diǎn)是數(shù)異步串行通信的信號(hào)形式:

36、1、遠(yuǎn)距離直接傳輸數(shù)字信號(hào),信號(hào)會(huì)發(fā)生畸變,因此要把數(shù)字信號(hào)轉(zhuǎn)變?yōu)槟M信號(hào)再進(jìn)行傳送??衫霉饫|、專用通信電纜或電話線。 方法:通常使用頻率調(diào)制法(頻帶傳送方式)。通常: “1”:1270Hz或2225Hz; “0”:1070Hz或2025Hz。異步串行通信的信號(hào)形式:1、遠(yuǎn)距離直接傳輸數(shù)字信號(hào),信號(hào)會(huì)發(fā)2、因通信時(shí)(有干擾)信號(hào)要衰減,所以常采用RS232電平負(fù)邏輯,拉開(kāi)“0”和“1”的電壓檔次,以免信息出錯(cuò):RS232負(fù)邏輯(EIA電平):“0”:+3V+25V;“1”: -3V -25V。最大傳輸信息的長(zhǎng)度為15米。TTL正邏輯:“0”: 0 2.4V;“1”: 3.6V+5V;高阻:2

37、.4V3.6V。TTL電平直接傳輸距離一般不超過(guò)1.5米。RS232負(fù)邏輯:“0”:+5V+15V;“1”: -5V -15V。最大傳輸信息的長(zhǎng)度為15米。RS-232C(電平轉(zhuǎn)換芯片為MAX232)RS-422RS-4852、因通信時(shí)(有干擾)信號(hào)要衰減,所以常采用RS232電平負(fù)6.3.2 MCS-51單片機(jī)串行口功能與結(jié)構(gòu)一功能 MCS-51單片機(jī)具有一個(gè)全雙工的串行異步通信接口,可以同時(shí)發(fā)送、接收數(shù)據(jù),發(fā)送、接收數(shù)據(jù)可通過(guò)查詢或中斷方式處理,使用十分靈活。 它有四種工作方式,分別是方式0、方式1、方式2和方式3。其中: 方式0:稱為同步移位寄存器方式,一般用于外接移位寄存器芯片擴(kuò)展I/

38、O接口。 方式1:8位的異步通信方式,通常用于雙機(jī)通信。 方式2和方式3:9位的異步通信方式,通常用于多機(jī)通信。6.3.2 MCS-51單片機(jī)串行口功能與結(jié)構(gòu)一功能 三串行口控制寄存器SCON(98H)其中:SM0、SM1:串行口工作方式選擇位。用于選擇四種工作方式: SM2:多機(jī)通信控制位。 REN:允許接收控制位, 當(dāng)REN=1,則允許接收; 當(dāng)REN=0,則禁止接收。TB8:發(fā)送的第9位數(shù)據(jù)位,可用作校驗(yàn)位和地址/數(shù)據(jù)標(biāo)識(shí)位。 RB8:接收的第9位數(shù)據(jù)位或停止位。TI:發(fā)送中斷標(biāo)志位,發(fā)送一幀結(jié)束,TI=1,必須用軟件清零。 RI:接收中斷標(biāo)志位,接收一幀結(jié)束,RI=1,必須用軟件清零。

39、 三串行口控制寄存器SCON(98H)其中:SM2:多機(jī)通信9位數(shù)據(jù)傳送時(shí):數(shù)據(jù)由8+1位組成,通常附加的一位(TB8/RB8)用于“奇偶校驗(yàn)”。 奇偶校驗(yàn)是檢驗(yàn)串行通信雙方傳輸?shù)臄?shù)據(jù)正確與否的一個(gè)措施,并不能保證通信數(shù)據(jù)的傳輸一定正確。 換言之:如果奇偶校驗(yàn)發(fā)生錯(cuò)誤,表明數(shù)據(jù)傳輸一定出錯(cuò)了;如果奇偶校驗(yàn)沒(méi)有出錯(cuò),絕不等于數(shù)據(jù)傳輸完全正確。奇校驗(yàn):8位有效數(shù)據(jù)連同1位附加位中, 二進(jìn)制“1”的個(gè)數(shù)為奇數(shù)。 偶校驗(yàn):8位有效數(shù)據(jù)連同1位附加位中, 二進(jìn)制“1”的個(gè)數(shù)為偶數(shù)。9位數(shù)據(jù)傳送時(shí):奇偶校驗(yàn)是檢驗(yàn)串行通信雙方傳輸?shù)臄?shù)據(jù)正確與約定接收采用奇校驗(yàn): 若接收到的9位數(shù)據(jù)中“1”的個(gè)數(shù)為奇數(shù), 則

40、表明接收正確,取出8位有效數(shù)據(jù)即可; 若接收到的9位數(shù)據(jù)中“1”的個(gè)數(shù)為偶數(shù), 則表明接收出錯(cuò)!應(yīng)當(dāng)進(jìn)行出錯(cuò)處理。約定發(fā)送采用奇校驗(yàn): 若發(fā)送的8位有效數(shù)據(jù)中“1”的個(gè)數(shù)為偶數(shù), 則要人為添加一個(gè)附加位“1”一起發(fā)送; 若發(fā)送的8位有效數(shù)據(jù)中“1”的個(gè)數(shù)為奇數(shù), 則要人為添加一個(gè)附加位“0”一起發(fā)送。采用偶校驗(yàn)時(shí),處理方法與奇校驗(yàn)相反。 約定接收采用奇校驗(yàn):約定發(fā)送采用奇校驗(yàn):采用偶校驗(yàn)時(shí),處程序狀態(tài)字寄存器PSW中有一個(gè)奇偶狀態(tài)位 P。PSW.7PSW.0 P(PSW.0):奇偶狀態(tài)位。 P=1 表示目前累加器中 “1”的個(gè)數(shù)為奇數(shù); P=0 表示目前累加器中 “1”的個(gè)數(shù)為偶數(shù);CPU隨時(shí)

41、監(jiān)視著Acc的“1”的個(gè)數(shù)并自動(dòng)反映在 位P。奇偶校驗(yàn)用法:CYACF0RS0OVPRS1程序狀態(tài)字寄存器PSW中有一個(gè)奇偶狀態(tài)位 P。PSW.7PS MCS-51單片機(jī)串行口由發(fā)送數(shù)據(jù)寄存器、發(fā)送控制器、輸出控制門、接收數(shù)據(jù)寄存器、接收控制器、輸入移位寄存器等組成。 從用戶使用的角度,它由三個(gè)SFR組成:發(fā)送數(shù)據(jù)寄存器和接收數(shù)據(jù)寄存器合起用一個(gè)特殊功能寄存器SBUF(串行口數(shù)據(jù)寄存器),串行口控制寄存器SCON和電源控制寄存器PCON。 SBUF(發(fā))SBUF(收) 發(fā)送控制器 TI 接收控制器 RI移位寄存器波特率發(fā)生器T11(門)移位寄存器RXDTXD去申請(qǐng)中斷引腳引腳A累加器二結(jié)構(gòu) M

42、CS-51單片機(jī)串行口由發(fā)送數(shù)據(jù)寄存器、發(fā)送四電源控制寄存器PCON(87H) 當(dāng)SMOD位為1,則串行口方式1、方式2、方式3的波特率加倍。 四電源控制寄存器PCON(87H) 當(dāng)SMOD6.3.3 串行口的工作方式一方式0:同步移位寄存器方式用于擴(kuò)展并行I/O接口。1. 一幀8位,無(wú)起始位和停止位。2. RXD:數(shù)據(jù)輸入/輸出端。 TXD:同步脈沖輸出端,每個(gè)脈沖對(duì)應(yīng)一個(gè)數(shù)據(jù)位。3. 波特率B=fosc/12如:fosc=12MHz,B=1Mbps,每位數(shù)據(jù)占1s。4. 發(fā)送過(guò)程:寫入SBUF,啟動(dòng)發(fā)送, 一幀發(fā)送結(jié)束,TI=1。 接收過(guò)程:REN=1且RI=0,啟動(dòng)接收, 一幀接收完畢,

43、RI=1。6.3.3 串行口的工作方式一方式0:同步移位寄存器方 發(fā)送時(shí)序?qū)懭隨BUFRXD輸出TXDTID0D1D2D3D4D5D6D7寫REN=1RI=0RXD輸入RI 接收時(shí)序(a)(b)方式0時(shí)序圖: 發(fā)送時(shí)序?qū)懭隦XD輸出TXDTID0D1D2D3D4D5D 對(duì)于串行輸出,采用“低電平送數(shù)據(jù),上升沿鎖存”方式,即在移位脈沖上升沿串行數(shù)據(jù)穩(wěn)定出現(xiàn)在RXD引腳,外部“串入并出”芯片可利用TXD引腳移位脈沖的上升沿鎖存數(shù)據(jù); 對(duì)于串行輸出,采用“低電平送數(shù)據(jù),上升二方式1: 8位數(shù)據(jù)異步通訊方式1. 一幀10位:8位數(shù)據(jù)位,1個(gè)起始位(0),1個(gè)停止位(1)。 2. RXD:接收數(shù)據(jù)端。

44、TXD:發(fā)送數(shù)據(jù)端。3.波特率:用T1作為波特率發(fā)生器, B=(2SMOD/32)T1溢出率。4.發(fā)送:寫入SBUF,同時(shí)啟動(dòng)發(fā)送,一幀發(fā)送結(jié)束,TI=1。 接收:REN=1,允許接收。 接收完一幀,若RI=0且停止位為1 (或SM2=0),將接 收數(shù)據(jù)裝入SBUF,停止位裝入RB8,并使RI=1; 否則丟棄接收數(shù)據(jù),不置位RI。二方式1: 8位數(shù)據(jù)異步通訊方式1. 一幀10位:8位數(shù)據(jù) 當(dāng)REN=1,CPU開(kāi)始采樣RXD引腳負(fù)跳變信號(hào),若出現(xiàn)負(fù)跳變,才進(jìn)入數(shù)據(jù)接收狀態(tài),先檢測(cè)起始位,若第一位為0,繼續(xù)接收其余位;否則,停止接收,重新采樣負(fù)跳變。 數(shù)據(jù)采樣速率為波特率16倍頻,在數(shù)據(jù)位中間,用

45、第7、8、9個(gè)脈沖采樣3次數(shù)據(jù)位,并3中取2保留采樣值。 當(dāng)REN=1,CPU開(kāi)始采樣RXD引腳負(fù)跳變信號(hào),若出寫入SBUF采樣(a) 發(fā)送時(shí)序圖TXD數(shù)據(jù)輸出TID0D1D2D3D4D5D6D7停止位起始位RXD輸入數(shù)據(jù)(b) 接收時(shí)序圖D0D1D2D3D4D5D6D7停止位起始位RI檢測(cè)負(fù)跳變方式1時(shí)序圖:寫入采樣(a) 發(fā)送時(shí)序圖TXDTID0D1D2D3D4D5三方式2和方式3: 9位數(shù)據(jù)異步通訊方式1.一幀為11位:9位數(shù)據(jù)位,1個(gè)起始位(0),1個(gè)停止位(1)。 第9位數(shù)據(jù)位在TB8/RB8中,常用作校驗(yàn)位和多機(jī)通訊 標(biāo)識(shí)位。2.RXD:接收數(shù)據(jù)端, TXD:發(fā)送數(shù)據(jù)端。3.波特率

46、:方式2:B=(2SMOD/64)fosc 。 方式3:B=(2SMOD/32)T1溢出率 。4.發(fā)送:先裝入TB8,寫入SBUF并啟動(dòng)發(fā)送,發(fā)送結(jié)束,TI=1。 接收:REN=1,允許接收。 接收完一幀,若RI=0且第9位為1 (或SM2=0),將接收數(shù)據(jù)裝入接收SBUF,第9位裝入RB8,使RI=1;否則丟棄接收數(shù)據(jù),不置位RI。三方式2和方式3: 9位數(shù)據(jù)異步通訊方式1.一幀為11位:(a) 發(fā)送時(shí)序圖寫入SBUFTXD輸出TIRXD輸入(b) 接收時(shí)序圖RID0D1D2D3D4D5D6TB8停止位起始位D7D0D1D2D3D4D5D6RB8停止位起始位D7檢測(cè)負(fù)跳變方式2、3時(shí)序圖:(

47、a) 發(fā)送時(shí)序圖寫入TXD輸出TIRXD輸入(b) 接6.3.4 串行口的編程及應(yīng)用一串行口的初始化編程 1串行口控制寄存器SCON位的確定。 根據(jù)工作方式確定SM0、SM1位;對(duì)于方式2和方式3還要確定SM2位;如果是接收端,則置允許接收位REN為1;如果方式2和方式3發(fā)送數(shù)據(jù),則應(yīng)將發(fā)送數(shù)據(jù)的第9位寫入TB8中。 2設(shè)置波特率。 對(duì)于方式0,不需要對(duì)波特率進(jìn)行設(shè)置。對(duì)于方式2,設(shè)置波特率僅須對(duì)PCON中的SMOD位進(jìn)行設(shè)置。6.3.4 串行口的編程及應(yīng)用一串行口的初始化編程 對(duì)于方式1和方式3,設(shè)置波特率不僅須對(duì)PCON中的SMOD位進(jìn)行設(shè)置,還要對(duì)定時(shí)/計(jì)數(shù)器T1進(jìn)行設(shè)置. 定時(shí)/計(jì)數(shù)器

48、T1一般工作于方式2-8位可重置方式. 初值可由下面公式求得: 由于: 波特率=2SMOD(T1的溢出率)/32 則: T1的溢出率=波特率32/2SMOD 而T1工作于方式2的溢出率可由下式表示: T1的溢出率=fosc/12(256-初值)所以:T1的初值=256 - fosc2SMOD /(12波特率32) 對(duì)于方式1和方式3,設(shè)置波特率不僅須對(duì)PCON中的S小結(jié):計(jì)算波特率方式0為固定波特率:B=fosc/12方式2可選兩種波特率: B=(2SMOD /64)fosc 方式1、3為可變波特率,用T1作波特率發(fā)生器。B=(2SMOD/32)T1溢出率T1為方式2的時(shí)間常數(shù): X = 28

49、- t /T 溢出時(shí)間: t= (28-X)T = (28-X)12/ foscT1溢出率=1/t= fosc / 12(2n-X) 波特率B=(2SMOD /32)fosc / 12(28-X) 串行口方式1、3,根據(jù)波特率選擇T1工作方式,計(jì)算時(shí)間常數(shù)。T1選方式2: TH1=X= 28-fosc/122SMOD/(32B)T1選方式1用于低波特率,需考慮T1重裝時(shí)間常數(shù)時(shí)間。也可選工作方式3。小結(jié):計(jì)算波特率方式0為固定波特率:B=fosc/124種方式比較:方式波 特 率傳 送 位 數(shù)發(fā)送端接收端用 途01/12 fosc(固定不變)8(數(shù)據(jù))RXDRXD接移位寄存器,擴(kuò)充并口12SM

50、OD/32 T1溢出率10(起始位、8位數(shù)據(jù)位、 停止位)TXDRXD單機(jī)通訊22SMOD/64 fosc11(第9位為1:地址; 為0:數(shù)據(jù))TXDRXD多機(jī)通訊32SMOD/32 T1溢出率11位(同方式2)TXDRXD多機(jī)通訊4種方式比較:方式波 特 率傳 送 位 數(shù)發(fā)送端接二串行口的應(yīng)用通常用于三種情況:利用方式0擴(kuò)展并行I/O口;利用方式1實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)的雙機(jī)通信;利用方式2或方式3實(shí)現(xiàn)多機(jī)通信。 1利用方式0擴(kuò)展并行I/O口 MCS-51單片機(jī)的串行口在方式0時(shí),當(dāng)外接一個(gè)串入并出的移位寄存器,就可以擴(kuò)展并行輸出口,當(dāng)外接一個(gè)并入串出的移位寄存器時(shí),就可以擴(kuò)展并行輸入口。二串行口的應(yīng)用

51、通常用于三種情況:1利用方式0擴(kuò)展并行I/【例6-4】用8051單片機(jī)的串行口外接串入并出的芯片CD4094擴(kuò)展并行輸出口控制一組發(fā)光二極管,使發(fā)光二極管從左至右延時(shí)輪流顯示。 8051 RXD TXD P1.0 DATA CLK STBCD4094Q7Q0STB=0:數(shù)據(jù)串入1:數(shù)據(jù)并出CD4094是8位的串入并出的芯片,帶有一個(gè)控制端STB【例6-4】用8051單片機(jī)的串行口外接串入并出的芯片CD4 分析: 當(dāng)STB=0時(shí),打開(kāi)串行輸入控制門,在時(shí)鐘信號(hào)CLK的控制下,數(shù)據(jù)從串行輸入端DATA一個(gè)時(shí)鐘周期一位依次輸入;當(dāng)STB=1,打開(kāi)并行輸出控制門,CD4094中的8位數(shù)據(jù)并行輸出。 使

52、用時(shí),8051串行口工作于方式0,8051的TXD接CD4094的CLK,RXD接DATA,STB用P1.0控制,8位并行輸出端接8個(gè)發(fā)光二極管。 8051 RXD TXD P1.0 DATA CLK STBCD4094Q7Q0STB=0:數(shù)據(jù)串入1:數(shù)據(jù)并出 分析: 8051 RXD TXD P1.0 DATA C設(shè)串行口采用查詢方式,顯示的延時(shí)依靠調(diào)用延時(shí)子程序來(lái)實(shí)現(xiàn)。程序如下:匯編程序:ORG 0000HLJMP MAINORG 0100HMAIN:MOV SCON,#00HMOV A,#01HCLR P1.0START: MOV SBUF,ALOOP:JNB TI,LOOPSETB P

53、1.0ACALL DELAYCLR TIRL ACLR P1.0SJMP STARTDELAY: MOV R7,#05HLOOP2: MOV R6,#0FFHLOOP1: DJNZ R6,LOOP1DJNZ R7,LOOP2RETENDC語(yǔ)言程序:#include /包含特殊功能寄存器庫(kù)sbit P1_0=P10;void main( )unsigned char i,j;SCON=0 x00;j=0 x01;for (; ;)P1_0=0;SBUF=j;while (!TI) ;P1_0=1; TI=0;for (i=0;i=254;i+) ;j=j*2;if (j= =0 x00) j=0

54、 x01;設(shè)置方式0,并使TI=0移位之前對(duì)并行輸出端鎖存啟動(dòng)數(shù)據(jù)傳輸查詢數(shù)據(jù)移位傳輸是否結(jié)束移位結(jié)束,并行輸出到引腳延遲讓燈亮一會(huì)準(zhǔn)備端口數(shù)據(jù):讓下一個(gè)燈亮再移位之前對(duì)并行輸出端鎖存設(shè)置方式0,并使TI=0移位之前對(duì)并行輸出端鎖存啟動(dòng)數(shù)據(jù)傳輸查詢數(shù)據(jù)移位傳輸是否結(jié)束移位結(jié)束,并行輸出到引腳延遲讓燈亮一會(huì)準(zhǔn)備端口數(shù)據(jù):讓下一個(gè)燈亮8個(gè)燈依次亮一個(gè)循環(huán)后,再來(lái)一次循環(huán)設(shè)串行口采用查詢方式,顯示的延時(shí)依靠調(diào)用延時(shí)子程序來(lái)實(shí)現(xiàn)。程【例6-5】 用8051單片機(jī)的串行口外接并入串出的芯片CD4014擴(kuò)展并行輸入口,輸入一組開(kāi)關(guān)的信息。 CD4014是一塊8位的并入串出的芯片,帶有一個(gè)控制端P/S,當(dāng)P

55、/S=1時(shí),8位并行數(shù)據(jù)置入到內(nèi)部的寄存器;當(dāng)P/S=0時(shí),在時(shí)鐘信號(hào)CLK的控制下,內(nèi)部寄存器的內(nèi)容按低位在前從QB串行輸出端依次輸出;使用時(shí),8051串行口工作于方式0,8051的TXD接CD4094的CLK,RXD接QB,P/S用P1.0控制,另外,用P1.1控制8并行數(shù)據(jù)的置入。 8051 RXD TXD P1.0QB CLK P/S P1.1K0K7 KCD4014P/S=1:數(shù)據(jù)并入0:數(shù)據(jù)串出【例6-5】 用8051單片機(jī)的串行口外接并入串出的芯片CD 串行口方式0數(shù)據(jù)的接收,用SCON寄存器中的REN位來(lái)控制,采用查詢RI的方式來(lái)判斷數(shù)據(jù)是否輸入。程序如下:匯編程序: ORG

56、0000H LJMP MAIN ORG 0100HMAIN: SETB P1.1;輸入前輸出1START:JB P1.1,START SETB P1.0 CLR P1.0 MOV SCON,#10HLOOP:JNB RI,LOOP CLR RI MOV A,SBUF C語(yǔ)言程序:#include /包含特殊功能寄存器庫(kù)sbit P1_0=P10;sbit P1_1=P11;void main( )unsigned char i;P1_1=1;輸入前輸出1while (P1_1= =1) ;P1_0=1;P1_0=0;SCON=0 x10;while (!RI) ;RI=0;i=SBUF;查詢K

57、閉合?K閉合,加載并行數(shù)據(jù)加載完畢,開(kāi)始移位輸入RI=0,REN=1允許接收,方式0接收數(shù)據(jù)送ACC查詢是否接收完畢接收完畢,先RI=0,為下一次接收作準(zhǔn)備K沒(méi)閉合,則等待加載并行數(shù)據(jù)開(kāi)始移位RI=0,REN=1允許接收RI != 1說(shuō)明沒(méi)有接收完接收數(shù)據(jù)送ACCRI=0,為下一次接收作準(zhǔn)備 串行口方式0數(shù)據(jù)的接收,用SCON寄存器中的REN位應(yīng)用串行口方式0:串行口通過(guò)接口74LS164實(shí)現(xiàn):串行并行的數(shù)據(jù)轉(zhuǎn)換 (顯示器接口); 通過(guò)接口74LS165實(shí)現(xiàn):并行串行的數(shù)據(jù)轉(zhuǎn)換。 用于接移位寄存器擴(kuò)充并口。應(yīng)用串行口方式0:串行口通過(guò)接口74LS164實(shí)現(xiàn):串行并例:顯示80C51片內(nèi)RAM中

58、以30H為首地址的8位字形數(shù)的程序:靜態(tài)顯示電路“0”例:顯示80C51片內(nèi)RAM中以30H為首地址的8位靜態(tài)顯示DIR:PUSHACC;保護(hù)現(xiàn)場(chǎng) PUSHDPH PUSHDPL MOVR2,#08H;顯示8個(gè)數(shù) MOVR0,#30H;顯示緩沖區(qū)地址送入R0DL0:MOVA,R0;取要顯示的數(shù)作查表偏移量 MOVDPTR,#TAB;指向字形碼表首 MOVCA,A+DPTR;查表得字形碼 MOVSBUF,A;發(fā)送顯示DL1:JNBTI,DL1;等待發(fā)送完一楨數(shù)據(jù) CLRTI;清標(biāo)志,準(zhǔn)備繼續(xù)發(fā)送 INCR0;更新顯示單元 DJNZR2,DL0;重復(fù)顯示所有數(shù)碼管 POPDPL;恢復(fù)現(xiàn)場(chǎng) POPD

59、PH POPACC RETTAB:DB0C0H,0F9H,0A4H,0B0H,99H ;0,1,2,3,4 DB92H,82H,0F8H,80H,90H,88H ;5,6,7,8,9,A DB83H,0C6H,0A1H,86H,8EH ;B,C,D,E,F(xiàn)共陽(yáng)極程序:DIR:PUSHACC;保護(hù)現(xiàn)場(chǎng)共陽(yáng)極程序:例:通過(guò)接口74LS165實(shí)現(xiàn): 并行串行的數(shù)據(jù)轉(zhuǎn)換。例:通過(guò)接口74LS165實(shí)現(xiàn): 并行串行程序:MOVR7,#20;送入20個(gè)字節(jié)MOVR0,#20H;送首地址為20HSETBF0;置1,F(xiàn)0=1(設(shè)置讀入字節(jié)奇偶數(shù)標(biāo)志)RCV0:CLRP1.0;P1.0=0(并行置入數(shù)據(jù))SET

60、BP1.0;P1.0=1(允許串行移位)RCV1:MOVSCON,#10H;允許方式0接收J(rèn)NBRI,;等待RI=1,順序執(zhí)行CLRRI;RI=0為下一幀數(shù)據(jù)的接收準(zhǔn)備MOVA,SBUF;取數(shù)MOVR0,AINCR0CPLF0;取反,F(xiàn)0=0JBF0,RCV2;F0=1則轉(zhuǎn)移,F(xiàn)0=0順序執(zhí)行DECR7 判是否接收完偶數(shù)幀,接收完則重新并行置入SJMPRCV1;否則再接收一幀RCV2:DJNZR7,RCV0;R71=0?0跳(判是否已讀入預(yù)定字節(jié)數(shù)) .;對(duì)讀入數(shù)據(jù)進(jìn)行處理程序:MOVR7,#20;送入20個(gè)字節(jié)2)利用方式1實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)的雙機(jī)通信 要實(shí)現(xiàn)甲與乙兩臺(tái)單片機(jī)點(diǎn)對(duì)點(diǎn)的雙機(jī)通信,線路只

溫馨提示

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