單片機(jī)知識(shí)點(diǎn)_第1頁(yè)
單片機(jī)知識(shí)點(diǎn)_第2頁(yè)
單片機(jī)知識(shí)點(diǎn)_第3頁(yè)
單片機(jī)知識(shí)點(diǎn)_第4頁(yè)
單片機(jī)知識(shí)點(diǎn)_第5頁(yè)
已閱讀5頁(yè),還剩23頁(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、 28 單片機(jī)知識(shí)點(diǎn) 周冰微處理器:是小型計(jì)算機(jī)或微型計(jì)算機(jī)的控制和處理部分。又稱(chēng)中央處理單元CPU(Central Processing Unit)。微型計(jì)算機(jī)(Microcomputer,簡(jiǎn)稱(chēng)微機(jī) )是具有完整運(yùn)算及控制功能的計(jì)算機(jī)。包括:微處理器(CPU)、存儲(chǔ)器、接口適配器(輸入輸出接口電路)、輸入/輸出(I/O)設(shè)備。單片機(jī)SCM(Single-Chip Microcomputer)是將微處理器、一定容量RAM和ROM以及I/O口、定時(shí)器等電路集成在一塊芯片上,構(gòu)成單片微型計(jì)算機(jī)。也稱(chēng)為微控制器 MCU(MicroController Unit)【微處理器、RAM 、ROM、I/O口

2、、定時(shí)器】預(yù)備知識(shí)數(shù)字電路中只有兩種電平:高和低(本課程中)定義單片機(jī)為T(mén)TL電平:高 +5V 低 0VRS232電平:計(jì)算機(jī)的串口高 -12V 低+12V所以計(jì)算機(jī)與單片機(jī)之間通訊時(shí)需要加電平轉(zhuǎn)換芯片max232(實(shí)驗(yàn)板上左下角)。MCS-51單片機(jī)硬件結(jié)構(gòu)及引腳1、 MCS-51單片機(jī)的內(nèi)部結(jié)構(gòu) MCS-51單片機(jī)的組成: CPU(進(jìn)行運(yùn)算、控制)、RAM(數(shù)據(jù)存儲(chǔ)器)、ROM(程序存儲(chǔ)器)、I/O口(串口、并口)、內(nèi)部總線和中斷系統(tǒng)等。組成框圖如右:總線(BUS)是計(jì)算機(jī)各部件之間傳送信息的公共通道。微機(jī)中有內(nèi)部總線和外部總線兩類(lèi)。內(nèi)部總線是CPU內(nèi)部之間的連線。外部總線是指CPU與其它

3、部件之間的連線。 外部總線有三種: 數(shù)據(jù)總線DB(Data Bus), 地址總線 AB(Address Bus)和控制總線 CBControl Bus)。CPU:由運(yùn)算和控制邏輯組成,同時(shí)還包括中斷系統(tǒng)和部分外部特殊功能寄存器;RAM:用以存放可以讀寫(xiě)的數(shù)據(jù),如運(yùn)算的中間結(jié)果、最終結(jié)果以及欲顯示的數(shù)據(jù);ROM:用以存放程序、一些原始數(shù)據(jù)和表格;I/O口:四個(gè)8位并行I/O口,既可用作輸入,也可用作輸出;T/C:兩個(gè)定時(shí)/記數(shù)器,既可以工作在定時(shí)模式,也可以工作在記數(shù)模式;單片機(jī)引腳的功能:8051單片機(jī)有40個(gè)引腳,分為端口線、電源線和控制線三類(lèi)。1電源線 GND:接地引腳。 VCC:正電源引

4、腳。接5V電源。2端口線 P0P3口:4×8=32條。(1)P0口( P0.0P0.7 ) 8位雙向三態(tài)I/O口,可作為外部擴(kuò)展時(shí)的數(shù)據(jù)總線/低8位地址總線的分時(shí)復(fù)用口。又可作為通用I/O口,每個(gè)引腳可驅(qū)動(dòng)8個(gè)TTL負(fù)載。對(duì)EPROM型芯片(如8751)進(jìn)行編程和校驗(yàn)時(shí),P0口用于輸入/輸出數(shù)據(jù)。(2)P1口(P1.0P1.7) 8位準(zhǔn)雙向I/O口,內(nèi)部具有上拉電阻,可作為通用I/O口。每個(gè)引腳可驅(qū)動(dòng)4個(gè)TTL負(fù)載。 (3)P2口(P2.0P2.7) 8位準(zhǔn)雙向I/O口,內(nèi)部具有上拉電阻,可作為外部擴(kuò)展時(shí)的高8位地址總線。又可作為通用I/O口,每個(gè)引腳可驅(qū)動(dòng)4個(gè)TTL負(fù)載。對(duì)EPRO

5、M型芯片(如8751)進(jìn)行編程和校驗(yàn)時(shí),用來(lái)接收高8位地址。 (4)P3口( P3.0P3.7 ) 8位準(zhǔn)雙向I/O口,內(nèi)部具有上拉電阻。它是雙功能復(fù)用口,作為通用I/O口時(shí),功能與P1口相同,常用第二功能。每個(gè)引腳可驅(qū)動(dòng)4個(gè)TTL負(fù)載。作為第二功能使用時(shí),各位的作用如下頁(yè)表所示。P3第二功能各引腳功能定義:P3.0:RXD串行口輸入 P3.1:TXD串行口輸出 P3.2:INT0外部中斷0輸入P3.3:INT1外部中斷1輸入P3.4:T0定時(shí)器0外部輸入 P3.5:T1定時(shí)器1外部輸入P3.6:WR外部寫(xiě)控制 P3.7:RD外部讀控制2時(shí)鐘引腳 (1)XTAL1(19腳):如果采用外接晶體振

6、蕩器時(shí),此引腳應(yīng)接地。(2)XTAL2(18腳):接外部晶體的另一端。3控制線 提供控制信號(hào),有的引腳還具有復(fù)用功能。 (1) RST/VPD(9腳):復(fù)位與備用電源。 (2) ALE/PROG*(30腳):第一功能ALE為地址鎖存允許,可驅(qū)動(dòng)8個(gè)LS型TTL負(fù)載。 PROG*為本引腳的第二功能。為編程脈沖輸入端。(3) PSEN* (29腳):讀外部程序存儲(chǔ)器的選通信號(hào)。可以驅(qū)動(dòng)8個(gè)LS型TTL負(fù)載。 (4) EA*/VPP (Enable Address/Voltage Pulse of Programing,31腳) EA*為內(nèi)外程序存儲(chǔ)器選擇控制端。 EA*=1,訪問(wèn)片內(nèi)程序存儲(chǔ)器,但

7、在PC(程序計(jì)數(shù)器)值超過(guò)0FFFH(對(duì)于8051、8751)時(shí),即超出片內(nèi)程序存儲(chǔ)器的4K字節(jié)地址范圍時(shí),將自動(dòng)轉(zhuǎn)向執(zhí)行外部程序存儲(chǔ)器內(nèi)的程序。 EA*=0,單片機(jī)則只訪問(wèn)外部程序存儲(chǔ)器。VPP為本引腳的第二功能。對(duì)89S52,加在VPP腳的編程電壓為+12V或+5V。單片機(jī)主要掌握以下幾點(diǎn)最小系統(tǒng)能夠運(yùn)行起來(lái)的必要條件。1.電源 2.晶振 3.復(fù)位電路對(duì)單片機(jī)任意IO口的隨意操作1.輸出控制電平高低 2.輸入檢測(cè)電平高低。定時(shí)器:重點(diǎn)掌握最常用的方式2 中斷:外部中斷、定時(shí)器中斷、串口中斷串口通信:?jiǎn)纹瑱C(jī)之間、單片機(jī)與計(jì)算機(jī)基本數(shù)據(jù)類(lèi)型sfr:特殊功能寄存器聲明sfr16:sfr的16位數(shù)

8、據(jù)聲明sbit:特殊功能位聲明bit:位變量聲明例:sfr SCON = 0X98; sfr16 T2 = 0xCC; sbit OV = PSW2;常用有:reg51.h reg52.h(定義特殊功能寄存器和位寄存器);math.h (定義常用數(shù)學(xué)運(yùn)算);28程序(一)點(diǎn)亮第一個(gè)發(fā)光二極管#include<reg52.h>void main()P1=0xfe;while(1);程序(二)讓第一個(gè)發(fā)光二極管閃爍#include<reg52.h>sbit led1=P10;void main()unsigned int i;while(1) i=50000; led1=0

9、; while(i-); i=50000; led1=1; while(i-);程序(三)/ 第一個(gè)發(fā)光二極管以間隔2000ms閃爍#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit led1=P10;void delay(uint z) /延時(shí)函數(shù)uint x,y;for(x=z;x>0;x-) for(y=110;y>0;y-);void main()while(1) led1=0; delay(2000); led1=1; delay(2000);程序(四)/8 個(gè)發(fā)光

10、管由上至下間隔1s流動(dòng)/每個(gè)管亮500ms,滅500ms,亮?xí)r蜂鳴器響/滅時(shí)關(guān)掉蜂鳴器,一直重復(fù)下去#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charsbit beep=P23;void delay(uint z)uint x,y;for(x=z;x>0;x-) for(y=110;y>0;y-);void main()uchar a;a=0xfe;while(1) P1=a; beep=0; delay(500); P1=0xff;

11、 beep=1; delay(500); a=_crol_(a,1);程序(五)/8 個(gè)發(fā)光管來(lái)回流動(dòng)/每個(gè)管亮100ms,流動(dòng)時(shí)讓蜂鳴器發(fā)聲#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charsbit beep=P23;void delay(uint z)uint x,y;for(x=z;x>0;x-) for(y=110;y>0;y-);void main()uchar a,i;while(1) a=0xfe; for(i=0;i&

12、lt;8;i+) P1=a; beep=0; delay(50); beep=1; delay(50); a=_crol_(a,1); a=0x7f; for(i=0;i<8;i+) P1=a; beep=0; delay(50); beep=1; delay(50); a=_cror_(a,1); 運(yùn)算器 對(duì)操作數(shù)進(jìn)行算術(shù)、邏輯運(yùn)算和位操作。1算術(shù)邏輯運(yùn)算單元ALU 2累加器A 3. 寄存器B 4. 程序狀態(tài)寄存器PSW控制器 1程序計(jì)數(shù)器PC(Program Counter)2指令寄存器IR、指令譯碼器及控制邏輯電路存儲(chǔ)器空間可劃分為5類(lèi):1.程序存儲(chǔ)器 2.內(nèi)部數(shù)據(jù)存儲(chǔ)器 3.特殊

13、功能寄存器(SFR-Special Function Register)4.位地址空間 5.數(shù)據(jù)寄存器程序存儲(chǔ)器ROM 存放應(yīng)用程序和表格之類(lèi)的固定常數(shù)。分為片內(nèi)和片外兩部分,AT89S528K的可編程Flash存儲(chǔ)器,地址0000H-1FFFH,外部擴(kuò)展到64KB,由EA*引腳上所接的電平確定。程序存儲(chǔ)器中的0000H地址是系統(tǒng)程序的啟動(dòng)地址,單片機(jī)復(fù)位后PC的內(nèi)容為0000H6個(gè)單元具有特殊用途 表2-1 6種中斷源的中斷入口地址 中斷標(biāo)志位外中斷0(INT0*) 0003H IE0定時(shí)器0(T0)中斷 000BH TF0外中斷1(INT1*) 0013H IE1定時(shí)器1(T1)中斷 00

14、1BH TF1串行口中斷 0023H TI(發(fā)送)/RI(接收) 定時(shí)器2(T2)中斷 002BH TF2(T2溢出)/EXF2(T2EX)特殊功能寄存器(SFR)CPU對(duì)各種功能部件的控制采用特殊功能寄存器集中控制方式,共32個(gè)。1程序計(jì)數(shù)器PC(Program Counter)存放下一條要執(zhí)行的指令在程序存儲(chǔ)器中的地址。基本工作方式有以下幾種: (1)程序計(jì)數(shù)器自動(dòng)加1 (2)執(zhí)行有條件或無(wú)條件轉(zhuǎn)移指令時(shí),程序計(jì)數(shù)器將被置入新的數(shù)值,從而使程序的流向發(fā)生變化。(3)在執(zhí)行調(diào)用子程序調(diào)用或中斷調(diào)用,完成下列操作: PC的現(xiàn)行值保護(hù) 將子程序的入口地址或中斷向量的地址送入PC。2累加器A 使用

15、最頻繁的寄存器,也可寫(xiě)為Acc。A的作用:(1)是ALU單元的輸入之一,又是運(yùn)算結(jié)果的存放單元。(2)數(shù)據(jù)傳送大多都通過(guò)累加器A。A的進(jìn)位標(biāo)志Cy。3.寄存器B 為執(zhí)行乘法和除法操作設(shè)置的。在不執(zhí)行乘、除的情況下,可當(dāng)作一個(gè)普通寄存器來(lái)使用。4程序狀態(tài)字寄存器PSW (1)Cy(PSW.7)進(jìn)位標(biāo)志位(2)Ac(PSW.6)輔助進(jìn)位標(biāo)志位(3)F0(PSW.5)標(biāo)志位 由用戶使用的一個(gè)狀態(tài)標(biāo)志位。(4)RS1、RS0(PSW.4、PSW.3):4組工作寄存器區(qū)選擇控制位1和位0。RS1 RS0 所選的4組寄存器 0 0 0區(qū)(內(nèi)部RAM地址00H07H) 0 1 1區(qū)(內(nèi)部RAM地址08H0F

16、H) 1 0 2區(qū)(內(nèi)部RAM地址10H17H) 1 1 3區(qū)(內(nèi)部RAM地址18H1FH)(5)OV(PSW.2)溢出標(biāo)志位 指示運(yùn)算是否產(chǎn)生溢出。(6)PSW.1位: 保留位,未用 (7)P(PSW.0)奇偶標(biāo)志位 P=1,A中“1”的個(gè)數(shù)為奇數(shù) P=0,A中“1”的個(gè)數(shù)為偶數(shù)5. I/O端口P0P3 P0P3分別為I/O端口P0P3的鎖存器??砂醋止?jié)尋址也可按位尋址。6.串行數(shù)據(jù)緩沖器SBUF 存放欲發(fā)送或已接收的數(shù)據(jù),一個(gè)字節(jié)地址,由兩個(gè)獨(dú)立的寄存器組成,一個(gè)是發(fā)送緩沖器,另一個(gè)是接收緩沖器。7. 定時(shí)器/計(jì)數(shù)器 3個(gè)16位定時(shí)器/計(jì)數(shù)器T0,T1和T2,各由兩個(gè)獨(dú)立的8位寄存器組成:

17、 TH0、TL0、TH1、TL1、TH2、TL2 ,只能字節(jié)尋址。并行I/O端口4個(gè)雙向的8位并行I/O端口(Port) ,記作P0P3 屬于特殊功能寄存器,還可位尋址。1、 P0端口P0口傳送地址或數(shù)據(jù)時(shí),CPU發(fā)出控制信號(hào)為高電平,打開(kāi)上面的與門(mén),使多路轉(zhuǎn)接開(kāi)關(guān)MUX打向上邊,使內(nèi)部地址/數(shù)據(jù)線與下面的場(chǎng)效應(yīng)管處于反相接通狀態(tài)。這時(shí)的輸出驅(qū)動(dòng)電路由于上下兩個(gè)FET處于反相,形成推拉式電路結(jié)構(gòu)。P0口作通用的I/O口使用時(shí),CPU發(fā)來(lái)的“控制”信號(hào)為低電平,上拉場(chǎng)效應(yīng)管截止,多路轉(zhuǎn)接開(kāi)關(guān)MUX打向下邊,與D鎖存器的Q*端接通。P0口作通用的I/O口使用:(1)作輸出口使用 來(lái)自CPU的“寫(xiě)入

18、”脈沖加在D鎖存器的CP端,內(nèi)部總線上的數(shù)據(jù)寫(xiě)入D鎖存器,并向端口引腳P0.x輸出。注意:由于輸出電路是漏極開(kāi)路(因?yàn)檫@時(shí)上拉場(chǎng)效應(yīng)管截止),必須外接上拉電阻才能有高電平輸出。(2)作輸入口使用 應(yīng)區(qū)分“讀引腳”和“讀端口”(或稱(chēng)“讀鎖存器”)。“讀引腳”信號(hào)把下方緩沖器打開(kāi),引腳上的狀態(tài)經(jīng)緩沖器讀入內(nèi)部總線;“讀鎖存器”信號(hào)打開(kāi)上面的緩沖器把鎖存器Q端的狀態(tài)讀入內(nèi)部總線。2、 P1端口 字節(jié)地址90H,位地址90H97H。P1口只作為通用的I/O口使用,在電路結(jié)構(gòu)上與P0口有兩點(diǎn)區(qū)別:(1)因?yàn)镻1口只傳送數(shù)據(jù),不再需要多路轉(zhuǎn)接開(kāi)關(guān)MUX。(2)由于P1口用來(lái)傳送數(shù)據(jù),因此輸出電路中有上拉電

19、阻,這樣電路的輸出不是三態(tài)的,所以P1口是準(zhǔn)雙向口。因此:(1)P1口作為輸出口使用時(shí),外電路無(wú)需再接上拉電 阻。(2) P1口作為輸入口使用時(shí),應(yīng)先向其鎖存器先寫(xiě)入 “1”,使輸出驅(qū)動(dòng)電路的FET截止。3、 P2端口 字節(jié)地址為A0H,位地址A0HA7H。4 、P3端口 P3口的字節(jié)地址為B0H,位地址為B0HB7H 表2-2 P3口的第二功能定義 口引腳 第二功能 P3.0 RXD(串行輸入口) P3.1 TXD(串行輸出口) P3.2 INT0* (外部中斷0) P3.3 INT1* (外部中斷1) P3.4 T0(定時(shí)器0外部計(jì)數(shù)輸入) P3.5 T1(定時(shí)器1外部計(jì)數(shù)輸入) P3.6

20、 WR* (外部數(shù)據(jù)存儲(chǔ)器寫(xiě)選通) P3.7 RD* (外部數(shù)據(jù)存儲(chǔ)器讀選通)例3.2.1編寫(xiě)程序使第一個(gè)數(shù)碼管顯示8(part2.1_.1c P59)#include <reg52.h> /52系列單片機(jī)頭文件sbit dula=P26; /申明U1鎖存器的鎖存端sbit wela=P27; /申明U2鎖存器的鎖存端void main()wela=1; /打開(kāi)U2鎖存器P0=0xFE; /送入位選信號(hào)wela=0; /關(guān)閉U2鎖存器dula=1; /打開(kāi)U1鎖存器P0=0x7F; /送入段選信號(hào)dula=0; /關(guān)閉U2鎖存器while(1); /程序停止到這里例3.2.2讓實(shí)驗(yàn)

21、板上6個(gè)數(shù)碼管同時(shí)點(diǎn)亮,依次顯示0到F,時(shí)間間隔為0.5ms,循環(huán)下去。(part2.1_2.c P61)#include <reg52.h> /52系列單片機(jī)頭文件#define uchar unsigned char#define uint unsigned intsbit dula=P26; /申明U1鎖存器的鎖存端sbit wela=P27; /申明U2鎖存器的鎖存端uchar num;unchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x

22、71;void delayms(uint);void main()wela=1; /打開(kāi)U2鎖存端P0=0xco; /送入位選信號(hào)wela=0; /關(guān)閉U2鎖存端while(1)for(num=0;num<16;num+) /16個(gè)數(shù)循環(huán)顯示dula=1; /打開(kāi)U1鎖存端P0=tablenum; /送入段選信號(hào)dula=0; /關(guān)閉U1鎖存端delay(500); /延時(shí)0.5秒void delayms(uint xms)uint i,j;for(i=xms;i>0;i-) /i=xms即延時(shí)約xms毫秒for(j=110;j>0;j-);例4.1.1用數(shù)碼管前兩位顯示一個(gè)

23、十進(jìn)制數(shù),變化范圍為0059,開(kāi)始時(shí)顯示00,每按下S2鍵一次,數(shù)值加1;每按下S3鍵一次,數(shù)值減1;每按下S4鍵一次,數(shù)值歸零;按下S5鍵一次,利用定時(shí)器功能使數(shù)值開(kāi)始自動(dòng)每秒加1,再次按下S5鍵,數(shù)值停止加1,保持顯示原數(shù)。(part2.2_1.c P82)#include <reg52.h> /52系列單片機(jī)頭文件#define uchar unsigned char#define uint unsigned int sbit key1=P34;sbit key2=P35;sbit key3=P36;sbit key4=P37;sbit dula=P26;/申明U1鎖存器的鎖

24、存端sbit wela=P27;/申明U2鎖存器的鎖存端uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delayms(uint);uchar numt0,num;void display(uchar numdis) /顯示子函數(shù)uchar shi,ge; /分離兩個(gè)分別要顯示的數(shù)shi=numdis/10;ge=numdis%10; dula=1;P0=tableshi; /送十位段選數(shù)據(jù)dula=0;P0=0xff;/送位選數(shù)據(jù)前關(guān)閉所

25、有顯示,防止打開(kāi)位選鎖存時(shí)wela=1;/原來(lái)段選數(shù)據(jù)通過(guò)位選鎖存器造成混亂P0=0xfe;/送位選數(shù)據(jù)wela=0;delayms(5);/延時(shí)dula=1;P0=tablege; /送個(gè)位段選數(shù)據(jù)dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delayms(5);void delayms(uint xms)uint i,j;for(i=xms;i>0;i-)/i=xms即延時(shí)約xms毫秒for(j=110;j>0;j-);void init() /初始化函數(shù)TMOD=0x01;/設(shè)置定時(shí)器0為工作方式1(0000 0001)TH0=(65536-45

26、872)/256;/裝初值50ms一次中斷TL0=(65536-45872)%256;EA=1; /開(kāi)總中斷ET0=1; /開(kāi)定時(shí)器0中斷void keyscan()if(key1=0)delayms(10);if(key1=0)num+;if(num=60)/當(dāng)?shù)?0時(shí)重新歸0num=0;while(!key1);/等待按鍵釋放if(key2=0)delayms(10);if(key2=0)if(num=0)/當(dāng)?shù)?時(shí)重新歸60num=60;num-;while(!key2);if(key3=0)delayms(10);if(key3=0) num=0; /清0while(!key3);if

27、(key4=0)delayms(10);if(key4=0)while(!key4);TR0=TR0;/啟動(dòng)或停止定時(shí)器0void main()init();/初始化函數(shù)while(1) keyscan();display(num);void T0_time() interrupt 1TH0=(65536-45872)/256;/重裝初值TL0=(65536-45872)%256;numt0+;if(numt0=20)/如果到了20次,說(shuō)明1秒時(shí)間到 numt0=0;/然后把num清0重新再計(jì)20次num+;if(num=60)num=0;例4.2.1實(shí)驗(yàn)班上電時(shí),數(shù)碼管不顯示,順序按下矩陣鍵

28、盤(pán)后,數(shù)碼管上依次顯示0F,六個(gè)數(shù)碼管同時(shí)靜態(tài)顯示即可。(part2.2_2.c P87)#include <reg52.h> /52系列單片機(jī)頭文件#define uchar unsigned char#define uint unsigned int sbit dula=P26;/申明U1鎖存器的鎖存端sbit wela=P27;/申明U2鎖存器的鎖存端uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delayms(uint

29、 xms)uint i,j;for(i=xms;i>0;i-)/i=xms即延時(shí)約xms毫秒for(j=110;j>0;j-);void display(uchar num) P0=tablenum; /顯示函數(shù)只送段選數(shù)據(jù)dula=1;dula=0;void matrixkeyscan()uchar temp,key; P3=0xfe; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delayms(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) temp=P3; switch(temp)

30、case 0xee: key=0; break; case 0xde: key=1; break; case 0xbe: key=2; break; case 0x7e: key=3; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; display(key); P3=0xfd; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delayms(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) temp=P3; switch(temp) case 0x

31、ed: key=4; break; case 0xdd: key=5; break; case 0xbd: key=6; break; case 0x7d: key=7; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; display(key); P3=0xfb; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delayms(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) temp=P3; switch(temp) case 0xeb: key

32、=8; break; case 0xdb: key=9; break; case 0xbb: key=10; break; case 0x7b: key=11; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; display(key); P3=0xf7; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delayms(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) temp=P3; switch(temp) case 0xe7: key=12;

33、break; case 0xd7: key=13; break; case 0xb7: key=14; break; case 0x77: key=15; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; display(key); void main()P0=0; /關(guān)閉所有數(shù)碼管段選dula=1;dula=0;P0=0xc0;/位選中所有數(shù)碼管wela=1;wela=0; while(1) matrixkeyscan();/不停調(diào)用鍵盤(pán)掃描程序 例5.3.1用單片機(jī)控制ADC0804進(jìn)行數(shù)模轉(zhuǎn)換,當(dāng)擰動(dòng)實(shí)驗(yàn)板上A/D旁邊的電位時(shí),在

34、數(shù)碼管的前三位以十進(jìn)制方式顯示出A/D轉(zhuǎn)換后的數(shù)字量(8位A/D轉(zhuǎn)換后數(shù)值在0255變化)。(part2.3_1.c P107)#include <reg52.h> /52系列單片機(jī)頭文件#include <intrins.h>#define uchar unsigned char#define uint unsigned int sbit dula=P26;/申明U1鎖存器的鎖存端sbit wela=P27;/申明U2鎖存器的鎖存端sbit adwr=P36;/定義AD的WR端口sbit adrd=P37;/定義AD的RD端口uchar code table=0x3f

35、,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delayms(uint xms)uint i,j;for(i=xms;i>0;i-)/i=xms即延時(shí)約xms毫秒for(j=110;j>0;j-);void display(uchar bai,uchar shi,uchar ge) /顯示子函數(shù) dula=1;P0=tablebai; /送段選數(shù)據(jù)dula=0;P0=0xff;/送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開(kāi)位選鎖存時(shí)wela=1;/原來(lái)段選數(shù)據(jù)通過(guò)位選鎖存器造成

36、混亂P0=0x7e;/送位選數(shù)據(jù)wela=0;delayms(5); /延時(shí)dula=1;P0=tableshi;dula=0;P0=0xff;wela=1;P0=0x7d;wela=0;delayms(5);dula=1;P0=tablege;dula=0;P0=0xff;wela=1;P0=0x7b;wela=0;delayms(5);void main()/主程序uchar a,A1,A2,A3,adval;wela=1;P0=0x7f; /置CSAD為0,選通ADCS 以后不必再管ADCSwela=0; while(1)adwr=1;_nop_();adwr=0;/啟動(dòng)AD轉(zhuǎn)換_nop

37、_();adwr=1;for(a=10;a>0;a-) /TX-1C實(shí)驗(yàn)板AD工作頻率較低,所以啟動(dòng)轉(zhuǎn)換后要多留點(diǎn)時(shí)間用來(lái)轉(zhuǎn)換 /這里把顯示部分放這里的原因也是為了延長(zhǎng)轉(zhuǎn)換時(shí)間 display(A1,A2,A3);P1=0xff; /讀取P1口之前先給其寫(xiě)全1 adrd=1; /選通ADCS_nop_();adrd=0; /AD讀使能_nop_();adval=P1;/AD數(shù)據(jù)讀取賦給P1口adrd=1;A1=adval/100;/分出百,十,和個(gè)位A2=adval%100/10;A3=adval%10; AT89S52的定時(shí)器/計(jì)數(shù)器 軟件和硬件定/延時(shí)方式,硬件定/延時(shí)是通過(guò)單片機(jī)內(nèi)

38、部硬件定時(shí)器/計(jì)數(shù)器,優(yōu)點(diǎn):不占用CPU時(shí)間。 3個(gè)可編程的定時(shí)器/計(jì)數(shù)器T0、T1、T2。定時(shí)器/計(jì)數(shù)器基本原理定時(shí)器/計(jì)數(shù)器核心:16位的加1計(jì)數(shù)器。由2個(gè)8位計(jì)數(shù)器(TH、TL)組成。兩種工作模式:(1)計(jì)數(shù)器工作模式(2)定時(shí)器工作模式4種工作方式(方式0-方式3)。T0和T1的控制與狀態(tài)寄存器TMOD:選擇定時(shí)器/計(jì)數(shù)器T0、T1的工作模式和工作方式。 TCON:控制T0、T1的啟動(dòng)和停止計(jì)數(shù),同時(shí)包含了T0、T1的狀態(tài)。單片機(jī)復(fù)位時(shí),兩個(gè)寄存器的所有位都被清0?!?】 工作模式寄存器TMOD8位分為兩組,高4位控制T1,低4位控制T0。1)GATE門(mén)控位 0:以TRX(X=0,1)

39、來(lái)啟動(dòng)定時(shí)器/計(jì)數(shù)器運(yùn)行。1:用外中斷引腳(INT0*或INT1*)上的高電平和TRX來(lái)啟動(dòng)定時(shí)器/計(jì)數(shù)器運(yùn)行。(2)M1、M0工作方式選擇位 M1 M0 工 作 方 式 0 0方式0,13位定時(shí)器/計(jì)數(shù)器。 0 1方式1,16位定時(shí)器/計(jì)數(shù)器。 1 0 方式2,8位常數(shù)自動(dòng)重新裝載 1 1 方式3,僅適用于T0,T0分成兩個(gè)8 位計(jì)數(shù)器,T1停止計(jì)數(shù)。 (3) C/T*計(jì)數(shù)器模式和定時(shí)器模式選擇位 0:定時(shí)器模式。 1:計(jì)數(shù)器模式。【2 】 定時(shí)器/計(jì)數(shù)器控制寄存器TCON低4位與外部中斷有關(guān),外部中斷0,外部中斷1。高4位的功能如下: (1) TF1、TF0計(jì)數(shù)溢出標(biāo)志位 (2) TR1、

40、TR0計(jì)數(shù)運(yùn)行控制位 1:?jiǎn)?dòng)定時(shí)器/計(jì)數(shù)器工作 0:停止定時(shí)器/計(jì)數(shù)器工作T0和T1的4種工作方式1 方式0 M1、M0為00 ,定時(shí)器/計(jì)數(shù)器的框圖:為13位的計(jì)數(shù)器 ,C/T* 位決定工作模式: 0:開(kāi)關(guān)打在上面,為定時(shí)器工作模式;1:開(kāi)關(guān)打在下面,為計(jì)數(shù)器工作模式,計(jì)數(shù)脈沖為P3.4、P3.5引腳上的外部輸入脈沖,當(dāng)引腳上發(fā)生負(fù)跳變時(shí),計(jì)數(shù)器加1。GATE位:決定定時(shí)器/計(jì)數(shù)器的運(yùn)行取決于TRX一個(gè)條件還是TRX和INTX*引腳兩個(gè)條件。 (1)0:A點(diǎn)是否計(jì)數(shù),僅取決于TRX的狀態(tài)。(2)1:B點(diǎn)電位由INTX*的輸入電平和TRX的狀態(tài)這兩個(gè)條件來(lái)確定。是否計(jì)數(shù)是由TRX和INTX*

41、二個(gè)條件來(lái)控制的。 定時(shí)時(shí)間 計(jì)數(shù)初值2 方式1 M1、M0=01,16位的計(jì)數(shù)器。定時(shí)時(shí)間 計(jì)數(shù)初值3 方式2 計(jì)數(shù)滿后自動(dòng)裝入計(jì)數(shù)初值。M1、M0=10 ,等效框圖如下:TLX作為常數(shù)緩沖器,當(dāng)TLX計(jì)數(shù)溢出時(shí),在置“1”溢出標(biāo)志TFX的同時(shí),還自動(dòng)的將THX中的初值送至TLX,使TLX從初值開(kāi)始重新計(jì)數(shù)。定時(shí)器/計(jì)數(shù)器的方式2工作過(guò)程下圖所示(X=0,1)。省去用戶軟件中重裝初值的程序,精確的定時(shí)。4 方式3 增加一個(gè)附加的8位定時(shí)器/計(jì)數(shù)器,從而具有3個(gè)定時(shí)器/計(jì)數(shù)器。只適用于定時(shí)器/計(jì)數(shù)器T0。T1不能工作在方式3,T1方式3時(shí)相當(dāng)于TR1=0,停止計(jì)數(shù)。1工作方式3下的T0 T0分

42、為兩個(gè)獨(dú)立的8位計(jì)數(shù)器:TL0和TH0 。TL0使用T0的狀態(tài)控制位C/T*、GATE、TR0,而TH0被固定為一個(gè)8位定時(shí)器(不能作外部計(jì)數(shù)模式),并使用定時(shí)器T1的狀態(tài)控制位TR1和TF1,同時(shí)占用定時(shí)器T1的中斷請(qǐng)求源TF1。 各引腳與T0的邏輯關(guān)系如圖所示:2T0工作在方式3下,T1的各種工作方式 T0處于方式3時(shí), T1可定為方式0、方式1和方式2,用來(lái)作為串行口的波特率發(fā)生器,或不需要中斷的場(chǎng)合。(1) T1工作在方式0 (2) T1工作在方式1 (3) T1工作在方式2 AT89S52的中斷系統(tǒng)實(shí)時(shí)測(cè)控,單片機(jī)能及時(shí)地響應(yīng)和處理單片機(jī)外部事件或內(nèi)部事件所提出的中斷請(qǐng)求。中斷的概念

43、CPU正在執(zhí)行程序時(shí),單片機(jī)外部或內(nèi)部發(fā)生的某一事件,請(qǐng)求CPU迅速去處理。CPU暫時(shí)中止當(dāng)前的工作,轉(zhuǎn)到中斷服務(wù)處理程序處理所發(fā)生的事件。處理完該事件后,再回到原來(lái)被中止的地方,繼續(xù)原來(lái)的工作,這稱(chēng)為中斷。 CPU處理事件的過(guò)程,稱(chēng)為CPU的中斷響應(yīng)過(guò)程。對(duì)事件的整個(gè)處理過(guò)程,稱(chēng)為中斷處理(或中斷服務(wù))。能夠?qū)崿F(xiàn)中斷處理功能的部件稱(chēng)為中斷系統(tǒng);產(chǎn)生中斷的請(qǐng)求源稱(chēng)為中斷請(qǐng)求源。中斷源向CPU提出的處理請(qǐng)求,稱(chēng)為中斷請(qǐng)求(或中斷申請(qǐng))。中斷方式優(yōu)點(diǎn):大大地提高了CPU的工作效率。 AT89S52中斷系統(tǒng)的結(jié)構(gòu)有8個(gè)中斷請(qǐng)求源,兩個(gè)中斷優(yōu)先級(jí),可兩級(jí)嵌套。中斷系統(tǒng)結(jié)構(gòu)示意圖如下圖所示。中斷請(qǐng)求源八

44、個(gè)中斷請(qǐng)求源 (P50表2-21):(1)INT0*外部中斷請(qǐng)求0,由引腳INT0*輸入,中斷請(qǐng)求標(biāo)志為IE0。(2)INT1*外部中斷請(qǐng)求1,由引腳INT1*輸入,中斷請(qǐng)求標(biāo)志為IE1。(3)定時(shí)器/計(jì)數(shù)器T0溢出中斷請(qǐng)求,中斷請(qǐng)求標(biāo)志為T(mén)F0。(4)定時(shí)器/計(jì)數(shù)器T1溢出中斷請(qǐng)求,中斷請(qǐng)求標(biāo)志為T(mén)F1。(5)串行口中斷請(qǐng)求,中斷請(qǐng)求標(biāo)志為T(mén)I或RI。(6)定時(shí)器/計(jì)數(shù)器T2溢出中斷請(qǐng)求,中斷請(qǐng)求標(biāo)志TF2。 定時(shí)器/計(jì)數(shù)器T2捕獲中斷請(qǐng)求,中斷請(qǐng)求標(biāo)志EXF2。TCON為定時(shí)器/計(jì)數(shù)器的控制寄存器,字節(jié)地址為88H。包含:(1)T0和T1的溢出中斷請(qǐng)求標(biāo)志位TF1和TF0(2)外部中斷請(qǐng)求

45、標(biāo)志位IE1與IE0。格式如下所示:各標(biāo)志位的功能: (1)IT0選擇外部中斷請(qǐng)求0為跳沿觸發(fā)方式還是電平觸發(fā)方式: IT0=0,為電平觸發(fā)方式。IT0=1,為跳沿觸發(fā)方式。 可由軟件置“1”或清“0”。(2)IE0外部中斷請(qǐng)求0的中斷請(qǐng)求標(biāo)志位。 IE0=0,無(wú)中斷請(qǐng)求。 IE0=1,外部中斷0有中斷請(qǐng)求。當(dāng)CPU響應(yīng)該中斷,轉(zhuǎn)向中斷服務(wù)程序時(shí),由硬件清“0”IE0。(3)IT1外部中斷請(qǐng)求1為跳沿觸發(fā)方式還是電平觸發(fā)方式,意義與IT0類(lèi)似。(4)IE1外部中斷請(qǐng)求1的中斷請(qǐng)求標(biāo)志位,意義與IE0類(lèi)似。(5)TF0T0溢出中斷請(qǐng)求標(biāo)志位。T0計(jì)數(shù)后,當(dāng)最高位產(chǎn)生溢出時(shí),由硬件置“1”TF0,

46、向CPU申請(qǐng)中斷,CPU響應(yīng)TF0中斷時(shí),清“0”TF0,TF0也可由軟件清0。(6)TF1T1的溢出中斷請(qǐng)求標(biāo)志位,功能和TF0類(lèi)似。 TR1、TR0 2個(gè)位與中斷無(wú)關(guān)。 當(dāng)MCS-51復(fù)位后,TCON被清0,則CPU關(guān)中斷,所有中斷請(qǐng)求被禁止。外部中斷的觸發(fā)方式選擇兩種觸發(fā)方式:電平觸發(fā)方式和跳沿觸發(fā)方式。1、電平觸發(fā)方式CPU在每個(gè)機(jī)器周期采樣到的外部中斷輸入線的電平。在中斷服務(wù)程序返回之前,外部中斷請(qǐng)求輸入必須無(wú)效(即變?yōu)楦唠娖剑?,否則CPU返回主程序后會(huì)再次響應(yīng)中斷。適于外中斷以低電平輸入且中斷服務(wù)程序能清除外部中斷請(qǐng)求(即外部中斷輸入電平又變?yōu)楦唠娖剑┑那闆r。 2、跳沿觸發(fā)方式 連續(xù)兩次采樣,一個(gè)機(jī)器周期采樣到外部中斷輸入為高,下一個(gè)機(jī)器周期采樣為低,則置“1”中斷請(qǐng)求標(biāo)志,直到CPU響應(yīng)此中斷時(shí),該標(biāo)志才清0。這樣不會(huì)丟失中斷,但輸入的負(fù)脈沖寬度至少保持1個(gè)機(jī)器周期。 SCON為串行口控制寄存器,字節(jié)地址為98H。串行口的發(fā)送中斷和接收中斷的中斷請(qǐng)求標(biāo)志TI和RI,格

溫馨提示

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