單片機(jī)及其應(yīng)用課件_第1頁
單片機(jī)及其應(yīng)用課件_第2頁
單片機(jī)及其應(yīng)用課件_第3頁
單片機(jī)及其應(yīng)用課件_第4頁
單片機(jī)及其應(yīng)用課件_第5頁
已閱讀5頁,還剩375頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1

單片機(jī)及其應(yīng)用21.1電子計(jì)算機(jī)的發(fā)展概述1.1.1電子計(jì)算機(jī)的問世及其經(jīng)典結(jié)構(gòu)1946年2月15日,第一臺(tái)電子數(shù)字計(jì)算機(jī)問世,這標(biāo)志著計(jì)算機(jī)時(shí)代的到來。(CALCULATOR)ENIAC(“埃尼阿克”)3◆與現(xiàn)代的計(jì)算機(jī)相比,有許多不足,但它的問世開創(chuàng)了計(jì)算機(jī)科學(xué)技術(shù)的新紀(jì)元,對(duì)人類的生產(chǎn)和生活方式產(chǎn)生了巨大的影響。◆ENIAC是電子管計(jì)算機(jī),時(shí)鐘頻率僅有100KHz,但能在1秒鐘的時(shí)間內(nèi)完成5000次加法運(yùn)算。

4匈牙利籍?dāng)?shù)學(xué)家馮·諾依曼在方案的設(shè)計(jì)上做出了重要的貢獻(xiàn)。1946年6月,他又提出了“程序存儲(chǔ)”和“二進(jìn)制運(yùn)算”的思想,進(jìn)一步構(gòu)建了計(jì)算機(jī)由運(yùn)算器、控制器、存儲(chǔ)器、輸入設(shè)備和輸出設(shè)備組成這一計(jì)算機(jī)的經(jīng)典結(jié)構(gòu)。(EDVAC-ELECTRONICDISCRETEVARIABLEAUTOMATICCOMPUTER)5電子計(jì)算機(jī)技術(shù)的發(fā)展,相繼經(jīng)歷了五個(gè)時(shí)代:﹡電子管計(jì)算機(jī);﹡晶體管計(jì)算機(jī);﹡集成電路計(jì)算機(jī);﹡大規(guī)模集成電路計(jì)算機(jī);﹡超大規(guī)模集成電路計(jì)算機(jī)。計(jì)算機(jī)的結(jié)構(gòu)仍然沒有突破馮·諾依曼提出的計(jì)算機(jī)的經(jīng)典結(jié)構(gòu)框架。6二、微型計(jì)算機(jī)的應(yīng)用形態(tài)從應(yīng)用形態(tài)上,微機(jī)可以分成三種:

◆多板機(jī)(系統(tǒng)機(jī))將CPU、存儲(chǔ)器、I/O接口電路和總線接口等組裝在一塊主機(jī)板(即微機(jī)主板)。各種適配板卡插在主機(jī)板的擴(kuò)展槽上并與電源、軟/硬盤驅(qū)動(dòng)器及光驅(qū)等裝在同一機(jī)箱內(nèi),再配上系統(tǒng)軟件,就構(gòu)成了一臺(tái)完整的微型計(jì)算機(jī)系統(tǒng)(簡(jiǎn)稱系統(tǒng)機(jī))。工業(yè)PC機(jī)也屬于多板機(jī)。7

◆單板機(jī)將CPU芯片、存儲(chǔ)器芯片、I/O接口芯片和簡(jiǎn)單的I/O設(shè)備(小鍵盤、LED顯示器)等裝配在一塊印刷電路板上,再配上監(jiān)控程序(固化在ROM中),就構(gòu)成了一臺(tái)單板微型計(jì)算機(jī)(簡(jiǎn)稱單板機(jī))。單板機(jī)8單板機(jī)的I/O設(shè)備簡(jiǎn)單,軟件資源少,使用不方便。早期主要用于微型計(jì)算機(jī)原理的教學(xué)及簡(jiǎn)單的測(cè)控系統(tǒng),現(xiàn)在已很少使用。9

◆單片機(jī)在一片集成電路芯片上集成微處理器、存儲(chǔ)器、I/O接口電路,從而構(gòu)成了單芯片微型計(jì)算機(jī),即單片機(jī)。三種應(yīng)用形態(tài)的比較:?jiǎn)伟鍣C(jī)單片機(jī)系統(tǒng)機(jī)(多板機(jī))10系統(tǒng)機(jī)(桌面應(yīng)用)屬于通用計(jì)算機(jī),主要應(yīng)用于數(shù)據(jù)處理、辦公自動(dòng)化及輔助設(shè)計(jì)。單片機(jī)(嵌入式應(yīng)用)屬于專用計(jì)算機(jī),主要應(yīng)用于智能儀表、智能傳感器、智能家電、智能辦公設(shè)備、汽車及軍事電子設(shè)備等應(yīng)用系統(tǒng)。

單片機(jī)體積小、價(jià)格低、可靠性高,其非凡的嵌入式應(yīng)用形態(tài)對(duì)于滿足嵌入式應(yīng)用需求具有獨(dú)特的優(yōu)勢(shì)。111.2單片機(jī)的發(fā)展過程及產(chǎn)品近況1.2.1單片機(jī)的發(fā)展過程單片機(jī)技術(shù)發(fā)展過程可分為三個(gè)主要階段:

◆單芯片微機(jī)形成階段

1976年,Intel公司推出了MCS-48系列單片機(jī)。8位CPU、1K字節(jié)ROM、64字節(jié)RAM、27根I/O線和1個(gè)8位定時(shí)/計(jì)數(shù)器。

特點(diǎn)是:存儲(chǔ)器容量較小,尋址范圍?。ú淮笥?K),無串行接口,指令系統(tǒng)功能不強(qiáng)。

12

◆性能完善提高階段

1980年,Intel公司推出了MCS-51系列單片機(jī):8位CPU、4K字節(jié)ROM、128字節(jié)RAM、4個(gè)8位并口、1個(gè)全雙工串行口、2個(gè)16位定時(shí)/計(jì)數(shù)器。尋址范圍64K,并有控制功能較強(qiáng)的布爾處理器。

特點(diǎn)是:結(jié)構(gòu)體系完善,性能已大大提高,面向控制的特點(diǎn)進(jìn)一步突出?,F(xiàn)在,MCS-51已成為公認(rèn)的單片機(jī)經(jīng)典機(jī)種。13

◆微控制器化階段

特點(diǎn)是:片內(nèi)面向測(cè)控系統(tǒng)外圍電路增強(qiáng),使單片機(jī)可以方便靈活地用于復(fù)雜的自動(dòng)測(cè)控系統(tǒng)及設(shè)備?!拔⒖刂破鳌钡姆Q謂更能反應(yīng)單片機(jī)的本質(zhì)。

1982年,Intel推出MCS-96系列單片機(jī)。芯片內(nèi)集成:16位CPU、8K字節(jié)ROM、232字節(jié)RAM、5個(gè)8位并口、1個(gè)全雙工串行口、2個(gè)16位定時(shí)/計(jì)數(shù)器。尋址范圍64K。片上還有8路10位ADC、1路PWM輸出及高速I/O部件等。141.2.2單片機(jī)產(chǎn)品近況

﹡ATMEL公司融入Flash存儲(chǔ)器技術(shù)的AT89系列;

﹡Philips公司的80C51、80C552系列;

﹡華邦公司的W78C51、W77C51高速低價(jià)系列;

﹡ADI公司的ADμC8xx高精度ADC系列;

﹡LG公司的GMS90/97低壓高速系列;

﹡Maxim公司的DS89C420高速(50MIPS)系列;

﹡Cygnal公司的C8051F系列高速SOC單片機(jī)。

80C51系列單片機(jī)產(chǎn)品繁多,主流地位已經(jīng)形成,近年來推出的與80C51兼容的主要產(chǎn)品有:15

◆非80C51結(jié)構(gòu)單片機(jī)新品不斷推出,給用戶提供了更為廣泛的選擇空間,近年來推出的非80C51系列的主要產(chǎn)品有:﹡Intel的MCS-96系列16位單片機(jī);﹡Microchip的PIC系列RISC單片機(jī);

﹡TI的MSP430F系列16位低功耗單片機(jī)。161.3單片機(jī)的特點(diǎn)及應(yīng)用領(lǐng)域1.3.1單片機(jī)的特點(diǎn)

近期推出的單片機(jī)產(chǎn)品,內(nèi)部集成有高速I/O口、ADC、PWM、WDT等部件,并在低電壓、低功耗、串行擴(kuò)展總線、控制網(wǎng)絡(luò)總線和開發(fā)方式(如在系統(tǒng)編程ISP)等方面都有了進(jìn)一步的增強(qiáng)。

◆控制性能和可靠性高實(shí)時(shí)控制功能特別強(qiáng),其CPU可以對(duì)I/O端口直接進(jìn)行操作,位操作能力更是其它計(jì)算機(jī)無法比擬的。另外,由于CPU、存儲(chǔ)器及I/O接口集成在同一芯片內(nèi),各部件間的連接緊湊,數(shù)據(jù)在傳送時(shí)受干擾的影響較小,且不易受環(huán)境條件的影響,所以單片機(jī)的可靠性非常高。17◆體積小、價(jià)格低、易于產(chǎn)品化

單片機(jī)芯片即是一臺(tái)完整的微型計(jì)算機(jī),對(duì)于批量大的專用場(chǎng)合,一方面可以在眾多的單片機(jī)品種間進(jìn)行匹配選擇;同時(shí)還可以專門進(jìn)行芯片設(shè)計(jì),使芯片的功能與應(yīng)用具有良好的對(duì)應(yīng)關(guān)系;在單片機(jī)產(chǎn)品的引腳封裝方面,有的單片機(jī)引腳已減少到8個(gè)或更少。從而使應(yīng)用系統(tǒng)的印制板減小、接插件減少、安裝簡(jiǎn)單方便。181.3.2單片機(jī)的應(yīng)用領(lǐng)域

◆智能儀器儀表

單片機(jī)用于各種儀器儀表,一方面提高了儀器儀表的使用功能和精度,使儀器儀表智能化,同時(shí)還簡(jiǎn)化了儀器儀表的硬件結(jié)構(gòu),從而可以方便地完成儀器儀表產(chǎn)品的升級(jí)換代。如各種智能電氣測(cè)量?jī)x表、智能傳感器等。19◆機(jī)電一體化產(chǎn)品機(jī)電一體化產(chǎn)品是集機(jī)械技術(shù)、微電子技術(shù)、自動(dòng)化技術(shù)和計(jì)算機(jī)技術(shù)于一體,具有智能化特征的各種機(jī)電產(chǎn)品。單片機(jī)在機(jī)電一體化產(chǎn)品的開發(fā)中可以發(fā)揮巨大的作用。典型產(chǎn)品如機(jī)器人、數(shù)控機(jī)床、自動(dòng)包裝機(jī)、點(diǎn)鈔機(jī)、醫(yī)療設(shè)備、打印機(jī)、傳真機(jī)、復(fù)印機(jī)等。20◆實(shí)時(shí)工業(yè)控制單片機(jī)還可以用于各種物理量的采集與控制。電流、電壓、溫度、液位、流量等物理參數(shù)的采集和控制均可以利用單片機(jī)方便地實(shí)現(xiàn)。在這類系統(tǒng)中,利用單片機(jī)作為系統(tǒng)控制器,可以根據(jù)被控對(duì)象的不同特征采用不同的智能算法,實(shí)現(xiàn)期望的控制指標(biāo),從而提高生產(chǎn)效率和產(chǎn)品質(zhì)量。典型應(yīng)用如電機(jī)轉(zhuǎn)速控制、溫度控制、自動(dòng)生產(chǎn)線等。21

◆分布式系統(tǒng)的前端模塊

在較復(fù)雜的工業(yè)系統(tǒng)中,經(jīng)常要采用分布式測(cè)控系統(tǒng)完成大量的分布參數(shù)的采集。在這類系統(tǒng)中,采用單片機(jī)作為分布式系統(tǒng)的前端采集模塊,系統(tǒng)具有運(yùn)行可靠,數(shù)據(jù)采集方便靈活,成本低廉等一系列優(yōu)點(diǎn)。22◆家用電器家用電器是單片機(jī)的又一重要應(yīng)用領(lǐng)域,前景十分廣闊。如空調(diào)器、電冰箱、洗衣機(jī)、電飯煲、高檔洗浴設(shè)備、高檔玩具等。

另外,在交通領(lǐng)域中,汽車、火車、飛機(jī)、航天器等均有單片機(jī)的廣泛應(yīng)用。如汽車自動(dòng)駕駛系統(tǒng)、航天測(cè)控系統(tǒng)、黑匣子等

。232.180C51系列概述2.1.1MCS-51系列(1)MCS-51是Intel公司生產(chǎn)的一個(gè)單片機(jī)系列名稱。屬于這一系列的單片機(jī)有多種,如:

﹡8051/8751/8031;

﹡8052/8752/8032;

﹡80C51/87C51/80C31

﹡80C52/87C52/80C32等

。

24(2)該系列生產(chǎn)工藝有兩種:CHMOS是CMOS和HMOS的結(jié)合,既保持了HMOS高速度和高密度的特點(diǎn),還具有CMOS的低功耗的特點(diǎn)。在產(chǎn)品型號(hào)中凡帶有字母“C”的即為CHMOS芯片,CHMOS芯片的電平既與TTL電平兼容,又與CMOS電平兼容。

一是HMOS工藝(高密度短溝道MOS工藝)。二是CHMOS工藝(互補(bǔ)金屬氧化物的HMOS工藝)。25(3)在功能上,該系列單片機(jī)有基本型和增強(qiáng)型兩大類:增強(qiáng)型:8052/8752/803280C52/87C52/80C32基本型:8051/8751/803180C51/87C51/80C3126(4)在片內(nèi)程序存儲(chǔ)器的配置上,該系列單片機(jī)有三種形式,即掩膜ROM、EPROM和ROMLess(無片內(nèi)程序存儲(chǔ)器)。如:﹡80C51有4K字節(jié)的掩膜ROM;﹡87C51有4K字節(jié)的EPROM;﹡80C31在芯片內(nèi)無程序存儲(chǔ)器。272.1.280C51系列

Intel的:80C31、80C51、87C51,80C32、80C52、87C52等;

﹡ATMEL的:89C51、89C52、89C2051等;

Philips、華邦、Dallas、Siemens(Infineon)等公司的許多產(chǎn)品。

80C51是MCS-51系列中CHMOS工藝的一個(gè)典型品種;其它廠商以8051為基核開發(fā)出的CMOS工藝單片機(jī)產(chǎn)品統(tǒng)稱為80C51系列。當(dāng)前常用的80C51系列單片機(jī)主要產(chǎn)品有:282.1.380C51典型產(chǎn)品資源配置29學(xué)單片機(jī)需要具備的條件與以前所學(xué)的知識(shí)關(guān)聯(lián)很少;對(duì)器件的概念基本上是從0開始;如果要用C語言編程,需具備一定的C語言基礎(chǔ);所有人都站在了同一起跑線上;30#include<reg52.h>unsignedcharFlag=0x3f;main(){ P1=0x55;While(1){ if(Flag––==0) { Flag=0x3f; P1=~P1; } }}31 org 0000h jmp main org 0100hmain: mov p1,#55hamain: mov r0,#3fhloop: djnz r0,loop cpl a mov p1,a jmp amain end32

·8位CPU

·4kbytes程序存儲(chǔ)器(ROM)

(52為8K)

·256bytes的數(shù)據(jù)存儲(chǔ)器(RAM)

(52有384bytes的RAM)

·32條I/O口線

·111條指令,大部分為單字節(jié)指令

·21個(gè)專用寄存器

2.2.2單片機(jī)的主要功能33

·2個(gè)可編程定時(shí)/計(jì)數(shù)器

·5個(gè)中斷源,2個(gè)優(yōu)先級(jí)

(52有6個(gè))

·一個(gè)全雙工串行通信口

·外部數(shù)據(jù)存儲(chǔ)器尋址空間為64kB

·外部程序存儲(chǔ)器尋址空間為64kB

·邏輯操作位尋址功能

·雙列直插40PinDIP封裝

·單一+5V電源供電

342.3.280C51的引腳封裝總線型非總線型3536CPU:由運(yùn)算和控制邏輯組成,同時(shí)還包括中斷系統(tǒng)和部分外部特殊功能寄存器;RAM:用以存放可以讀寫的數(shù)據(jù),如運(yùn)算的中間結(jié)果、最終結(jié)果以及欲顯示的數(shù)據(jù);ROM:用以存放程序、一些原始數(shù)據(jù)和表格;I/O口:四個(gè)8位并行I/O口,既可用作輸入,也可用作輸出;T/C:兩個(gè)定時(shí)/記數(shù)器,既可以工作在定時(shí)模式,也可以工作在記數(shù)模式;37五個(gè)中斷源的中斷控制系統(tǒng);一個(gè)全雙工UART(通用異步接收發(fā)送器)的串行I/O口,用于實(shí)現(xiàn)單片機(jī)之間或單片機(jī)與微機(jī)之間的串行通信;片內(nèi)振蕩器和時(shí)鐘產(chǎn)生電路,石英晶體和微調(diào)電容需要外接。最高振蕩頻率為12M。38單片機(jī)最小系統(tǒng)39P0~P3:通用I/O口;VCC:電源端,一般接5V;GND:電源地;XTAL1,XTAL2:外接晶體振蕩器,不能超過24M;需加微調(diào)電容,一般為30pF;RST/VPD:復(fù)位端,平時(shí)為低電平;ALE/PROG:地址鎖存允許信號(hào)端;EA/Vpp:外部程序存儲(chǔ)器地址允許輸入端/固化編程電壓輸入端;402.2.4控制器1.時(shí)鐘電路(a)內(nèi)部時(shí)鐘電路;(b)HMOS型外部振蕩源(C)CHMOS型外部振蕩源41單片機(jī)工作的基本時(shí)序.機(jī)器周期和指令周期(1)振蕩周期:也稱時(shí)鐘周期,是指為單片機(jī)提供時(shí)鐘脈沖信號(hào)的振蕩源的周期。(2)狀態(tài)周期:每個(gè)狀態(tài)周期為時(shí)鐘周期的2倍,是振蕩周期經(jīng)二分頻后得到的。(3)機(jī)器周期:一個(gè)機(jī)器周期包含6個(gè)狀態(tài)周期S1~S6,也就是12個(gè)時(shí)鐘周期。在一個(gè)機(jī)器周期內(nèi),CPU可以完成一個(gè)獨(dú)立的操作。(4)指令周期:它是指CPU完成一條操作所需的全部時(shí)間。每條指令執(zhí)行時(shí)間都是有一個(gè)或幾個(gè)機(jī)器周期組成。MCS-51系統(tǒng)中,有單周期指令、雙周期指令和四周期指令。421.時(shí)鐘電路引腳:

XTAL1:接外部晶振和微調(diào)電容的一端,在單片機(jī)內(nèi)部,它是構(gòu)成片內(nèi)振蕩器的反向放大器的輸入端。當(dāng)采用外部振蕩器時(shí),該引腳接收振蕩器的信號(hào),即把此信號(hào)直接接到內(nèi)部振蕩器的輸入端。

XTAL2:接外部晶振和微調(diào)電容的另一端,在單片機(jī)內(nèi)部,它是構(gòu)成片內(nèi)振蕩器的反向放大器的輸出端。當(dāng)采用外部振蕩器時(shí),此引腳應(yīng)懸空。432.控制信號(hào)引腳:RST/VPD:RST是復(fù)位信號(hào)輸入端,高電平有效。當(dāng)此輸入端保持2個(gè)機(jī)器周期的高電平時(shí),就可以完成復(fù)位操作。RST引腳的第二功能是備用電源的輸入端。上電復(fù)位按鍵復(fù)位44ALE/PROG:(AddressLatchEnable/Programming)當(dāng)單片機(jī)上電正常工作后,ALE引腳不斷向外輸出正弦脈沖信號(hào),此頻率為振蕩器頻率的1/6。CPU訪問外部存儲(chǔ)器時(shí),ALE作為鎖存低8位地址的控制信號(hào)。此引腳的第二功能PROG作為8751編程脈沖輸入端使用。45PSEN:(ProgramStoreEnable)在訪問片外存儲(chǔ)器時(shí),此端定時(shí)輸出負(fù)脈沖作為片外存儲(chǔ)器的選通信號(hào)。EA/VPP:(EnableAddress/VoltagePulseOfProgramming)當(dāng)EA接高電平時(shí),CPU訪問片內(nèi)ROM,并執(zhí)行內(nèi)部程序存儲(chǔ)器中的指令,但當(dāng)PC(程序計(jì)數(shù)器)的值超過4K時(shí),將自動(dòng)轉(zhuǎn)去執(zhí)行片外存儲(chǔ)器內(nèi)的程序。當(dāng)EA腳接低電平時(shí),CPU只訪問片外ROM并執(zhí)行外部程序存儲(chǔ)器中的指令,而不管是否有片內(nèi)程序存儲(chǔ)器。VPP是對(duì)8751片內(nèi)ROM固化程序時(shí),作為施加較高編程電壓(12V~21V)的輸入端。

C語言作為一種非常方便的語言而得到廣泛的支持,國(guó)內(nèi)最通用的是KeilC51.C語言程序本身不依賴于機(jī)器硬件系統(tǒng),基本上不作修改就可將程序從不同的單片機(jī)中移植過來。C提供了很多數(shù)學(xué)函數(shù)并支持浮點(diǎn)運(yùn)算,開發(fā)效率高,故可縮短開發(fā)時(shí)間,增加程序可讀性和可維護(hù)性。

㈠C-51的特點(diǎn)C-51與ASM-51相比,有如下優(yōu)點(diǎn):1.

對(duì)單片機(jī)的指令系統(tǒng)不要求了解,僅要求對(duì)8051的存貯器結(jié)構(gòu)有初步了解;2.

寄存器分配、不同存貯器的尋址及數(shù)據(jù)類型等細(xì)節(jié)可由編譯器管理;3.

程序有規(guī)范的結(jié)構(gòu),可分成不同的函數(shù),這種方式可使程序結(jié)構(gòu)化;4.

具有將可變的選擇與特殊操作組合在一起的能力,改善了程序的可讀性;5.

提供的庫包含許多標(biāo)準(zhǔn)子程序,具有較強(qiáng)的數(shù)據(jù)處理能力;6.

由于具有方便的模塊化編程技術(shù),使已編好程序可容易地移植;C51存儲(chǔ)類型存儲(chǔ)類型尋址空間數(shù)據(jù)長(zhǎng)度值域范圍data片內(nèi)直接尋址RAM80~127idata片內(nèi)間接尋址RAM80~255pdata分頁尋址片外RAM80~255存儲(chǔ)類型尋址空間數(shù)據(jù)長(zhǎng)度值域范圍xdata片外數(shù)據(jù)存儲(chǔ)(64K)160~65535code片內(nèi)統(tǒng)一編址ROM(64K)160~65535bdata片內(nèi)可位尋址的RAM(16byet)10~127C51的數(shù)據(jù)聲明的一般格式如下[類型說明符][修飾符]標(biāo)識(shí)符[=初值]……例如:unsignedcharcodeFlag=0x0f;

就是聲明一個(gè)無符號(hào)的char型變量Flag,并給他賦初值為0x0f;并且聲明他所在的存儲(chǔ)空間在片內(nèi)統(tǒng)一編址的ROM中。聲明中,如果沒有修飾符,則數(shù)據(jù)默認(rèn)的存儲(chǔ)空間為data型,也就是在片內(nèi)RAM中。㈡C-51的程序結(jié)構(gòu)

與一般C語言的結(jié)構(gòu)相同,以main()函數(shù)為程序人口,程序體中包含若干語句還可以包含若干函數(shù)。

C-51函數(shù)的一般格式

類型函數(shù)名(參數(shù)表)

{

數(shù)據(jù)說明部分語句執(zhí)行部分

}㈢C-51的數(shù)據(jù)類型基本數(shù)據(jù)類型類型符號(hào)關(guān)鍵字?jǐn)?shù)的表示范圍所占位數(shù)整型字符型實(shí)型有無(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~214748364716unsignedint0~65535320~4294967295unsignedlongintunsignedshortint160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127無unsignedchar80~255C語言中的基本數(shù)據(jù)類型類型符號(hào)關(guān)鍵字?jǐn)?shù)的表示范圍所占位數(shù)整型字符型實(shí)型有無(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~214748364716unsignedint0~65535320~4294967295unsignedlongintunsignedshortint160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127無unsignedchar80~255㈢(續(xù))C-51的數(shù)據(jù)類型擴(kuò)充定義sfr:特殊功能寄存器聲明sfr16:sfr的16位數(shù)據(jù)聲明sbit:特殊功能位聲明bit:位變量聲明例:sfrSCON=0X98;sfr16T2=0xCC;sbitOV=PSW^2;㈣C-51數(shù)據(jù)的存儲(chǔ)類型名存儲(chǔ)空間位置長(zhǎng)度數(shù)據(jù)范圍

data直接尋址片內(nèi)RAM8位0~255bdata可位尋址片內(nèi)RAM1位0/1idata間接尋址片內(nèi)RAM8位0~255pdata片外頁RAM8位0~255xdata片外RAM16位0~65535code程序ROM16位0~65535㈣C-51數(shù)據(jù)的存儲(chǔ)類型(續(xù))例:數(shù)據(jù)類型

存儲(chǔ)類型變量char

datavar1;bit

dataflags;unsignedchar

xdatavextor[10];㈣C-51數(shù)據(jù)的存儲(chǔ)類型㈤C-51的包含的頭文件通常有:reg51.hmath.hctype.hstdio.hstdlib.habsacc.h常用有:reg51.h(定義特殊功能寄存器和位寄存器);

math.h(定義常用數(shù)學(xué)運(yùn)算);

㈥C-51的運(yùn)算符與C語言基本相同:+-*/

(加減乘除)>>=<<=

(大于大于等于小于小于等于)==!=

(測(cè)試等于測(cè)試不等于)&&||!

(邏輯與邏輯或邏輯非)>><<

(位右移位左移)&|

(按位與按位或)^~

(按位異或按位取反)㈦C-51的基本語句與標(biāo)準(zhǔn)C語言基本相同:

if選擇語言

switch/case

多分支選擇語言

while

循環(huán)語言

do-while循環(huán)語言

for

循環(huán)語言

㈧中斷服務(wù)程序函數(shù)名()interruptn

{}

㈨I/O口定義#include<absacc.h>#defineprotxbyte[0x1000]或用指針定義例:清零程序(將2000H—20FFH的內(nèi)容清零)

★匯編語言程序

ORG0000HSE01:MOVR0,#00HMOVDPTR,#2000H;(0000H)送DPTRLOO1:CLRAMOVX@DPTR,A;0送(DPTR)INCDPTR;DPTR+1INCR0;字節(jié)數(shù)加1CJNER0,#00H,LOO1;不到FF個(gè)字節(jié)再清LOOP:SJMPLOOP清零程序(將2000H—20FFH的內(nèi)容清零)

★C-51程序

#include<reg51.h>main(){inti;unsignedcharxdata*p=0x2000;

/*指針指向2000H單元*/for(i=0;i<256;i++){*p=0;p++;}/*清零2000H-20FFH單元*/

}★匯編語言程序

ORG0000HL00:MOVR0,#10H;查找16個(gè)字節(jié)

MOVR1,#00HMOVDPTR,#2000HL11:MOVXA,@DPTRCJNEA,#00H,L16;取出內(nèi)容與00H相等嗎?INCR1;取出個(gè)數(shù)加1L16:INCDPTRDJNZR0,L11;未完繼續(xù)

MOVDPTR,#2100HMOVA,R1MOVX@DPTR,A;相同數(shù)個(gè)數(shù)送2100HL1E:SJMPL1E例:查找零的個(gè)數(shù)(在2000H--200FH中查出有幾個(gè)字節(jié)是零,把個(gè)數(shù)放在2100H單元中)★查找零的個(gè)數(shù)C-51程序#include<reg51.h>main(){unsignedcharxdata*p=0x2000;/*指針p指向2000H單元*/intn=0,i;for(i=0;i<16;i++){if(*p==0)n++;/*若該單元內(nèi)容為零,則n+1*/p++;/*指針指向下一單元*/}p=0x2100;/*指針p指向2100H單元*/*p=n;/*把個(gè)數(shù)放在2100H單元中*/}§4.1MCS-51單片機(jī)的并行端口結(jié)構(gòu)與操作 51系列單片機(jī)有4個(gè)I/O端口,每個(gè)端口都是8位準(zhǔn)雙向口,共占32根引腳。每個(gè)端口都包括一個(gè)鎖存器(即專用寄存器P0~P3)、一個(gè)輸出驅(qū)動(dòng)器和輸入緩沖器。通常把4個(gè)端口籠統(tǒng)地表示為P0~P3。在無片外擴(kuò)展存儲(chǔ)器的系統(tǒng)中,這4個(gè)端口的每一位都可以作為準(zhǔn)雙向通用I/O端口使用。在具有片外擴(kuò)展存儲(chǔ)器的系統(tǒng)中,P2口作為高8位地址線,P0口分時(shí)作為低8位地址線和雙向數(shù)據(jù)總線。 51單片機(jī)4個(gè)I/O端口線路設(shè)計(jì)的非常巧妙,學(xué)習(xí)I/O端口邏輯電路,不但有利于正確合理地使用端口,而且會(huì)給設(shè)計(jì)單片機(jī)外圍邏輯電路有所啟發(fā)。下面簡(jiǎn)單介紹一下輸入/輸出端口結(jié)構(gòu)。4.1.1P0口和P2的結(jié)構(gòu)下圖為P0口的某位P0.n(n=0~7)結(jié)構(gòu)圖,它由一個(gè)輸出鎖存器、兩個(gè)三態(tài)輸入緩沖器和輸出驅(qū)動(dòng)電路及控制電路組成。從圖中可以看出,P0口既可以作為I/O用,也可以作為地址/數(shù)據(jù)線用。DQCLKQMUXP0.n讀鎖存器內(nèi)部總線寫鎖存器讀引腳地址/數(shù)據(jù)控制VCCT1T2P0口引腳一、P0口的結(jié)構(gòu)1、P0口作為普通I/O口①輸出時(shí)CPU發(fā)出控制電平“0”封鎖“與”門,將輸出上拉場(chǎng)效應(yīng)管T1截止,同時(shí)使多路開關(guān)MUX把鎖存器與輸出DQCLKQMUXP0.n讀鎖存器內(nèi)部總線寫鎖存器讀引腳地址/數(shù)據(jù)控制VCCT1T2P0口引腳驅(qū)動(dòng)場(chǎng)效應(yīng)管T2柵極接通。故內(nèi)部總線與P0口同相。由于輸出驅(qū)動(dòng)級(jí)是漏極開路電路,若驅(qū)動(dòng)NMOS或其它拉流負(fù)載時(shí),需要外接上拉電阻。P0的輸出級(jí)可驅(qū)動(dòng)8個(gè)LSTTL負(fù)載。DQCLKQMUXP0.n讀鎖存器內(nèi)部總線寫鎖存器讀引腳地址/數(shù)據(jù)控制VCCT1T2P0口引腳②輸入時(shí)----分讀引腳或讀鎖存器讀引腳:由傳送指令(MOV)實(shí)現(xiàn);

下面一個(gè)緩沖器用于讀端口引腳數(shù)據(jù),當(dāng)執(zhí)行一條由端口輸入的指令時(shí),讀脈沖把該三態(tài)緩沖器打開,這樣端口引腳上的數(shù)據(jù)經(jīng)過緩沖器讀入到內(nèi)部總線。DQCLKQMUXP0.n讀鎖存器內(nèi)部總線寫鎖存器讀引腳地址/數(shù)據(jù)控制VCCT1T2P0口引腳DQCLKQMUXP0.n讀鎖存器內(nèi)部總線寫鎖存器讀引腳地址/數(shù)據(jù)控制VCCT1T2P0口引腳②輸入時(shí)----分讀引腳或讀鎖存器讀鎖存器:有些指令如:ANLP0,A稱為“讀-改-寫”

指令,需要讀鎖存器。

上面一個(gè)緩沖器用于讀端口鎖存器數(shù)據(jù)。**原因:如果此時(shí)該端口的負(fù)載恰是一個(gè)晶體管基極,且原端口輸出值為1,那么導(dǎo)通了的PN結(jié)會(huì)把端口引腳高電平拉低;若此時(shí)直接讀端口引腳信號(hào),將會(huì)把原輸出的“1”電平誤讀為“0”電平。現(xiàn)采用讀輸出鎖存器代替讀引腳,圖中,上面的三態(tài)緩沖器就為讀鎖存器Q端信號(hào)而設(shè),讀輸出鎖存器可避免上述可能發(fā)生的錯(cuò)誤。**DQCLKQMUXP0.n讀鎖存器內(nèi)部總線寫鎖存器讀引腳地址/數(shù)據(jù)控制VCCT1T2P0口引腳P0口必須接上拉電阻;在讀信號(hào)之前數(shù)據(jù)之前,先要向相應(yīng)的鎖存器做寫1操作的I/O口稱為準(zhǔn)雙向口;三態(tài)輸入緩沖器的作用:(ANLP0,A)DQCLKQMUXP0.n讀鎖存器內(nèi)部總線寫鎖存器讀引腳地址/數(shù)據(jù)控制VCCT1T2P0口引腳準(zhǔn)雙向口:

從圖中可以看出,在讀入端口數(shù)據(jù)時(shí),由于輸出驅(qū)動(dòng)FET并接在引腳上,如果T2導(dǎo)通,就會(huì)將輸入的高電平拉成低電平,產(chǎn)生誤讀。所以在端口進(jìn)行輸入操作前,應(yīng)先向端口鎖存器寫“1”,使T2截止,引腳處于懸浮狀態(tài),變?yōu)楦咦杩馆斎搿_@就是所謂的準(zhǔn)雙向口。2、P0作為地址/數(shù)據(jù)總線在系統(tǒng)擴(kuò)展時(shí),P0端口作為地址/數(shù)據(jù)總線使用時(shí),分為:

P0引腳輸出地址/數(shù)據(jù)信息。DQCLKQMUXP0.n讀鎖存器內(nèi)部總線寫鎖存器讀引腳地址/數(shù)據(jù)控制VCCT1T2P0口引腳

CPU發(fā)出控制電平“1”,打開“與”門,又使多路開關(guān)MUX把CPU的地址/數(shù)據(jù)總線與T2柵極反相接通,輸出地址或數(shù)據(jù)。由圖上可以看出,上下兩個(gè)FET處于反相,構(gòu)成了推拉式的輸出電路,其負(fù)載能力大大增強(qiáng)。DQCLKQMUXP0.n讀鎖存器內(nèi)部總線寫鎖存器讀引腳地址/數(shù)據(jù)控制VCCT1T2P0口引腳2、P0作為地址/數(shù)據(jù)總線

P0引腳輸出地址/輸入數(shù)據(jù)輸入信號(hào)是從引腳通過輸入緩沖器進(jìn)入內(nèi)部總線。此時(shí),CPU自動(dòng)使MUX向下,并向P0口寫“1”,“讀引腳”控制信號(hào)有效,下面的緩沖器打開,外部數(shù)據(jù)讀入內(nèi)部總線。2、P0作為地址/數(shù)據(jù)總線----真正的雙向口DQCLKQMUXP0.n讀鎖存器內(nèi)部總線寫鎖存器讀引腳地址/數(shù)據(jù)控制VCCT1T2P0口引腳二、P2的內(nèi)部結(jié)構(gòu)1.P2口作為普通I/O口DQCLKQMUXP2.n讀鎖存器內(nèi)部總線寫鎖存器讀引腳地址控制VCCRTP2口引腳CPU發(fā)出控制電平“0”

,使多路開關(guān)MUX倒向鎖存器輸出Q端,構(gòu)成一個(gè)準(zhǔn)雙向口。其功能與P1相同。

2.P2口作為地址總線在系統(tǒng)擴(kuò)展片外程序存儲(chǔ)器擴(kuò)展數(shù)據(jù)存儲(chǔ)器且容量超過256B(用MOVX@DPTR指令)時(shí),CPU發(fā)出控制電平“1”,使多路開關(guān)MUX倒內(nèi)部地址線。此時(shí),P2輸出高8位地址。DQCLKQMUXP2.n讀鎖存器內(nèi)部總線寫鎖存器讀引腳地址控制VCCRTP2口引腳4.1.2P1口、P3口的內(nèi)部結(jié)構(gòu)

①P1口的一位的結(jié)構(gòu)它由一個(gè)輸出鎖存器、兩個(gè)三態(tài)輸入緩沖器和輸出驅(qū)動(dòng)電路組成----準(zhǔn)雙向口。DQCLKQP1.n讀鎖存器內(nèi)部總線寫鎖存器讀引腳VCCRTP1口引腳②P3的內(nèi)部結(jié)構(gòu)DQCLKQP3.n讀鎖存器內(nèi)部總線寫鎖存器讀引腳VCCRTP3口引腳第二輸入功能第二輸出功能一、作為通用I/O口與P1口類似----準(zhǔn)雙向口(W=1)W②P3的內(nèi)部結(jié)構(gòu)DQCLKQP3.n讀鎖存器內(nèi)部總線寫鎖存器讀引腳VCCRTP3口引腳第二輸入功能第二輸出功能二、P3第二功能(Q=1)此時(shí)引腳部分輸入(Q=1、W=1)

,部分輸出(Q=1、W輸出)

。WP3第二功能各引腳功能定義: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外部寫控制P3.7:RD外部讀控制綜上所述:當(dāng)P0作為I/O口使用時(shí),特別是作為輸出時(shí),輸出級(jí)屬于開漏電路,必須外接上拉電阻才會(huì)有高電平輸出;如果作為輸入,必須先向相應(yīng)的鎖存器寫“1”,才不會(huì)影響輸入電平。當(dāng)CPU內(nèi)部控制信號(hào)為“1”時(shí),P0口作為地址/數(shù)據(jù)總線使用,這時(shí),P0口就無法再作為I/O口使用了。3.LED數(shù)碼顯示方式及電路

(1)靜態(tài)顯示方式LED顯示器工作方式有兩種:靜態(tài)顯示方式和動(dòng)態(tài)顯示方式。靜態(tài)顯示的特點(diǎn)是每個(gè)數(shù)碼管必須接一個(gè)8位鎖存器用來鎖存待顯示的字形碼。送入一次字形碼顯示字形一直保持,直到送入新字形碼為止。這種方法的優(yōu)點(diǎn)是占用CPU時(shí)間少,顯示便于監(jiān)測(cè)和控制。缺點(diǎn)是硬件電路比較復(fù)雜,成本較高。(2)動(dòng)態(tài)顯示動(dòng)態(tài)顯示的特點(diǎn)是將所有位數(shù)碼管的段選線并聯(lián)在一起,由位選線控制是哪一位數(shù)碼管有效。這樣一來,就沒有必要每一位數(shù)碼管配一個(gè)鎖存器,從而大大地簡(jiǎn)化了硬件電路。選亮數(shù)碼管采用動(dòng)態(tài)掃描顯示。所謂動(dòng)態(tài)掃描顯示即輪流向各位數(shù)碼管送出字形碼和相應(yīng)的位選,利用發(fā)光管的余輝和人眼視覺暫留作用,使人的感覺好像各位數(shù)碼管同時(shí)都在顯示。動(dòng)態(tài)顯示的亮度比靜態(tài)顯示要差一些,所以在選擇限流電阻時(shí)應(yīng)略小于靜態(tài)顯示電路中的。七段LED顯示器

使用LED顯示器時(shí),要注意區(qū)分這兩種不同的接法。為了顯示數(shù)字或字符,必須對(duì)數(shù)字或字符進(jìn)行編碼。七段數(shù)碼管加上一個(gè)小數(shù)點(diǎn),共計(jì)8段。因此為L(zhǎng)ED顯示器提供的編碼正好是一個(gè)字節(jié)。用共陰LED顯示器顯示16進(jìn)制數(shù)的編碼已列在下表。

共陰數(shù)碼管碼表

0x3f,0x06,0x5b,0x4f,0x66,0x6d,

0 1 2 345

0x7d,0x07,0x7f,0x6f,0x77,0x7c,

6 7 8 9AB

0x39,0x5e,0x79,0x71,0x00

CDEF 無顯示1、鍵盤的分類鍵盤分編碼鍵盤和非編碼鍵盤。鍵盤上閉合鍵的識(shí)別由專用的硬件編碼器實(shí)現(xiàn),并產(chǎn)生鍵編碼號(hào)或鍵值的稱為編碼鍵盤,如BCD碼鍵盤、ASCLL碼鍵盤等;而靠軟件來識(shí)別的稱為非編碼鍵盤; 在單片機(jī)組成的測(cè)控系統(tǒng)及智能化儀器中,用的最多的是非編碼鍵盤。非編碼鍵盤有分為:獨(dú)立式非編碼鍵盤和行列式非編碼鍵盤。按鍵在閉合和斷開時(shí),觸點(diǎn)會(huì)存在抖動(dòng)現(xiàn)象:

2023/12/794功能數(shù)據(jù)傳送類:29條算術(shù)運(yùn)算類:24條邏輯運(yùn)算類:24條控制轉(zhuǎn)移類:17條位操作類:17條2023/12/795常用符號(hào)Rn:工作寄存器中的寄存器R0、R1…R7之一,Ri:工作寄存器中的寄存器R0或R1#data:8位立即數(shù)#data16:16位立即數(shù)direct:片內(nèi)RAM或SFR的地址(8位)@間接尋址寄存器Bit:片內(nèi)RAM或SFR的位地址addr11:11位目的地址addr16:16位目的地址2023/12/796rel:

補(bǔ)碼形式的8位地址偏移量。偏移范圍為-128~127/:位操作指令中,該位求反后參與操作,不影響該位X:片內(nèi)RAM的直接地址或寄存器(X):相應(yīng)地址單元中的內(nèi)容→:箭頭左邊的內(nèi)容送入箭頭右邊的單元內(nèi)2023/12/797§3.2尋址方式3.2.1立即尋址ImmediateAddressing

操作數(shù)就包含在指令代碼中,在操作碼之后,稱為立即數(shù),用“#”表示。

MCS-51

如:MOVP1,#80HMOVR7,#0F5HMOVDPTR,#1245H操作數(shù)存在程序存儲(chǔ)器中2023/12/7983.2.2直接尋址

DirectAddressing直接使用數(shù)所在單元的地址找到了操作數(shù),所以稱這種方法為直接尋址。操作數(shù)在SFR、內(nèi)部RAM、位地址空間。如:MOVA,00H

MOVC,60H

MOVA,0F0H2023/12/7993.2.3寄存器尋址

RegisterAddressing對(duì)選定的工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR中的數(shù)進(jìn)行操作。

例:MOVA,R0;將R0工作寄存器中的數(shù)據(jù)送到累加器A中去。提一個(gè)問題:我們知道,工作寄存器就是內(nèi)存單元的一部分,如果我們選擇工作寄存器組0,則R0就是RAM的00H單元,那么這樣一來,MOVA,00H

和MOVA,R0不就沒什么區(qū)別了嗎?2023/12/7100

的確,這兩條指令執(zhí)行的結(jié)果是完全相同的,都是將00H單元中的內(nèi)容送到A中去,但是執(zhí)行的過程不同,執(zhí)行第一條指令需要2個(gè)機(jī)器周期,而第二條則只需要1個(gè)機(jī)器周期,第一條指令變成最終的目標(biāo)碼要兩個(gè)字節(jié)(E5H00H),而第二條則只要一個(gè)字節(jié)(E8H)就可以了。2023/12/71013.2.4寄存器間接尋址

Register

IndirectAddressing把地址放在另外一個(gè)寄存器中,根據(jù)這個(gè)寄存器中的數(shù)值決定該到哪個(gè)單元中取數(shù)據(jù)。R0,R1----8位地址,片內(nèi)低128字節(jié)或片外DPTR----16位,片外64KB

MCS-51如: MOVA,@R0 MOVXA,@R0 MOVXA,@DPTR操作數(shù)在片內(nèi)RAM中操作數(shù)在片外RAM中操作數(shù)在片外RAM中2023/12/7102以DPTR或PC為基址寄存器,累加器A為變址寄存器。把兩者內(nèi)容相加,結(jié)果作為操作數(shù)的地址。常用于查表操作。

MCS-51

MOVCA,@A+DPTR

;(A+DPTR)→A

MOVCA,@A+PC

;PC+1→PC,(A+PC)→A3.2.5變址尋址(基址+變址)Base-Register-plus-Index-Register-IndirectAddressing操作數(shù)在程序存儲(chǔ)器中2023/12/7103E0A程序存儲(chǔ)區(qū)2040H9320E0H472041H……

…DPH20DPL00ALU如:MOVCA,@A+DPTR設(shè)DPTR=2000H,A=E0H20E0H47指令代碼2023/12/71043.2.6相對(duì)尋址

將PC中的當(dāng)前內(nèi)容與指令第二字節(jié)給出的數(shù)相加,結(jié)果作為跳轉(zhuǎn)指令的轉(zhuǎn)移地址(轉(zhuǎn)移目的地址)。

PC中的當(dāng)前內(nèi)容稱為基地址(本指令后的字節(jié)地址)指令第二字節(jié)給出的數(shù)據(jù)稱為偏移量,1字節(jié)帶符號(hào)數(shù).

常用于跳轉(zhuǎn)指令。如:JC23H

若C=0,不跳轉(zhuǎn);C=1,跳轉(zhuǎn).RelativeAddressing改變PC2023/12/7105程序存儲(chǔ)區(qū)ALU如:JC231025H1000H401025H451001H

23…

…1024H471002H3023H1002H指令代碼當(dāng)前PC2023/12/7106

對(duì)片內(nèi)RAM的位尋址區(qū)和某些可位尋址的特殊功能寄存器進(jìn)行位操作時(shí)的尋址方式。如:SETB3DH;將27H.5位置1 CLRC;Cy位清03.2.7位尋址BitAddressing操作數(shù)在片內(nèi)RAM位地址區(qū)或SFR某些位中2023/12/7107尋址方式涉及的存儲(chǔ)器空間尋址方式尋址空間(操作數(shù)存放空間)立即尋址程序存儲(chǔ)器直接尋址片內(nèi)RAM低128字節(jié)、SFR寄存器尋址工作寄存器R0~R7,A,B,DPTR寄存器間接尋址片內(nèi)RAM:@R0,@R1,SP片外RAM:@R0,@R1,@DPTR變址尋址程序存儲(chǔ)器:@A+PC,@A+DPTR相對(duì)尋址程序存儲(chǔ)器256字節(jié)范圍內(nèi):PC+偏移量位尋址片內(nèi)RAM的位尋址區(qū)(20H~2FH字節(jié)地址)某些可位尋址的SFR2023/12/7108§3.3數(shù)據(jù)傳送類指令(29條)

DataTransferInstructionMCS-51助記符:助記符:

MOV、MOVX、MOVC

XCH、XCHD、SWAP

PUSH、POP

源操作數(shù)尋址方式(5種):立即尋址、直接尋址、寄存器尋址、寄存器間接尋址、變址尋址。目的操作數(shù)尋址方式(3種):直接尋址、寄存器尋址、寄存器間接尋址

除了目的操作數(shù)為ACC的指令影響奇偶標(biāo)志P外,一般不影響標(biāo)志位。2023/12/71093.3.1十六位數(shù)的傳遞指令(1條) MOVDPTR,#data168051是一種8位機(jī),這是唯一的一條16位立即數(shù)傳遞指令。功能:將一個(gè)16位的立即數(shù)送入DPTR中去。其中高8位送入DPH,低8位送入DPL。

例:MOVDPTR,#1234H執(zhí)行完了之后DPH中的值為12H,DPL中的值為34H。如果我們分別向DPH,DPL送數(shù),則結(jié)果也一樣。如下面兩條指令:MOVDPH,#35H MOVDPL,#12H。則就相當(dāng)于執(zhí)行了MOVDPTR,#3512H。2023/12/71103.3.2累加器A與片外RAM之間的數(shù)據(jù)傳遞類指令(4條)

MOVX

A,@Ri

MOVX

@Ri,A

MOVX

A,@DPTR

MOVX

@DPTR,A說明:

1.在51中,與外部存儲(chǔ)器RAM打交道的只可以是A累加器。所有需要送入外部RAM的數(shù)據(jù)必需要通過A送去,而所有要讀入的外部RAM中的數(shù)據(jù)也必需通過A讀入。在此我們可以看出內(nèi)外部RAM的區(qū)別了,內(nèi)部RAM間可以直接進(jìn)行數(shù)據(jù)的傳遞,而外部則不行。比如,要將外部RAM中某一單元(設(shè)為0100H單元的數(shù)據(jù))送入另一個(gè)單元(設(shè)為0200H單元),也必須先將0100H單元中的內(nèi)容讀入A,然后再送到0200H單元中去。2023/12/71112.要讀或?qū)懲獠康腞AM,當(dāng)然也必須要知道RAM的地址,在后兩條指令中,地址是被直接放在DPTR中的。而前兩條指令,由于Ri(即R0或R1)只是8位的寄存器,所以只提供低8位地址。高8位地址由P2口來提供。

3.使用時(shí)應(yīng)先將要讀或?qū)懙牡刂匪腿隓PTR或Ri中,然后再用讀寫命令。

例:將外部RAM中100H單元中的內(nèi)容送入外部RAM中200H單元中。

MOVDPTR,#0100H MOVXA,@DPTR MOVDPTR,#0200H MOVX@DPTR,A2023/12/71123.3.3讀程序存儲(chǔ)器指令(2條)MOVCA,@A+DPTRMOVCA,@A+PC

本組指令是將ROM中的數(shù)送入A中。本組指令也被稱為查表指令,常用此指令來查一個(gè)已做好在ROM中的表格說明:查找到的結(jié)果被放在A中,因此,本條指令執(zhí)行前后,A

中的值不一定相同。例:有一個(gè)數(shù)在R0中,要求用查表的方法確定它的平方值(此數(shù)的取值范圍是0-5)

MOVDPTR,#100H MOVA,R0 MOVCA,@A+DPTR .…

ORG0100H DB0,1,4,9,16,25如果R0中的值為2,則最終地址為100H+2為102H,到102H單元中找到的是4。2023/12/71133.3.4堆棧操作(2條)

PUSHdirect

;SP

SP+1,(SP)(direct)

POPdirect;(direct)(SP),SP

SP-1第一條為壓入指令,就是將direct中的內(nèi)容送入堆棧中,第二條為彈出指令,就是將堆棧中的內(nèi)容送回到direct中。例: MOVSP,#5FH MOVA,#100 MOVB,#20

PUSHACC PUSHB

則執(zhí)行第一條PUSHACC指令是這樣的:將SP中的值加1,即變?yōu)?0H,然后將A中的值送到60H單元中,因此執(zhí)行完本條指令后,內(nèi)存60H單元的值就是100,同樣,執(zhí)行PUSHB時(shí),是將SP+1,即變?yōu)?1H,然后將B中的值送入到61H單元中,即執(zhí)行完本條指令后,61H單元中的值變?yōu)?0。2023/12/71141.給出每條指令執(zhí)行后的結(jié)果MOV23H,#30HMOV12H,#34HMOVR0,#23HMOVR7,12HMOVR1,#12HMOVA,@R0MOV34H,@R1MOV45H,34HMOVDPTR,#6712HMOV12H,DPHMOVR0,DPLMOVA,@R0;(23H)=30H;(12H)=34H;R0=23HXXXXXXXXXXXXXXXXXXDPHDPL45H34H23H12HR7R1R0XXXXXXXX3034XXXX23XXXXXXXX3034341223671234343034341223671234343067341212;R7=34H;R1=12H;A=30H;(34H)=34H;(45H)=34H;DPTR=6712H;(12H)=67H;R0=12H;A=67H內(nèi)部RAM2023/12/7115§3.4算術(shù)運(yùn)算類指令(24條)

ArithmeticOperations

主要對(duì)8位無符號(hào)數(shù);也可用于帶符號(hào)數(shù)運(yùn)算。包括:加、減、乘、除、加1、減1運(yùn)算指令影響PSW有關(guān)位。2023/12/71163.4.1

加法指令

ADDA,#data

;A+data→A

ADDA,direct

;A+(direct)→A

ADDA,Rn

;A+Rn→A

ADDA,@Ri

;A+(Ri)→A用途:將A中的值與源操作數(shù)所指內(nèi)容相加,最終結(jié)果存在A中。1.不帶進(jìn)位位的加法指令(4條)2023/12/71172.帶進(jìn)位位的加法指令(4條)

ADDCA,Rn

;A+Rn+CY→A

ADDCA,direct

;A+(direct)+CY→A

ADDCA,@Ri

;A+(Ri)+CY→A

ADDCA,#data

;A+data+CY→A用途:將A中的值和其后面的值以及進(jìn)位位C中的值相加,最終結(jié)果存在A,常用于多字節(jié)數(shù)運(yùn)算中。說明:由于51單片機(jī)是一種8位機(jī),所以只能做8位的數(shù)學(xué)運(yùn)算,但8位運(yùn)算的范圍只有0~255,這在實(shí)際工作中是不夠的,因此就要進(jìn)行擴(kuò)展,一般是將2個(gè)8位(兩字節(jié))的數(shù)學(xué)運(yùn)算合起來,成為一個(gè)16位的運(yùn)算,這樣,可以表達(dá)的數(shù)的范圍就可以達(dá)到0~65535。2023/12/7118例:

先做67H+A0H=107H,而107H顯然超過了0FFH,因此最終保存在A中的是07H,而1則到了PSW中的CY位了。換言之,CY就相當(dāng)于是100H。然后再做10H+30H+CY,結(jié)果是41H,所以最終的結(jié)果是4107H。1067H+30A0H0001000001100111001100001010000001000001000001111067H30A0H4107H2023/12/7119設(shè):1067H存在R1R0中,30A0H存在R3R2中,計(jì)算R1R0+R3R2,結(jié)果存在R5R4中。MOVA,R0ADDA,R2;R0+R2→A和CYMOVR4,AMOVA,R1ADDCA,R3;R1+R3+CY→A和CYMOVR5,A2023/12/7120又例:

先做67H+20H=87H,沒有超過0FFH,因此最終保存在A中的是87H,而PSW中的CY=0。然后再做10H+30H+CY,結(jié)果是40H,所以最終的結(jié)果是4087H。1067H+3020H0001000001100111001100000010000001000000100001111067H3020H4087H2023/12/7121DAA在進(jìn)行BCD碼加法運(yùn)算時(shí),跟在ADD和ADDC指令之后,用于對(duì)累加器A中剛進(jìn)行的兩個(gè)BCD碼的加法的結(jié)果進(jìn)行十進(jìn)制調(diào)整。例:A=00010101BCD(代表十進(jìn)制數(shù)15)

ADDA,#83.十進(jìn)制調(diào)整指令(1條);A=1DH,按二進(jìn)制規(guī)律加;A=23H,按十進(jìn)制規(guī)律加DAA2023/12/7122

調(diào)整要完成的任務(wù)是:(1)當(dāng)累加器A中的低4位數(shù)出現(xiàn)了非BCD碼(1010~1111)或低4位產(chǎn)生進(jìn)位(AC=1),則應(yīng)在低4位加6調(diào)整,以產(chǎn)生低4位正確的BCD結(jié)果。(2)當(dāng)累加器A中的高4位數(shù)出現(xiàn)了非BCD碼(1010~1111)或高4位產(chǎn)生進(jìn)位(CY=1),則應(yīng)在高4位加6調(diào)整,以產(chǎn)生高4位正確的BCD結(jié)果。

十進(jìn)制調(diào)整指令執(zhí)行后,PSW中的CY表示結(jié)果的百位值。2023/12/7123例若(A)=01010110B,表示的BCD碼為56,(R3)=01100111B,表示的BCD碼為67,(CY)=0。執(zhí)行以下指令:ADDA,R2DAA由于(A)=00100011B,即,且(CY)=1,即結(jié)果為BCD數(shù)123。應(yīng)該注意,DA指令不能對(duì)減法進(jìn)行十進(jìn)制調(diào)整。2023/12/71243.4.2減法指令(8條)SUBBA,Rn

;A-Rn-CY→ASUBBA,direct;A-(direct)-CY→ASUBBA,@Ri

;A-(Ri)-CY→ASUBBA,#data ;A-data-CY→A將A中的值減去源操作數(shù)所指內(nèi)容以及進(jìn)位位C中的值,最終結(jié)果存在A中。如:

SUBBA,R2設(shè):A=C9H,R2=55H,CY=1,執(zhí)行指令之后,A中的值為73H。1.帶借位的減法指令(4條)2023/12/7125說明:沒有不帶借位的減法指令,如果需要做不帶位的減法指令(在做第一次相減時(shí)),只要將CY清零即可。對(duì)帶符號(hào)數(shù),要注意OV標(biāo)志。OV=1,出錯(cuò)。2023/12/7126§3.5邏輯運(yùn)算類指令(24條)主要用于對(duì)2個(gè)操作數(shù)按位進(jìn)行邏輯操作,結(jié)果送到A或直接尋址單元。

主要操作與、或、異或、移位、取反、清零等。

對(duì)標(biāo)志位的影響除了目的操作數(shù)為ACC的指令影響奇偶標(biāo)志P外,一般不影響標(biāo)志位。LogicOperations2023/12/71273.5.1邏輯或指令(6條)ORLA,Rn ;A∨Rn→AORLA,direct ;A∨(direct)→AORLA,@Ri ;A∨(Ri)→AORLA,#data ;A∨data→AORLdirect,A ;(direct)∨A→(direct)ORLdirect,#data;(direct)∨data→(direct)影響P標(biāo)志例:71H和56H相或:

01110001(71H) ∨)01010110(56H)01110111即77H后兩條指令,若直接地址為I/O端口,則為“讀-改寫”操作。

OR

LogicInstruction2023/12/71283.5.2邏輯與指令(6條)ANLA,Rn

;A∧Rn→AANLA,direct

;A∧(direct)→AANLA,@Ri

;A∧(Ri)→AANLA,#data

;A∧data→AANLdirect,A

;(direct)∧A→(direct)ANLdirect,#data

;(direct)∧data→(direct)影響P標(biāo)志例:71H和56H相與:

01110001(71H) ∧)01010110(56H)01010000即50H后兩條指令,若直接地址為I/O端口,則為“讀-改寫”操作。

ANdLogicInstruction2023/12/7129例:71H和56H相異或:

01110001(71H)

⊕)01010110(56H)

3.5.2邏輯異或指令(6條)XRLA,Rn ;A⊕Rn→AXRLA,direct ;A⊕(direct)→AXRLA,@Ri ;A⊕(Ri)→AXRLA,#data ;A⊕data→AXRLdirect,A ;(direct)⊕A→(direct)XRLdirect,#data;(direct)⊕data→(direct)影響P標(biāo)志00100111即27H后兩條指令,若直接地址為I/O端口,則為“讀-改寫”操作。

eXclusive-oR

LogicInstruction2023/12/71303.5.3清0與取反指令(2條)取反:CPLA;/A→A例:若A=5CH,執(zhí)行CPLA

結(jié)果:A=A3H清0:CLRA

;0→AComPlementLogicOperation2023/12/71313.5.4循環(huán)移位指令(4條)RLA

RRARLCARRCAA.7 A.0A.7 A.0A.7 A.0CYCYA.7 A.0后兩條指令,影響P標(biāo)志和CY。

RotateLogicinstruction2023/12/7132例:若A=5CH,CY=1,執(zhí)行RLCA后,

對(duì)RLC、RRC指令,在CY=0時(shí)

RLC相當(dāng)于乘以2 RRC相當(dāng)于除以2結(jié)果:A=B9H,CY=0,P=10101110011011100102023/12/7133§3.6

控制轉(zhuǎn)移類指令(17條)

BranchingInstruction共有控制程序轉(zhuǎn)移類指令(不包括位操作類的轉(zhuǎn)移指令)。此類指令一般不影響PSW。包括以下類型:無條件轉(zhuǎn)移和條件轉(zhuǎn)移相對(duì)轉(zhuǎn)移和絕對(duì)轉(zhuǎn)移長(zhǎng)轉(zhuǎn)移和短轉(zhuǎn)移調(diào)用與返回指令2023/12/71343.6.1

無條件轉(zhuǎn)移類指令(4條)

短轉(zhuǎn)移類指令:AJMPaddr11

長(zhǎng)轉(zhuǎn)移類指令:LJMPaddr16

相對(duì)轉(zhuǎn)移指令:SJMPrel

間接轉(zhuǎn)移指令:JMP@A+DPTR(1)上面的前三條指令,統(tǒng)統(tǒng)理解成:PC值改變,即跳轉(zhuǎn)到一個(gè)標(biāo)號(hào)處。那么他們的區(qū)別何在呢?2023/12/7135跳轉(zhuǎn)的范圍不同。

短轉(zhuǎn)移類指令:AJMPaddr11

長(zhǎng)轉(zhuǎn)移類指令:LJMPaddr16

相對(duì)轉(zhuǎn)移指令:SJMPrel轉(zhuǎn)移范圍:2KB64KB-128~+127指令構(gòu)成不同。

AJMP、LJMP后跟的是絕對(duì)地址,而SJMP后跟的是相對(duì)地址。

指令長(zhǎng)度不同原則上,所有用SJMP或AJMP的地方都可以用

LJMP來替代。2023/12/7136間接轉(zhuǎn)移指令:JMP@A+DPTR

這條指令的用途也是跳轉(zhuǎn),轉(zhuǎn)到什么地方去呢?這可不能由標(biāo)號(hào)簡(jiǎn)單地決定了。轉(zhuǎn)移地址由A+DPTR形成,并直接送入PC。指令對(duì)A、DPTR和標(biāo)志位均無影響。本指令可代替眾多的判別跳轉(zhuǎn)指令,又稱為散轉(zhuǎn)指令,多用于多分支程序結(jié)構(gòu)中。(2)第四條指令與前三條指令相比有所不同2023/12/7137例:MOVDPTR,#TAB;將TAB代表的地址送入DPTRJMP@A+DPTR;跳轉(zhuǎn)TAB:AJMPROUT0;跳轉(zhuǎn)ROUT0開始的

溫馨提示

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