單片機(jī)原理與應(yīng)用課件(全)全書教學(xué)教程完整版電子教案最全幻燈片_第1頁
單片機(jī)原理與應(yīng)用課件(全)全書教學(xué)教程完整版電子教案最全幻燈片_第2頁
單片機(jī)原理與應(yīng)用課件(全)全書教學(xué)教程完整版電子教案最全幻燈片_第3頁
單片機(jī)原理與應(yīng)用課件(全)全書教學(xué)教程完整版電子教案最全幻燈片_第4頁
單片機(jī)原理與應(yīng)用課件(全)全書教學(xué)教程完整版電子教案最全幻燈片_第5頁
已閱讀5頁,還剩339頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

單片機(jī)原理與應(yīng)用

第1章單片機(jī)的基礎(chǔ)知識(shí)學(xué)習(xí)目標(biāo)(1)掌握單片機(jī)的概念、發(fā)展過程和應(yīng)用領(lǐng)域。(2)掌握單片機(jī)的數(shù)制和字符表示。(3)掌握單片機(jī)系統(tǒng)開發(fā)與仿真的步驟與過程。(4)了解單片機(jī)應(yīng)用系統(tǒng)開發(fā)常用工具軟件。學(xué)習(xí)重點(diǎn)和難點(diǎn)(1)單片機(jī)系統(tǒng)開發(fā)及仿真過程。(2)常用數(shù)制和字符表示。1.1單片機(jī)技術(shù)的發(fā)展及應(yīng)用什么是單片機(jī)把組成微型計(jì)算機(jī)的微處理器、存儲(chǔ)器、輸入輸出接口電路集成在一塊芯片上,構(gòu)成單片微型計(jì)算機(jī),即單片機(jī)1.1.1單片機(jī)的發(fā)展歷史一、初級(jí)單片機(jī)階段1971年Intel公司最早推出的是4位單片機(jī)4004。1976年,Intel公司推出MCS-48單片機(jī),具有8位CPU,RAM,并行I/O口,8位定時(shí)器/計(jì)數(shù)器,無串行口,尋址范圍不超過4KB。此階段以8048、8039為代表。二、結(jié)構(gòu)成熟階段1978~1983年,單片機(jī)普及階段。此階段的單片機(jī)仍為8位CPU,片內(nèi)RAM和ROM的容量加大,片外尋址范圍可達(dá)64KB,增加了串行口、多機(jī)中斷處理系統(tǒng),以及16位的定時(shí)器/計(jì)數(shù)器。此階段的單片機(jī)以Intel公司的MCS-51系列、MOTOROLA公司的6801系列和Zilog公司的Z8系列單片機(jī)為代表。在此期間,單片機(jī)以其優(yōu)良的性能價(jià)格比得到了廣泛的應(yīng)用。三、性能提高階段1983年以后,16位單片機(jī)階段。此階段的單片機(jī)的CPU為16位,片內(nèi)RAM和ROM的容量進(jìn)一步增大,增加了D/A、A/D轉(zhuǎn)換器,主頻增加,運(yùn)算速度加快。此階段的單片機(jī)以Intel公司的MCS-96單片機(jī)為代表。32位的單片機(jī)也已進(jìn)入實(shí)用階段。1.1.2單片機(jī)的應(yīng)用領(lǐng)域1)智能家電:家用電器采用單片機(jī)智能化控制代替?zhèn)鹘y(tǒng)的電子線路控制,有利于提高控制功能,減小家電體積和重量。如洗衣機(jī)、空調(diào)、電視機(jī)、錄像機(jī)、微波爐、電冰箱、電飯煲以及各種視聽設(shè)備等。2)智能辦公設(shè)備:現(xiàn)代辦公室使用的辦公設(shè)備多數(shù)嵌入單片機(jī),實(shí)現(xiàn)智能化控制。如打印機(jī)、復(fù)印機(jī)、傳真機(jī)、繪圖機(jī)等。3)工業(yè)控制:工業(yè)生產(chǎn)中往往需要根據(jù)控制對(duì)象的物理特征采用不同的智能算法進(jìn)行過程控制。單片機(jī)可以采集溫度、濕度、電流、電壓、液位、流量、壓力等物理參數(shù),因此,單片機(jī)正好適合工業(yè)生產(chǎn)的智能控制,提高生產(chǎn)效率和產(chǎn)品質(zhì)量。典型的工業(yè)控制如各種測(cè)控系統(tǒng)、過程控制、電機(jī)轉(zhuǎn)速控制、溫度控制、自動(dòng)生產(chǎn)線等,在化工、建筑、冶金等各種工業(yè)領(lǐng)域都要用到單片機(jī)控制。1.1.2單片機(jī)的應(yīng)用領(lǐng)域4)智能儀器儀表:采用單片機(jī)的智能化儀表能夠提高儀器儀表的使用功能和精度,簡(jiǎn)化儀器儀表的硬件結(jié)構(gòu),使儀器儀表智能化、微型化、數(shù)字化。采用單片機(jī)的智能儀表可以進(jìn)行數(shù)據(jù)處理和存儲(chǔ)、故障診斷,典型的應(yīng)用如各種智能電氣測(cè)量?jī)x表(電壓表、示波器等)、智能傳感器、各種分析儀等。5)分布式系統(tǒng)的前端采集模塊:在采用分布式測(cè)控系統(tǒng)的工業(yè)系統(tǒng)中,經(jīng)常要采用分布式測(cè)控系統(tǒng)完成大量的分布參數(shù)的采集。在這種系統(tǒng)中,采用單片機(jī)作為分布式的前端采集模塊,系統(tǒng)具有運(yùn)行可靠、數(shù)據(jù)采集方便靈活、成本低廉等優(yōu)點(diǎn)。分布式系統(tǒng)通常分為多個(gè)子系統(tǒng),是單片機(jī)的多機(jī)應(yīng)用形態(tài)。其他領(lǐng)域:汽車電子、智能通信產(chǎn)品、航空航天系統(tǒng)、國(guó)防軍事等領(lǐng)域。1.2單片機(jī)的數(shù)制和表示1.2.1二進(jìn)制數(shù)和十六進(jìn)制數(shù)二進(jìn)制數(shù)可以表示單片機(jī)中的數(shù)據(jù)信號(hào)、地址信號(hào)和控制命令,后綴用字母B表示。例如:01101001B是8位二進(jìn)制數(shù)。為了縮短數(shù)字的位數(shù),可以用十六進(jìn)制表示,十六進(jìn)制的后綴用字母H表示。例如:69H是十六進(jìn)制數(shù),且有01101001B=69H。二進(jìn)制與十六進(jìn)制轉(zhuǎn)換二進(jìn)制數(shù)轉(zhuǎn)化為十六進(jìn)制數(shù)的轉(zhuǎn)化方法是將二進(jìn)制數(shù)從末位以四位為單位進(jìn)行劃分,每個(gè)四位二進(jìn)制數(shù)轉(zhuǎn)化為一位十六進(jìn)制數(shù),如果二進(jìn)制數(shù)的位數(shù)不是4的整數(shù)倍,則在數(shù)位的高位補(bǔ)0,使其成為4的整數(shù)倍;十六進(jìn)制數(shù)轉(zhuǎn)化為二進(jìn)制數(shù)的轉(zhuǎn)化方法是將每位十六進(jìn)制數(shù)轉(zhuǎn)化為四位二進(jìn)制數(shù)。原碼、反碼計(jì)補(bǔ)碼機(jī)器數(shù)“0”表示正號(hào),“1”表示負(fù)號(hào)。正數(shù)的原碼、反碼和補(bǔ)碼都相同,負(fù)數(shù)的原碼為其符號(hào)位和數(shù)值位,負(fù)數(shù)的反碼為其所對(duì)應(yīng)的正數(shù)按位求反,負(fù)數(shù)的補(bǔ)碼為該負(fù)數(shù)的反碼加1?!纠?-1】機(jī)器字長(zhǎng)為8位,求[+105]補(bǔ)和[-105]補(bǔ)。[+105]補(bǔ)=01101001=69H按位求反,得10010110,再加1,得10010111[-105]補(bǔ)=97H1.2.2BCD碼二進(jìn)制編碼的十進(jìn)制數(shù)1.2.3單片機(jī)的數(shù)據(jù)類型1.位(bit)位是指一個(gè)比特的二進(jìn)制數(shù)據(jù),是數(shù)據(jù)的最小長(zhǎng)度單位。2.字節(jié)(Byte) 字節(jié)是相鄰的8個(gè)二進(jìn)制位,通常從數(shù)據(jù)的末位開始劃分,每8個(gè)二進(jìn)制位稱為一個(gè)字節(jié)。一個(gè)字節(jié)也可以用2個(gè)十六進(jìn)制位表示。3.字(Word)字是2個(gè)相鄰的字節(jié),通常從末位開始劃分,每2個(gè)字節(jié)稱為一個(gè)字,字分為高低字節(jié),高字節(jié)表示高位數(shù)據(jù),低字節(jié)表示低位數(shù)據(jù)。1.3單片機(jī)中的字符字符信息包括數(shù)字、字母、符號(hào)和漢字等美國(guó)信息交換標(biāo)準(zhǔn)代碼(ASCII碼)包括英文字母大小寫、數(shù)字、專用字符(如+、-、*、/、空格等)以及非打印的控制符號(hào)。共128種編碼。用一個(gè)字節(jié)表示,低7位為ASCII碼,最高位為0。簡(jiǎn)體中文字符集GB2312是簡(jiǎn)體中文字符集的中國(guó)國(guó)家標(biāo)準(zhǔn),稱為信息交換用漢字編碼字符集-基本集,又稱GB0。GB2312共收錄6763個(gè)漢字,其中一級(jí)漢字3755個(gè),二級(jí)漢字3008個(gè),同時(shí),GB2312收錄了包括拉丁字母、希臘字母、日文平假名及片假名字母、俄語西里爾字母在內(nèi)的682個(gè)全角字符。漢字的點(diǎn)陣編碼漢字的編碼是點(diǎn)陣式的,通過軟件取??梢缘玫綕h字的點(diǎn)陣編碼例如:PCtoLCD字模舉例光(0)逐列式{0x40,0x80,0x40,0x80,0x42,0x40,0x44,0x20,0x58,0x18,0xC0,0x07,0x40,0x00,0x7F,0x00},{0x40,0x00,0xC0,0x3F,0x50,0x40,0x48,0x40,0x46,0x40,0x40,0x40,0x40,0x78,0x00,0x00},/*"光",0*/取模選項(xiàng)1.4單片機(jī)系統(tǒng)開發(fā)與仿真硬件與軟件單片機(jī)系統(tǒng)由硬件與軟件兩個(gè)部分組成,硬件實(shí)現(xiàn)單片機(jī)與外部的連接及單片機(jī)與外界信號(hào)的匹配,軟件實(shí)現(xiàn)運(yùn)算、信號(hào)采集和信息輸出。單片機(jī)的系統(tǒng)開發(fā)就是要實(shí)現(xiàn)正確的硬件設(shè)計(jì)和良好的軟件設(shè)計(jì),并使軟件設(shè)計(jì)和硬件設(shè)計(jì)相匹配,形成一個(gè)能夠完成某種具體功能的應(yīng)用系統(tǒng)。1.4單片機(jī)系統(tǒng)開發(fā)與仿真一、系統(tǒng)開發(fā)過程

1總體設(shè)計(jì):2硬件設(shè)計(jì):3軟件設(shè)計(jì):4系統(tǒng)調(diào)試和運(yùn)行單片機(jī)開發(fā)的在系統(tǒng)編程(ISP)和在應(yīng)用編程(IAP)技術(shù)1在系統(tǒng)編程技術(shù)在已經(jīng)焊接好的單片機(jī)開發(fā)系統(tǒng)中對(duì)單片機(jī)芯片直接裝入目標(biāo)程序稱為在系統(tǒng)編程技術(shù)。2在應(yīng)用編程技術(shù)單片機(jī)系統(tǒng)處于運(yùn)行狀態(tài)中對(duì)單片機(jī)的程序進(jìn)行更新而不影響系統(tǒng)運(yùn)行,并能實(shí)現(xiàn)程序切換,使系統(tǒng)運(yùn)行新加載的程序,這種技術(shù)稱為在應(yīng)用編程技術(shù)。本章小結(jié)單片機(jī)是把微處理器、存儲(chǔ)器、輸入/輸出接口電路集成在一片集成電路芯片上,構(gòu)成的單片微型計(jì)算機(jī),它具有體積小、重量輕、價(jià)格低、可靠性高和易于嵌入式應(yīng)用等優(yōu)點(diǎn),廣泛應(yīng)用在工業(yè)控制、儀器儀表、航空航天、智能家電、智能辦公設(shè)備、汽車電子、智能傳感器等領(lǐng)域。單片機(jī)系統(tǒng)由硬件與軟件兩個(gè)部分組成,硬件實(shí)現(xiàn)單片機(jī)與外部的連接及單片機(jī)與外界信號(hào)的匹配,軟件實(shí)現(xiàn)運(yùn)算、信號(hào)采集和信息輸出。單片機(jī)的系統(tǒng)開發(fā)就是要實(shí)現(xiàn)正確的硬件設(shè)計(jì)和良好的軟件設(shè)計(jì),并使軟件設(shè)計(jì)和硬件設(shè)計(jì)相匹配,形成一個(gè)能夠完成某種具體功能的應(yīng)用系統(tǒng)。單片機(jī)的數(shù)制和編碼常采用二進(jìn)制、十進(jìn)制、十六進(jìn)制、BCD碼、ASCII碼和GB2312漢字編碼,單片機(jī)系統(tǒng)開發(fā)過程主要有系統(tǒng)設(shè)計(jì)、硬件設(shè)計(jì)、軟件設(shè)計(jì)和系統(tǒng)調(diào)試運(yùn)行,單片機(jī)系統(tǒng)開發(fā)需要借助于計(jì)算機(jī)軟件完成,軟件設(shè)計(jì)調(diào)試工具有Keil、Wave,電路圖和電路板設(shè)計(jì)和仿真軟件有Multisim、Protel等,單片機(jī)的學(xué)習(xí)和掌握要在實(shí)踐中不斷深入。第2章單片機(jī)內(nèi)部結(jié)構(gòu)和匯編指令學(xué)習(xí)目標(biāo)(1)熟悉單片機(jī)的內(nèi)部結(jié)構(gòu)和應(yīng)用模式。(2)掌握單片機(jī)引腳信號(hào)功能,內(nèi)部資源。(3)掌握單片機(jī)的存儲(chǔ)器空間分配及各I/O口的特點(diǎn)。(4)掌握單片機(jī)匯編指令的格式、尋址方式、字節(jié)數(shù)及執(zhí)行時(shí)間。(5)掌握單片機(jī)匯編指令的尋址方式。(6)掌握具體的五大類匯編指令。學(xué)習(xí)重點(diǎn)和難點(diǎn)(1)單片機(jī)存儲(chǔ)器配置與空間的分布。(2)程序狀態(tài)寄存器(PSW)。(3)單片機(jī)的I/O口的特點(diǎn)。(4)匯編指令的格式及尋址方式。(5)熟練掌握總共111條匯編指令。MCS-51是美國(guó)Intel公司的8位單片機(jī)系列這一系列的單片機(jī)有多種型號(hào):8051/8751/8031、8052/8752/8032、80C51/87C51/80C31、80C52/87C52/80C32生產(chǎn)工藝1.生產(chǎn)工藝有兩種:HMOS工藝高密度短溝道MOS工藝CHMOS工藝互補(bǔ)金屬氧化物的HMOS工藝產(chǎn)品型號(hào)中帶有字母“C”的即為CHMOS芯片,CHMOS芯片的電平既與TTL電平兼容,又與CMOS電平兼容,具有低功耗的特點(diǎn),如87C51。8051的功耗為630mW,80C51的功耗只有120mW。功能基本型:51子系列,8051/8751/8031、80C51/87C51/80C31增強(qiáng)型:52子系列是,8052/8752/8032、80C52/87C52/80C32。通常選用增強(qiáng)型芯片。片內(nèi)程序存儲(chǔ)器配置即掩膜ROMEPROMROMLessFlashROM如:80C51有4K字節(jié)的掩膜ROM、87C51有4K字節(jié)的EPROM、80C31在芯片內(nèi)無程序存儲(chǔ)器、89S51具有FlashROM4K字節(jié)。現(xiàn)在人們普遍采用具有Flash存儲(chǔ)器的芯片。2.1單片機(jī)內(nèi)部結(jié)構(gòu)組成2.1.180C51單片機(jī)的片內(nèi)結(jié)構(gòu)微處理器(運(yùn)算器和控制器)存儲(chǔ)器I/O接口組成80C51單片機(jī)基本型包含有一、CPU系統(tǒng)1個(gè)8位微處理器(CPU)。時(shí)鐘電路??偩€控制。二、存儲(chǔ)器系統(tǒng)128B數(shù)據(jù)存儲(chǔ)器(RAM,可再擴(kuò)展64K)。4KB程序存儲(chǔ)器(ROM/EPROM/Flash,可外擴(kuò)至64K)。特殊功能寄存器(SFR)。三、I/O口和其他功能單元4個(gè)8位的并行I/O接口P0~P3。2個(gè)16位定時(shí)/計(jì)數(shù)器。5個(gè)中斷源,其中包括2個(gè)優(yōu)先級(jí)嵌套中斷。1個(gè)可編程的全雙工串行I/O接口。80C51單片機(jī)基本型/增強(qiáng)型的組成2.1.280C51單片機(jī)的CPU80C51單片機(jī)的核心是一個(gè)8位高性能的CPU。主要由運(yùn)算器和控制器構(gòu)成。一、運(yùn)算器算術(shù)/邏輯運(yùn)算單元ALU累加器ACC寄存器B暫存寄存器程序狀態(tài)字寄存器PSW程序狀態(tài)字寄存器PSW

程序狀態(tài)字寄存器PSW是狀態(tài)標(biāo)志寄存器,它用來保存ALU運(yùn)算結(jié)果的特征(如:結(jié)果是否為0,是否有進(jìn)位等)和處理器的狀態(tài)。這些特征和狀態(tài)可以作為控制程序轉(zhuǎn)移的條件,以供程序判別和查詢。PSW的各位定義如下,其字節(jié)地址為D0H。①Cy—

進(jìn)位、借位標(biāo)志。也可寫為C。在執(zhí)行算術(shù)運(yùn)算和邏輯運(yùn)算指令時(shí),用于記錄最高位的進(jìn)位或借位。有進(jìn)位、借位時(shí)Cy=1,否則Cy=0。Cy可以被硬件或軟件置位或清零,在位處理器中,它是位累加器。②AC—

輔助進(jìn)位、借位標(biāo)志。用于表示Acc.3有否向Acc.4進(jìn)位、借位。當(dāng)進(jìn)行加法或減法操作而產(chǎn)生由低4位數(shù)(十進(jìn)制的一個(gè)數(shù)字)向高4位數(shù)進(jìn)位或借位時(shí),Ac將被硬件置位,否則就被清0。Ac用于十進(jìn)制調(diào)整。③RS1、RS0—

當(dāng)前工作寄存器組選擇控制位。RS1、RS0=00——0組(00H~07H)RS1、RS0=01——1組(08H~0FH)RS1、RS0=10——2組(10H~17H)RS1、RS0=11——3組(18H~1FH)④OV—

溢出標(biāo)志。表示Acc在有符號(hào)數(shù)算術(shù)運(yùn)算中的溢出。即超出了帶符號(hào)數(shù)的有效范圍(-128~+127)。有溢出時(shí)OV=1,否則OV=0。⑤P—

奇偶標(biāo)志。表示Acc中“1”的個(gè)數(shù)的奇偶性。若1的個(gè)數(shù)為奇數(shù),則P置位,否則清0。⑥F0、F1—

用戶標(biāo)志位,由用戶自己定義。二、控制器程序計(jì)數(shù)器指令寄存器IR指令譯碼器ID控制邏輯電路

2.280C51單片機(jī)的引腳功能和最小系統(tǒng)、

2.2.180C51引腳封裝及功能采用雙列直插式(DIP)QFP44(QuadFlatPack)LCC(LeadedChipCarrier)總線型DIP40引腳封裝(1)電源及時(shí)鐘引腳(4個(gè))VCC:電源接入引腳;VSS:接地引腳;XTAL1:晶體振蕩器接入的一個(gè)引腳(采用外部振蕩器時(shí),對(duì)CHMOS型而言,如80C51,此引腳作為外部振蕩信號(hào)的輸入端);XTAL2:晶體振蕩器接入的另一個(gè)引腳。(采用外部振蕩器時(shí),對(duì)CHMOS型而言,此引腳懸空)。總線型DIP40引腳封裝(2)控制線引腳(4個(gè))RST/VPD:復(fù)位信號(hào)輸入引腳/備用電源輸入引腳;ALE/:地址鎖存允許信號(hào)輸出引腳/編程脈沖輸入引腳;/VPP:內(nèi)外程序存儲(chǔ)器選擇引腳/片內(nèi)EPROM(或FlashROM)編程電壓輸入引腳;:外部程序存儲(chǔ)器選通信號(hào)輸出引腳??偩€型DIP40引腳封裝(3)并行I/O口引腳(32個(gè),分成4個(gè)8位口)P0.0~P0.7:一般I/O口引腳或數(shù)據(jù)/低位地址總線復(fù)用引腳;P1.0~P1.7:一般I/O口引腳;P2.0~P2.7:一般I/O口引腳或高位地址總線引腳;P3.0~P3.7:一般I/O口引腳或第二功能引腳。與并行口P3(P3.0~P3.7)復(fù)用的第二功能引腳信號(hào)分別是:串行口輸入和輸出引腳RXD和TXD;外部中斷輸入引腳和;外部計(jì)數(shù)輸入引腳T0和T1;外部數(shù)據(jù)存儲(chǔ)器寫和讀控制信號(hào)和。2.2.280C51單片機(jī)的復(fù)位一、復(fù)位電路(a)上電復(fù)位電路(b)按鍵與上電復(fù)位二、單片機(jī)復(fù)位后的狀態(tài)1.程序計(jì)數(shù)器PC的值為0000H2.單片機(jī)啟動(dòng)后,片內(nèi)RAM為隨機(jī)值,運(yùn)行中的復(fù)位操作不改變片內(nèi)RAM的內(nèi)容。3.P0~P3為FFH,SP為07H,SBUF不定,IP、IE和PCON的有效位為0,其余的特殊功能寄存器的狀態(tài)均為00H。相應(yīng)的意義為:P0~P3=FFH,相當(dāng)于各接口鎖存器已經(jīng)寫入1,此時(shí)不但可用于輸出,也可以用于輸入;SP=07H,堆棧指針指向片內(nèi)RAM的07H單元(第一個(gè)入棧內(nèi)容將寫入08H單元);IP、IE和PCON的有效位為0,各中斷源處于低優(yōu)先級(jí)且均被關(guān)斷,串行通信的波特率不加倍;PSW=00H,當(dāng)前工作寄存器為第0組。2.2.380C51單片機(jī)CPU的時(shí)鐘與時(shí)序時(shí)序:指令微操作的時(shí)間次序稱作時(shí)序單片機(jī)的時(shí)鐘信號(hào)用來為單片機(jī)芯片內(nèi)部的各種微操作提供時(shí)間基準(zhǔn)一、時(shí)鐘產(chǎn)生方式內(nèi)部時(shí)鐘方式外部時(shí)鐘方式內(nèi)部時(shí)鐘方式外部時(shí)鐘方式電容器C1和C2的作用是穩(wěn)定頻率和快速起振,電容值在5~30pF,典型值為30pF。晶振CYS的振蕩頻率范圍為1.2~12MHz,典型值為12MHz、6MHz或11.0592MHz當(dāng)系統(tǒng)要與PC機(jī)通信時(shí),應(yīng)選擇晶振頻率為11.0592MHz,這樣便于將波特率設(shè)定為標(biāo)稱值。二、80C51的時(shí)鐘信號(hào)晶振周期(時(shí)鐘周期)S狀態(tài)機(jī)器周期指令周期三、80C51的典型時(shí)序單周期指令時(shí)序三、80C51的典型時(shí)序單字節(jié)雙周期指令時(shí)序三、80C51的典型時(shí)序訪問外部RAM的雙周期指令時(shí)序80C51單片機(jī)最小系統(tǒng)單片機(jī)最小系統(tǒng)就是使單片機(jī)工作的最低配置2.380C51單片機(jī)的存儲(chǔ)器組織隨機(jī)存取存儲(chǔ)器(RAM)只讀存儲(chǔ)器(ROM)2.3.180C51單片機(jī)的程序存儲(chǔ)器配置

尋址范圍:64KB一.芯片內(nèi)、外程序存儲(chǔ)器的選擇1.引腳接高電平2.3.180C51單片機(jī)的程序存儲(chǔ)器配置2.引腳接低電平2.3.180C51單片機(jī)的程序存儲(chǔ)器配置二.程序存儲(chǔ)器的幾個(gè)特殊單元0000H:?jiǎn)纹瑱C(jī)復(fù)位后的入口地址;0003H:外部中斷0的中斷服務(wù)子程序入口地址;000BH:定時(shí)/計(jì)數(shù)器0溢出中斷服務(wù)子程序入口地址;0013H:外部中斷1的中斷服務(wù)子程序入口地址;001BH:定時(shí)/計(jì)數(shù)器1溢出中斷服務(wù)子程序入口地址;0023H:串行接口的中斷服務(wù)子程序入口地址。對(duì)于增強(qiáng)型單片機(jī),002BH為定時(shí)/計(jì)數(shù)器2溢出或T2EX負(fù)跳變中斷服務(wù)子程序入口地址。ROM低端的入口地址基本程序結(jié)構(gòu)2.3.280C51單片機(jī)的數(shù)據(jù)存儲(chǔ)器配置一、工作寄存器區(qū)80C51單片機(jī)片內(nèi)RAM的低端地址為00H~1FH的共32個(gè)字節(jié)單元,分成4個(gè)工作寄存器組,每組占8個(gè)單元。寄存器0組:地址00H~07H;寄存器1組:地址08H~0FH;寄存器2組:地址10H~17H;寄存器3組:地址18H~1FH。當(dāng)前工作寄存器組從某一組工作寄存器換至另一組工作寄存器時(shí),原來工作寄存器組的各寄存器的內(nèi)容將被屏蔽保護(hù)起來。利用這一特性可以方便地完成快速現(xiàn)場(chǎng)數(shù)據(jù)保護(hù)任務(wù)二、位尋址區(qū)內(nèi)部RAM中地址為20H~2FH的共16個(gè)字節(jié)單元128個(gè)位的地址范圍是00H~7FH三、通用RAM區(qū)地址為30H~7FH的共80個(gè)字節(jié)單元為通用RAM區(qū)數(shù)據(jù)緩沖器80C51的堆棧一般設(shè)在30H~7FH的范圍內(nèi)。棧頂?shù)奈恢糜蒘P寄存器指示。復(fù)位時(shí)SP的初值為07H,2.3.380C51單片機(jī)的特殊功能寄存器一、與運(yùn)算器相關(guān)的寄存器(3個(gè))累加器ACC,8位。ACC是80C51單片機(jī)中最頻繁使用的寄存器,用于向ALU提供操作數(shù),許多運(yùn)算的結(jié)果也存放在累加器中;寄存器B,8位。主要用于乘、除法運(yùn)算。也可以作為RAM的一個(gè)單元使用;程序狀態(tài)字寄存器PSW,8位。它用來保存ALU運(yùn)算結(jié)果的特征和處理器狀態(tài)。其中RS1和RS0位用來設(shè)定當(dāng)前工作寄存器組。二、指針類寄存器(3個(gè))堆棧指針SP,8位。它總是指向棧頂。復(fù)位初始值為07H;數(shù)據(jù)指針DPTR,16位。用來存放16位的地址。它由兩個(gè)8位寄存器DPH和DPL組成,可對(duì)片外64KB范圍的RAM或ROM數(shù)據(jù)進(jìn)行間接尋址或變址尋址操作。三、與口相關(guān)的寄存器(7個(gè))并行I/O口P0、P1、P2、P3,均為8位。通過對(duì)這4個(gè)寄存器的讀/寫操作,可以實(shí)現(xiàn)數(shù)據(jù)從相應(yīng)并口的輸入/輸出;串行口數(shù)據(jù)緩沖器SBUF;串行口控制寄存器SCON;串行通信波特率倍增寄存器PCON(一些位還與電源控制相關(guān),所以又稱為電源控制寄存器)。四、與中斷相關(guān)的寄存器(2個(gè))中斷允許控制寄存器IE;中斷優(yōu)先級(jí)控制寄存器IP。五、與定時(shí)/計(jì)數(shù)器相關(guān)的寄存器(6個(gè))定時(shí)/計(jì)數(shù)器T0的兩個(gè)8位計(jì)數(shù)初值寄存器TH0、TL0,可以構(gòu)成16位的計(jì)數(shù)器,TH0存放高8位,TL0存放低8位;定時(shí)/計(jì)數(shù)器T1的兩個(gè)8位計(jì)數(shù)初值寄存器TH1、TL1,它們可以構(gòu)成16位的計(jì)數(shù)器,TH1存放高8位,TL1存放低8位;定時(shí)/計(jì)數(shù)器的工作方式寄存器TMOD;定時(shí)/計(jì)數(shù)器的控制寄存器TCON。80C51的特殊功能寄存器(SFR)與片內(nèi)RAM統(tǒng)一編址的21個(gè)特殊功能寄存器(SFR),離散地分布在80H~FFH的地址空間中。字節(jié)地址能被8整除的(即十六進(jìn)制的地址碼尾數(shù)為0或8的)單元是具有位地址的寄存器。在SFR地址空間中,有效位地址共有83個(gè)2.4單片機(jī)指令系統(tǒng)和尋址方式簡(jiǎn)介1.指令系統(tǒng)概述機(jī)器語言程序匯編語言匯編語言是用助記符、符號(hào)和數(shù)字來表示指令的程序語言,容易理解和記憶,它與機(jī)器語言指令是一一對(duì)應(yīng)的2.指令格式[標(biāo)號(hào):]操作碼[目的操作數(shù)][,源操作數(shù)][;注釋]例如:MOVA,#00H3.尋址方式概述:七種尋址方式立即尋址、寄存器尋址、寄存器間接尋址、直接尋址、基址加變址尋址、相對(duì)尋址、位尋址1.立即尋址立即尋址方式(也稱立即數(shù)尋址)是直接在指令中給出操作數(shù)MOVA,#05H需要在操作數(shù)前面加前綴標(biāo)志“#”2.寄存器尋址寄存器尋址方式就是指令中的操作數(shù)為某一寄存器的內(nèi)容。MOVA,R03.寄存器間接尋址寄存器中存放操作數(shù)的地址MOVA,@R04.直接尋址指令中直接給出操作數(shù)的單元地址MOVA,50HMOV50H,60H5.基址加變址尋址以DPTR或者PC的內(nèi)容作為基地址,然后在這個(gè)基地址的基礎(chǔ)上加上地址偏移量A的內(nèi)容形成真正的操作數(shù)地址MOVCA,@A+DPTR6.相對(duì)尋址相對(duì)尋址只出現(xiàn)在相對(duì)轉(zhuǎn)移指令中。目的地址=源地址+相對(duì)轉(zhuǎn)移指令字節(jié)數(shù)+relrel是單字節(jié)的帶符號(hào)的8位二進(jìn)制補(bǔ)碼數(shù)相對(duì)偏移在-128~+127單元之間7.位尋址操作數(shù)是8位二進(jìn)制數(shù)中的某一位。指令中給出的是位地址,即片內(nèi)RAM某一單元中的一位SETBbit2.4.4匯編指令描述符號(hào)Rn當(dāng)前工作寄存器R0~R7(n=0~7)。Ri當(dāng)前工作寄存器區(qū)中RO、R1(i=0,1)。direct直接地址#data包含在指令中的8位立即數(shù)。#data16包含在指令中的16位立即數(shù)。rel相對(duì)轉(zhuǎn)移指令中的偏移量,補(bǔ)碼(-128~+127)。DPTR數(shù)據(jù)指針bit直接尋址位。C或Cy進(jìn)位標(biāo)志位或位處理機(jī)中的累加器。addr1111位目的地址。addr1616位目的地址。@間接尋址寄存器前綴,如@Ri,@A+DPTR。(X)表示X地址單元或寄存器中的內(nèi)容。((X))表示以X的內(nèi)容為地址間接尋址單元的內(nèi)容。2.5數(shù)據(jù)傳送類指令通用格式如下:

MOV[目的操作數(shù)],[源操作數(shù)]1.以累加器為目的操作數(shù)的指令MOVA,Rn;(Rn)→A,n=0~7MOVA,@Ri;((Ri))→A,i=0,1MOVA,direct;(direct)→AMOVA,#data;#data→A源操作數(shù)可以是寄存器、直接地址、間接地址、和立即數(shù)MOVA,R4;(R4)→A,寄存器尋址

MOVA,@R0;((R0))→A,寄存器間接尋址

MOVA,60H;(60H)→A,直接尋址

MOVA,#20H;20H→A,立即數(shù)尋址2.以Rn為目的操作數(shù)的指令MOVRn,A;(A)→Rn,n=0~7MOVRn,direct;(direct)→Rn,n=0~7MOVRn,#data;#data→Rn,n=0~7把源操作數(shù)的內(nèi)容送入當(dāng)前工作寄存器區(qū)的R0~R7中的某一個(gè)工作寄存器例如:(A)=42H,執(zhí)行指令MOVR0,A后,R0的內(nèi)容為42H.3.以直接地址direct為目的操作數(shù)的指令MOVdirect,A;(A)→directMOVdirect,Rn;(Rn)→directMOVdirect,@Ri;((Ri))→direct,i=0,1MOVdirect1,direct2;(direct2)→(direct1)MOVdirect,#data;#data→direct把源操作數(shù)的內(nèi)容送入直接地址單元direct指的是內(nèi)部RAM或SFR地址例如:(43H)=12H,執(zhí)行指令MOV20H,43H后20H單元的內(nèi)容為12H.

MOV@Ri,A;(A)→((Ri)),i=0,1MOV@Ri,direct;(direct)→((Ri)),i=0,1MOV@Ri,#data;#data→((Ri)),i=0,1把源操作數(shù)內(nèi)容送入R0或R1指定的存儲(chǔ)單元中4.以寄存器間接地址為目的操作數(shù)的指令例如:(A)=12H,(R0)=30H,執(zhí)行指令MOV@R0,A后結(jié)果為RAM中(30H)=12HMOV@R0,AMOV30H,A。5.十六位數(shù)據(jù)傳送指令MOVDPTR,#data16

將高8位立即數(shù)dataH送入DPH,低8位立即數(shù)dataL送入DPL。如“MOVDPTR,#1234H”,執(zhí)行結(jié)果為(DPH)=12H,(DPL)=34H。6.堆棧操作指令PUSHdirect功能:首先將堆棧指針SP加1,然后把direct中的內(nèi)容送到堆棧指針SP所指的內(nèi)部RAM單元中。例如:當(dāng)(SP)=60H,(A)=12H,(B)=34H,執(zhí)行下列指令

PUSHACC;(SP)+1=61H→SP,(A)→61HPUSHB;(SP)+1=62H→SP,(B)→62H結(jié)果為(61H)=12H,(62H)=34H,(SP)=62H(2)出棧指令POPdirect功能:將堆棧指針SP指示的棧頂內(nèi)容送到direct字節(jié)單元中,堆棧指針SP減1。例如:當(dāng)(SP)=62H,(62H)=12H,(61H)=34H,執(zhí)行下列指令POPACC;((SP))→A,(SP)-1→SPPOPPSW;((SP))→PSW,(SP)-1→SP結(jié)果為(A)=12H,(PSW)=34H,(SP)=60H。7.查表指令(1)MOVCA,@A+PC(2)MOVCA,@A+DPTR讀程序存儲(chǔ)器中表格數(shù)據(jù)執(zhí)行這兩條指令時(shí),單片機(jī)的引腳信號(hào)有效例如:當(dāng)(A)=06H,執(zhí)行地址2000H處的指令2000H:MOVCA,@A+PC該指令占用一個(gè)字節(jié),下一條指令的地址為2001H,(PC)=2001H,再加上A中的06H,得到2007H,結(jié)果是將程序存儲(chǔ)器中的2007H的內(nèi)容送入累加器A。例如:(DPTR)=2000H,(A)=06H,執(zhí)行指令MOVCA,@A+DPTR結(jié)果是將程序存儲(chǔ)器中2006H單元內(nèi)容送入累加器A中。8.累加器A與片外RAM傳送指令MOVXA,@Ri;((Ri))→AMOVXA,@DPTR;((DPTR))→AMOVX@Ri,A;A→((Ri))MOVX@DPTR,A;A→((DPTR))可以實(shí)現(xiàn)I/O接口輸入/輸出數(shù)據(jù)@Ri間址作低8位地址指針,高8位地址由P2口送出尋址范圍64KB讀寫信號(hào)9.字節(jié)交換指令XCHA,RnXCHA,@RiXCHA,direct功能:將累加器A中的內(nèi)容與源操作數(shù)的內(nèi)容進(jìn)行互換例:若(R0)=80H,(A)=20H。執(zhí)行指令XCHA,R0

后,(A)=80H,(R0)=20H。

2/5/202310510.半字節(jié)交換指令XCHDA,@Ri功能:將Ri間接尋址的單元內(nèi)容與累加器A中內(nèi)容的低4位互換,高4位內(nèi)容不變。該操作只影響標(biāo)志位P。例如:(R0)=30H,(30H)=67H,(A)=20H,執(zhí)行指令XCHDA,@R0后,(A)=27H,(30H)=60H。11.累加器半字節(jié)交換指令SWAPA功能:將累加器A的高4位和低4位互換。例如:(A)=56H,執(zhí)行指令SWAPA,結(jié)果(A)=65H.2.6算術(shù)運(yùn)算和邏輯運(yùn)算類指令2.6.1算術(shù)運(yùn)算類指令MCS-51算術(shù)運(yùn)算指令包括加、減、乘、除、基本四則運(yùn)算針對(duì)8位二進(jìn)制無符號(hào)數(shù)其中:√表示有影響,×表示無影響,0表示清零

指令

標(biāo)志ADD、ADDC、SUBBDAMULDIVCY√√00AC√√××OV√×√√P√√√√1.加法指令A(yù)DDA,Rn;(A)+(Rn)→AADDA,@Ri;(A)+((Ri))→AADDA,direct;(A)+(direct)→AADDA,#data;(A)+data→A影響標(biāo)志位AC、CY、OV、P算數(shù)運(yùn)算影響標(biāo)志位示例例:有2個(gè)參與相加的機(jī)器數(shù),一個(gè)是84H,另一個(gè)是8DH。試分析運(yùn)算過程及其對(duì)狀態(tài)標(biāo)志的影響。結(jié)果:CY為1;AC為1;OV為1;P為0

2/5/2023111例3-1:設(shè)(A)=0C3H,(R0)=0AAH,執(zhí)行指令A(yù)DDA,R0(A):11000011+(R0):10101010101101101所得和為6DH,標(biāo)志位CY=1,AC=0,P=1,OV=1,溢出標(biāo)志OV在CPU內(nèi)部根據(jù)異或門輸出置位,OV=C72.帶進(jìn)位加法指令A(yù)DDCA,Rn;(A)+(Rn)+CY→AADDCA,@Ri;(A)+((Ri))+CY→AADDCA,direct;(A)+(direct)+CY→AADDCA,#data;(A)+data+CY→A功能:同時(shí)把源操作數(shù)所指出的內(nèi)容和進(jìn)位標(biāo)志位CY都加到累加器A中,結(jié)果存放在A中將影響標(biāo)志位AC,CY,OV,P常用于多字節(jié)加法例3-2:設(shè)(A)=85H,(20H)=0FFH,CY=1,執(zhí)行指令A(yù)DDA,20H(A):10000101+(R0):11111111110000101所得和為85H,標(biāo)志位CY=1,AC=1,OV=0,P=13.增1指令I(lǐng)NCAINCRn;n=0~7INCdirectINC@Ri;i=0,1INCDPTR不影響PSW4.十進(jìn)制調(diào)整指令DAA;調(diào)整A的內(nèi)容為正確的BCD碼兩個(gè)壓縮的BCD碼按二進(jìn)制相加后,必須經(jīng)過調(diào)整方能得到正確的和。

當(dāng)A中低4位出現(xiàn)了非BCD碼(1010~1111)或低4位的進(jìn)位AC=1,則應(yīng)在低4位加6調(diào)整。當(dāng)A中高4位出現(xiàn)了非BCD碼(1010~1111)或高4位的進(jìn)位CY=1,則應(yīng)在高4位加6調(diào)整。

執(zhí)行十進(jìn)制調(diào)整指令后,PSW中的CY表示結(jié)果的百位值2/5/2023116例:若(A)=01101001B,表示的BCD碼為(R2)=01011000B,表示的BCD碼為,執(zhí)行指令:ADDA,R2DAA(A)=00100111B,即且(CY)=1,即正確的結(jié)果為:127

2/5/20231175.帶借位減法用此組指令完成不帶借位的減法,只需先清CY為0即可

CY為1,表示D7位需借位

AC為1,表示D3位需借位OV為1,表示“D6有借位D7無借位”或“D7有借位D6無借位”2/5/2023118例:若(A)=C9H,(R2)=54H,(CY)=1,試分析指令SUBBA,R2執(zhí)行后,累加器的內(nèi)容及狀態(tài)標(biāo)志。(A):11001001(201)-(CY):

1(1)11001000-(R2):01010100(84)結(jié)果:01110100(116)即:(A)=74H,(CY)=0,(AC)=0,(OV)=1,(P)=0。分析:數(shù)據(jù)為無符號(hào)類型。該指令執(zhí)行前CY=1,說明此指令不是運(yùn)算的最低字節(jié),即在此指令執(zhí)行之前,一定執(zhí)行過低字節(jié)的減法并產(chǎn)生了借位。因此,本次相減(201-1-84=116=74H)結(jié)果為74H。2/5/20231196.減1指令這組指令僅DECA

影響P標(biāo)志。其余指令都不影響標(biāo)志位的狀態(tài)。2/5/20231207.乘法指令僅有一條乘法指令MULAB;A與B相乘無符號(hào)結(jié)果:B中為積的高8位,A中為積的低8位。

CY總是被清0;OV=1表示積大于FFH

8.除法指令僅有一條除法指令DIVAB;A除以B

無符號(hào)結(jié)果:A中為商的整數(shù)部分,B中為余數(shù)

CY總是被清0;OV=1表示除數(shù)為02/5/20231212.6.2邏輯操作類指令邏輯操作包括與、或、異或、清零、求反、移位等操作1.累加器A清零指令CLRA該指令的功能是將累加器A的內(nèi)容清零,不影響CY、AC、OV等標(biāo)志位。2.累加器A求反指令CPLA該指令的功能是將累加器A的內(nèi)容進(jìn)行求反操作,不影響CY、AC、OV等標(biāo)志位。3.累加器A循環(huán)左移指令RLA該指令功能是將累加器A的內(nèi)容向左循環(huán)移動(dòng)一位,最高位移入最低位。4.累加器A循環(huán)右移指令RRA該指令功能是將累加器A的內(nèi)容向右循環(huán)移動(dòng)一位,最低位移入最高位。5.帶進(jìn)位循環(huán)左移指令RLCA該指令功能是將累加器A的內(nèi)容連同進(jìn)位標(biāo)志位CY一起向左循環(huán)移一位,ACC.7移入CY,CY移入ACC.0。6.帶進(jìn)位循環(huán)右移指令RRCA該指令功能是將累加器A的內(nèi)容連同進(jìn)位標(biāo)志位CY一起向右循環(huán)移一位,ACC.0移入CY,CY移入ACC.7。例3-4:無符號(hào)二進(jìn)制數(shù)(A)=10101100B,CY=0。執(zhí)行指令RLCA的結(jié)果為A=01011000,CY=17.邏輯“與”指令A(yù)NLA,#data;ANLA,direct;ANLA,Rn;ANLA,@Ri;ANLdirect,#dataANLdirect,A功能:位進(jìn)行邏輯與,結(jié)果存入目的操作數(shù)例2-6:(A)=85H,(40H)=7FH,執(zhí)行指令 ANLA,40H

10000101∧)0111111100000101結(jié)果為(A)=05H8.邏輯“或”指令ORLA,#data;ORLA,direct;ORLA,Rn;ORLA,@Ri;ORLdirect,#dataORLdirect,A按位進(jìn)行邏輯或,結(jié)果存入目的操作數(shù)。例2-7:(A)=76H,R5=8AH,執(zhí)行指令 ORLA,R5

01110110∨)1000101011111110結(jié)果為(A)=FEH9.邏輯“異或”指令XRLA,#data;XRLA,direct;XRLA,Rn;XRLA,@Ri;XRLdirect,#data;XRLdirect,A;按位進(jìn)行邏輯“異或”,結(jié)果存入目的操作數(shù)例2-8:(A)=56H,R2=77H,執(zhí)行指令 XRLA,R2

01010110⊕)0111011100100001結(jié)果為(A)=21H2.7控制轉(zhuǎn)移類和位操作指令2.7.1控制轉(zhuǎn)移類指令無條件轉(zhuǎn)移:條件轉(zhuǎn)移:絕對(duì)轉(zhuǎn)移:相對(duì)轉(zhuǎn)移:長(zhǎng)轉(zhuǎn)移或長(zhǎng)調(diào)用:目的地址距當(dāng)前PC64KB地址范圍內(nèi)。短轉(zhuǎn)移或短調(diào)用:目的地址距當(dāng)前PC2KB地址范圍。這一類指令的功能是改變指令的執(zhí)行順序絕對(duì)轉(zhuǎn)移AJMPaddr11;PC←(PC)+2,PC10~0←addr111.無條件轉(zhuǎn)移指令長(zhǎng)轉(zhuǎn)移(長(zhǎng)跳轉(zhuǎn))LJMPaddr16;PC←addr16相對(duì)轉(zhuǎn)移SJMPrel;PC←(PC)+2,PC←(PC)+rel目標(biāo)地址rel

對(duì)應(yīng)范圍為+127~-128。

2/5/2023137【例】若“NEWADD”為地址1022H,PC的當(dāng)前值為1000H。執(zhí)行指令SJMPNEWADD后,程序?qū)⑥D(zhuǎn)向1022H處執(zhí)行(rel=20H=1022H-1000H-2)。解析如下:2/5/2023138間接轉(zhuǎn)移(散轉(zhuǎn)移)JMP@A+DPTR;PC←(PC)+1,PC←(A)+(DPTR)

可完成多條判跳指令的功能【例】功能:當(dāng)(A)=00H時(shí),程序?qū)⑥D(zhuǎn)到ROUT0處執(zhí)行;當(dāng)(A)=02H時(shí),程序?qū)⑥D(zhuǎn)到ROUT1處執(zhí)行;……。

MOVDPTR,#TABLEJMP@A+DPTRTABLE:AJMPROUT0AJMPROUT1AJMPROUT2AJMPROUT32/5/20231392.條件轉(zhuǎn)移指令(1)累加器判零轉(zhuǎn)移指令JZrel;A=0則轉(zhuǎn)移,否則順次執(zhí)行JNZrel;A≠0則轉(zhuǎn)移,否則順次執(zhí)行(2)減1不為零轉(zhuǎn)移指令DJNZRn,relDJNZdirect,rel(3)比較不相等轉(zhuǎn)移指令CJNEA,direct,relCJNEA,#data,relCJNERn,#data,relCJNE@Ri,#data,rel3.調(diào)用及返回指令長(zhǎng)調(diào)用指令

短調(diào)用指令

指令執(zhí)行時(shí)將返回地址入棧

SP應(yīng)設(shè)為合適值(默認(rèn)值07H)

例:若(SP)=07H,標(biāo)號(hào)“XADD”表示的實(shí)際地址為0345H,PC的當(dāng)前值為0123H。執(zhí)行指令A(yù)CALLXADD

后:返回地址為:(PC)+2=0125H。其低8位的25H壓入堆棧的08H單元,其高8位的01H壓入堆棧的09H單元(低地址對(duì)應(yīng)于低字節(jié))。(PC)=0345H,程序轉(zhuǎn)向目標(biāo)地址0345H處執(zhí)行。2/5/2023144(3)子程序返回指令中斷子程序返回指令RETI專用于中斷服務(wù)程序返回,它具有清除內(nèi)部相應(yīng)的中斷狀態(tài)觸發(fā)器(以保證正確的中斷邏輯)的功能。

4.空操作指令

NOPCPU不進(jìn)行任何實(shí)際操作,除PC加1外,不影響其他寄存器和標(biāo)志位。該指令常用來產(chǎn)生一個(gè)機(jī)器周期的延時(shí)2.7.2位操作指令在程序中位地址的表達(dá)有多種方式:1)用直接位地址表示,如D4H。2)用“·”操作符號(hào)表示,如PSW.4,或D0H.43)用位名稱表示,如RS1。4)用用戶自定義名表示。如ABCBITD4H,其中ABC定義為D4H位的位名,BIT為位定義偽指令。以上各例均表示PSW.4的RS1位。1.位清零指令CLRC;0→CYCLRbit;0→bit2.位置1指令SETBC;1→CYSETBbit;1→bit3.位取反指令CPLC;CY→CYCPLbit;bit→bit4.位傳送指令MOVC,bit;(bit)→CYMOVbit,C;CY→(bit)5.位邏輯“與”指令A(yù)NLC,bit;CY∧(bit)→CYANLC,/bit;CY∧(/bit)→CY6.位邏輯“或”指令ORLC,bit;CY∨(bit)→CYORLC,/bit;CY∨(/bit)→CY7.位轉(zhuǎn)移指令JCrel;CY=1,則轉(zhuǎn)移,否則程序順序執(zhí)行JNCrel;CY=0,則轉(zhuǎn)移,否則程序順序執(zhí)行JBbit,rel;(bit)=1,則轉(zhuǎn)移,否則程序順序執(zhí)行JNBbit,rel;(bit)=0,則轉(zhuǎn)移,否則程序順序執(zhí)行JBCbit,rel;(bit)=1,則轉(zhuǎn)移,且該位清零;否則程序順序執(zhí)行2.880C51并行口結(jié)構(gòu)與驅(qū)動(dòng)4個(gè)8位的并行I/O接口,分別是P0、P1、P2和P3由口鎖存器、輸出驅(qū)動(dòng)器和輸入緩沖器組成P0口、P2口可用作通用的輸入/輸出口。當(dāng)需要外部程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器擴(kuò)展時(shí)(如80C31的應(yīng)用),P0口作為分時(shí)復(fù)用的低8位地址/數(shù)據(jù)總線,P2口作為高8位地址總線。P1口是80C51唯一的單功能口,僅能用作通用的數(shù)據(jù)輸入/輸出口。P3口是雙功能口,除具有數(shù)據(jù)輸入/輸出功能外,每一口線還具有特殊的第二功能。2.880C51并行口結(jié)構(gòu)與驅(qū)動(dòng)2.8.1P0口的結(jié)構(gòu)2.880C51并行口結(jié)構(gòu)與驅(qū)動(dòng)2.8.2P1口的結(jié)構(gòu)2.880C51并行口結(jié)構(gòu)與驅(qū)動(dòng)2.8.3P2口的結(jié)構(gòu)2.880C51并行口結(jié)構(gòu)與驅(qū)動(dòng)2.8.4P3口的結(jié)構(gòu)2.8.5并口驅(qū)動(dòng)簡(jiǎn)單外設(shè)一、并口的負(fù)載能力對(duì)于典型的單片機(jī)器件AT89S52,每根口線最大可吸收10mA的(灌)電流;但P0口所有引腳吸收電流的總和不能超過26mA,P1、P2和P3口每個(gè)口吸收電流的總和限制在15mA,全部4個(gè)并口所有口線的吸收電流總和限制在71mA。2.8.5并口驅(qū)動(dòng)簡(jiǎn)單外設(shè)二、驅(qū)動(dòng)輸出設(shè)備1.驅(qū)動(dòng)發(fā)光二極管LED2.驅(qū)動(dòng)數(shù)碼管2.驅(qū)動(dòng)數(shù)碼管若數(shù)據(jù)總線D7~D0與dp、g、f、e、d、c、b、a順序?qū)?yīng)相接,要想顯示數(shù)字“8”時(shí),共陰極數(shù)碼管送01111111B至數(shù)據(jù)總線,即字形碼為7FH;而共陽極數(shù)碼管送數(shù)據(jù)10000000B至數(shù)據(jù)總線,即字形碼為80H。3.驅(qū)動(dòng)蜂鳴器三、驅(qū)動(dòng)輸入設(shè)備按鍵開關(guān)的抖動(dòng)現(xiàn)象和去抖電路通常采用軟件延時(shí)10ms的方法本章小結(jié)180C51單片機(jī)由微處理器、存儲(chǔ)器、I/O接口以及特殊功能寄存器SFR構(gòu)成內(nèi)部的各種微操作都以晶振周期為時(shí)序基準(zhǔn)。晶振信號(hào)二分頻后形成兩相錯(cuò)開的節(jié)拍信號(hào)P1和P2,十二分頻后形成機(jī)器周期。一個(gè)機(jī)器周期包含12個(gè)晶振周期(或6個(gè)S狀態(tài))。指令的執(zhí)行時(shí)間稱作指令周期。80C51單片機(jī)有4個(gè)8位的并行I/O口:存儲(chǔ)器在物理上設(shè)計(jì)成程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器兩個(gè)獨(dú)立的空間單片機(jī)的復(fù)位操作使單片機(jī)進(jìn)入初始化狀態(tài)。本章小結(jié)2單片機(jī)的復(fù)位操作使單片機(jī)進(jìn)入初始化狀態(tài)。復(fù)位后,PC內(nèi)容為0000H,P0口~P3口內(nèi)容均為FFH,SP內(nèi)容為07H,SBUF內(nèi)容不定,IP、IE和PCON的有效位為0,其余的特殊功能寄存器的內(nèi)容均為00H。對(duì)于典型的單片機(jī)器件AT89S52,每根口線最大可吸收10mA的(灌)電流;但P0口所有引腳吸收電流的總和不能超過26mA,P1、P2和P3每個(gè)口吸收電流的總和限制在15mA,全部4個(gè)并口所有口線的吸收電流總和限制在71mA。簡(jiǎn)單輸出設(shè)備有LED二極管、LED數(shù)碼管及蜂鳴器等。用單片機(jī)驅(qū)動(dòng)時(shí)除了考慮口線的負(fù)載能力,還要注意P0口上拉電阻的配置。簡(jiǎn)單的輸入設(shè)備有按鍵和撥動(dòng)開關(guān)。對(duì)于按鍵開關(guān),按鍵在閉合和斷開時(shí),觸點(diǎn)會(huì)存在抖動(dòng)現(xiàn)象。按鍵較少時(shí)可以采用硬件去抖電路,按鍵較多時(shí)采用軟件延時(shí)消抖。本章小結(jié)3MCS-51單片機(jī)的匯編指令系統(tǒng)由111條指令組成。尋址方式是指尋找操作數(shù)的方法,或者說通過什么方式找到操作數(shù)。匯編指令系統(tǒng)可分為五大類:數(shù)據(jù)傳送類指令、算術(shù)運(yùn)算類指令、邏輯運(yùn)算類指令、控制轉(zhuǎn)移類指令、位操作類指令。數(shù)據(jù)傳送類指令完成的功能是在單片機(jī)內(nèi)部或者和單片機(jī)外部進(jìn)行數(shù)據(jù)的傳輸,包括內(nèi)部傳送指令和外部傳送指令。算術(shù)運(yùn)算類指令是將數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算,有些指令會(huì)對(duì)標(biāo)志位產(chǎn)生影響。邏輯運(yùn)算類指令是將數(shù)據(jù)進(jìn)行邏輯運(yùn)算,例如與、或、邏輯移位等操作。控制轉(zhuǎn)移類指令是控制程序執(zhí)行的順序,其中的跳轉(zhuǎn)及調(diào)用指令能夠靈活的控制指令運(yùn)行的方式。位操作類指令是對(duì)可尋址位的內(nèi)容進(jìn)行操作,包括位傳送、及位邏輯操作等。第3章C51語言編程基礎(chǔ)學(xué)習(xí)目標(biāo)(1)了解C51編程的一般設(shè)計(jì)流程。(2)掌握C51程序設(shè)計(jì)的基本方法。學(xué)習(xí)重點(diǎn)和難點(diǎn)(1)C51的數(shù)據(jù)類型、存儲(chǔ)器類型和存儲(chǔ)模式。(2)C51的函數(shù)定義及使用方法。(3)C51指針的使用。3.1單片機(jī)的C51基礎(chǔ)知識(shí)(1)對(duì)單片機(jī)的指令系統(tǒng)不要求了解,僅要求對(duì)8051的存儲(chǔ)器結(jié)構(gòu)有初步了解;(2)寄存器分配、不同存儲(chǔ)器的尋址及數(shù)據(jù)類型等細(xì)節(jié)可由編譯器管理;(3)程序有規(guī)范的結(jié)構(gòu),可分成不同的函數(shù),這種方式可使程序結(jié)構(gòu)化;(4)提供的庫包含許多標(biāo)準(zhǔn)子程序,具有較強(qiáng)的數(shù)據(jù)處理能力;(5)由于具有方便的模塊化編程技術(shù),使已編好程序容易移植;3.1.2C51的基本數(shù)據(jù)類型1.char字符類型無符號(hào)字符類型unsignedchar有符號(hào)字符類型signedchar,默認(rèn)值為signedchar類型。2.int整型有符號(hào)int整型數(shù)signedint無符號(hào)整型數(shù)unsignedint,默認(rèn)值為signedint類型3.long長(zhǎng)整型有符號(hào)long長(zhǎng)整型signedlong無符號(hào)長(zhǎng)整型unsignedlong,默認(rèn)值為signedlong類型4.float浮點(diǎn)型5.bit位變量6.sfr特殊功能寄存器,例如:sfrP1=0x907.sfr1616位特殊功能寄存器8.sbit可尋址位sfrP1=0x90;//因P1端口的寄存器是可位尋址的,所以能定義sbitP1_1=P1^1;//P1_1為P1中的P1.1引腳3.1.3存儲(chǔ)器類型存儲(chǔ)器類型描述data直接尋址內(nèi)部數(shù)據(jù)存儲(chǔ)器,訪問變量速度最快(128bytes)bdata可位尋址內(nèi)部數(shù)據(jù)存儲(chǔ)器,允許位與字節(jié)混合訪問(16bytes)idata間接尋址內(nèi)部數(shù)據(jù)存儲(chǔ)器,可訪問全部地址空間(256bytes)pdata分頁(256bytes)外部數(shù)據(jù)存儲(chǔ)器,由操作碼MOVX@Ri訪問xdata外部數(shù)據(jù)存儲(chǔ)器(64KB),由MOVX@DPTR訪問code代碼數(shù)據(jù)存儲(chǔ)器(64KB),由MOVC@A+DPTR訪問3.1.4存儲(chǔ)器模式存儲(chǔ)器模式描述SMALL參數(shù)及局部變量放入可直接尋址的內(nèi)部寄存器(最大128bytes128bytes,默認(rèn)存儲(chǔ)器類型是DATA)COMAPCT參數(shù)及局部變量放入分頁外內(nèi)部存儲(chǔ)區(qū)(最大256bytes256bytes,默認(rèn)存儲(chǔ)器類型是PDATA)LARGE參數(shù)及局部變量直接放入外部數(shù)據(jù)存儲(chǔ)器(最大64K64K,默認(rèn)存儲(chǔ)器類型是XDATA)3.1.5C51常量1.整型常量能表示為十進(jìn)制如123、0、-89等。十六進(jìn)制則以0x開頭如0x34、-0x3B等。長(zhǎng)整型就在數(shù)字后面加字母L,如104L、034L等。2.浮點(diǎn)型常量可分為十進(jìn)制和指數(shù)表示形式。如0.888,3345.345,0.0等如125e3,7e9,-3.0e-33.字符型常量是單引號(hào)內(nèi)的字符,如‘a(chǎn)’,‘d’等,4.字符串型常量由雙引號(hào)內(nèi)的字符組成,如“test”,“OK”等。5.位常量,它的值是一個(gè)二進(jìn)制數(shù)。3.2C51的基本運(yùn)算1.算術(shù)運(yùn)算符+加A=x+y-減B=x-y*乘C=x*y/除D=x/y%取余數(shù)E=x%y2.關(guān)系運(yùn)算符符號(hào)功能范例說明==相等x==y比較x與y變量的值,相等則結(jié)果為1,不相等則為0!=不相等x!=y比較x與y變量的值,不相等則結(jié)果為1,相等則為0>大于x>y若x變量的值大于y變量的值,其結(jié)果為1,否則為0<小于x<y若x變量的值小于y變量的值,其結(jié)果為1,否則為0>=大等于x>=y若x變量的值大于或等于y變量的值,其結(jié)果為1,否則為0<=小等于x<=y若x變量的值小于或等于y變量的值,其結(jié)果為1,否則為03.邏輯運(yùn)算符符號(hào)功能范例說明&&及運(yùn)算(x>y)&&(y>z)若x變量的值大于y變量的值,且y變量的值也大于z變量的值,其結(jié)果為1,否則為0||或運(yùn)算(x>y)||(y>z)若x變量的值大于y變量的值,或y變量的值大于z變量的值,其結(jié)果為1,否則為0!反相運(yùn)算!(x>y)若x變量的值大于y變量的值,其結(jié)果為0,否則為14.位運(yùn)算符符號(hào) 功能 范例& 及運(yùn)算 A=x&y| 或運(yùn)算 B=x|y^ 異或 C=x^y~ 取反 D=~x<< 左移 E=x<<n>> 右移 F=x>>n5.遞增/減運(yùn)算符符號(hào)功能范例說明++加1x++將x變量的值加1--減1x--將x變量的值減13.3C51的程序設(shè)計(jì)基礎(chǔ)1.while循環(huán)語句的格式如下:While(表達(dá)式){語句;}2.for循環(huán)語句for語句是一個(gè)很實(shí)用的計(jì)數(shù)循環(huán),其格式如下:格式:for(表達(dá)示1;表達(dá)示2;表達(dá)示3) { 語句;}3.if選擇語句if-else語句提供條件判斷的語句,稱為條件選擇語句,其格式如下:if(表達(dá)式){ 語句1;}else{ 語句2;}4.多分支條件語句和開關(guān)語句

(1)多分支語句格式如下:if(條件表達(dá)式1)語句1elseif(條件表達(dá)式2)語句2…elseif(條件表達(dá)式m)語句m…elseif(條件表達(dá)式n)語句nelse語句p4.多分支條件語句和開關(guān)語句

(2)開關(guān)語句switch(表達(dá)式){case常量1:語句1break;case常量2:語句2break;…case常量m:語句mbreak;…case常量n:語句nbreak;default:語句p}5.其它語句(1)絕對(duì)跳轉(zhuǎn)語句:gotogoto標(biāo)號(hào);(2)返回語句:returnreturn(表達(dá)式或變量);(3)退出語句:break和continue

3.3.2數(shù)組unsignedintxcount[10];//定義無符號(hào)整形數(shù)組,有10個(gè)數(shù)據(jù)單元charinputstring[5];//定義字符形數(shù)組,有5個(gè)數(shù)據(jù)單元floatoutnum[10],[10];//定義浮點(diǎn)型數(shù)組,有100個(gè)數(shù)據(jù)單元表3-10數(shù)組定義數(shù)據(jù)類型數(shù)組名[常量表達(dá)式];數(shù)據(jù)類型數(shù)組名[常量表達(dá)式1]......[常量表達(dá)式N];

3.3.2指針用一個(gè)變量來存放另一個(gè)變量的地址,那么用來存放變量地址的變量稱為“指針變量”變量的指針就是變量的地址,用取地址運(yùn)算符‘&’取得賦給指針變量。&STR就是把變量STR的地址取得。要訪問變量STR除了能用‘STR’這個(gè)變量名來訪問之外,還能用變量地址來訪問。方法是先用&STR取變量地址并賦于STRIP指針變量,然后就能用*STRIP來對(duì)STR進(jìn)行訪問了?!?’是指針運(yùn)算符,用它能取得指針變量所指向的地址的值。

3.4C51的函數(shù)1.函數(shù)的定義函數(shù)定義格式如下:返回值的數(shù)據(jù)類型函數(shù)名(形參變量1說明,。。。,形參變量n說明){局部變量定義函數(shù)體語句返回語句}void函數(shù)名(void){函數(shù)體語句}2.主函數(shù)voidmain(void){語句}3.中斷函數(shù)voidT0_interrupt(void)interrupt1中斷源名稱中斷號(hào)外部中斷INT00定時(shí)器/計(jì)數(shù)器T0中斷1外部中斷INT12定時(shí)器/計(jì)數(shù)器T1中斷3串行口中斷UART4定時(shí)器/計(jì)數(shù)器T2中斷T5在main函數(shù)里調(diào)用TwoDataAdd函數(shù):voidmain(void){chara,b;intc;a=38;b=99;c=TwoDataAdd(a,b);}4.庫函數(shù)函數(shù)庫對(duì)應(yīng)的頭文件功能字符函數(shù)CTYPE.H與ASKII碼表相關(guān)一般I/O函數(shù)STDIO.H與UART相關(guān)字符串函數(shù)STRING.H字符串的截取、查找、比較等標(biāo)準(zhǔn)函數(shù)STDLIB.H字符串與數(shù)字之間的轉(zhuǎn)換數(shù)學(xué)函數(shù)MATH.H求絕對(duì)值、平方開方、三角函數(shù)絕對(duì)地址訪問ABSACC.H絕對(duì)地址訪問內(nèi)部函數(shù)INTRINS.H只有_NOP_()函數(shù)有用,相當(dāng)于匯編里的NOP變量參數(shù)表STDARG.H不用全程跳轉(zhuǎn)SETJMP.H不用SFR訪問REG51/52.H特殊功能寄存器聲明5.函數(shù)的調(diào)用voidmain(void){chara,b;intc;a=38;b=99;c=TwoDataAdd(a,b);}變量a、b叫實(shí)參,調(diào)用TwoDataAdd()函數(shù)時(shí),實(shí)參a、b的值分別傳遞給形參FirstData和SecondData,用變量c接收函數(shù)的返回值。值傳遞的點(diǎn)是,在函數(shù)調(diào)用結(jié)束后,實(shí)參仍舊保持原來的值,即a=38、b=99,而形參被釋放?!纠?-1】寫出一個(gè)完整的調(diào)用子函數(shù)的例子,用單片機(jī)控制一個(gè)LED燈閃爍發(fā)光。用P1口的第一個(gè)引腳控制一個(gè)LED燈,1秒鐘閃爍一次。#include<reg52.h>//頭文件#defineuintunsignedint//宏定義sbitD1=P1^0;//聲明單片機(jī)P1口的第一位uintx,y;voidmain(){ while(1)//大循環(huán) { D1=0;//點(diǎn)亮第一個(gè)發(fā)光二極管 for(x=500;x>0;x--) for(y=110;y>0;y--); D1=1;//關(guān)閉第一個(gè)發(fā)光二極管 for(x=500;x>0;x--) for(y=110;y>0;y--); }}#include<reg52.h>//頭文件#defineuintunsignedint//宏定義sbitD1=P1^0;//聲明單片機(jī)P1口的第一位voiddelay();//聲明子函數(shù)voidmain(){ while(1)//大循環(huán) { D1=0;//點(diǎn)亮第一個(gè)發(fā)光二極管 delay();//延時(shí)500毫秒 D1=1;//關(guān)閉第一個(gè)發(fā)光二極管 delay();//延時(shí)500毫秒 }}

voiddelay()//延時(shí)子程序延時(shí)約500毫秒{ uintx,y; for(x=500;x>0;x--) for(y=110;y>0;y--);}【例3-3】調(diào)用子函數(shù)的例子,用單片機(jī)控制一個(gè)LED燈閃爍發(fā)光。用P1口的第一個(gè)引腳控制一個(gè)LED燈,讓它亮500ms,滅800ms。#include<reg52.h>//頭文件#defineuintunsignedint//宏定義sbitD1=P1^0;//聲明單片機(jī)P1口的第一位voiddelay(uintz);//聲明子函數(shù)voidmain(){ while(1)//大循環(huán) { D1=0;//點(diǎn)亮第一個(gè)發(fā)光二極管 delay(500);//延時(shí)500毫秒 D1=1;//關(guān)閉第一個(gè)發(fā)光二極管 delay(800);//延時(shí)800毫秒 }}voiddelay(unsignedintz)//延時(shí)子程序延時(shí)約500毫秒{ uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}本章小結(jié)C51是面向51系列單片機(jī)所使用的程序設(shè)計(jì)語言,使MCS-51單片機(jī)的軟件具有良好的可讀性和可移植性。具有操作直接、簡(jiǎn)潔和程序緊湊的優(yōu)點(diǎn),為大多數(shù)51單片機(jī)實(shí)際應(yīng)用最為廣泛的語言。C51編譯器常用的數(shù)據(jù)類型有字符型、整型、長(zhǎng)整型、浮點(diǎn)型、位型和指針型。任何數(shù)據(jù)都要以一定的存儲(chǔ)器類型定位到單片機(jī)的存儲(chǔ)區(qū)中,如用戶未做定義,則依據(jù)系統(tǒng)默認(rèn)存儲(chǔ)器類型進(jìn)行存儲(chǔ)。第4章MCS-51單片機(jī)程序設(shè)計(jì)方法學(xué)習(xí)目標(biāo)(1)掌握單片機(jī)程序設(shè)計(jì)的步驟和方法。(2)掌握匯編語言源程序的指令格式和常用偽指令的基本功能。(3)掌握C51語言源程序的基本結(jié)構(gòu)和常用預(yù)處理指令的基本功能。學(xué)習(xí)重點(diǎn)和難點(diǎn)(1)匯編語言源程序和C51語言源程序編寫方法(2)偽指令與執(zhí)行指令的區(qū)別和使用方法(3)預(yù)處理指令的功能及使用方法4.1程序編制的步驟、方法和技巧4.1.1程序編制的步驟1、任務(wù)分析2、算法設(shè)計(jì)3、程序流程設(shè)計(jì)4、源程序編輯和編譯5、程序調(diào)試常用的流程圖符號(hào)“超級(jí)循環(huán)”結(jié)構(gòu)4.1.2編制程序的方法和技巧一、模塊化程序設(shè)計(jì)方法采用模塊化程

溫馨提示

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