版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、80C51單片機(jī)實(shí)用教程基于Keil C和Proteus 雙解匯編和C51兩種程序每條指令/語(yǔ)句均給出注釋編入36例Proteus仿真實(shí)驗(yàn) 第1章 80C51單片機(jī)片內(nèi)結(jié)構(gòu)和工作原理 第1章 80C51單片機(jī)片內(nèi)結(jié)構(gòu)和工作原理 電子計(jì)算機(jī)是二十世紀(jì)人類最偉大的發(fā)明之一而微型計(jì)算機(jī)的發(fā)展,使人類社會(huì)大步跨入電腦時(shí)代改變了社會(huì)生活的各個(gè)方面 1.1 單片機(jī)概述 另一類是嵌入式微處理器,通常是我們常說(shuō)的單片機(jī) 全力滿足測(cè)控對(duì)象的測(cè)控功能,兼顧數(shù)據(jù)處理能力微型計(jì)算機(jī)可以分成兩大分支:一類是個(gè)人計(jì)算機(jī),也稱為PC機(jī)(Personal Computer) 全力實(shí)現(xiàn)海量高速數(shù)據(jù)處理,兼顧控制功能同時(shí),兩大分
2、支之間串行通信,優(yōu)勢(shì)互補(bǔ) 形成了網(wǎng)絡(luò)控制系統(tǒng) 使功能更強(qiáng)大,更完善 實(shí)現(xiàn)了近代計(jì)算機(jī)技術(shù)的突飛猛進(jìn) 1.1.1 單片機(jī)發(fā)展概況 什麼是單片機(jī)? “Single Chip Micro Computer” 忠實(shí)地反映了早期單片機(jī)的形態(tài)和本質(zhì)現(xiàn)代“單片機(jī)”概念: 微控制器MCU(Micro Controller Unit) 單板機(jī)是將微處理器芯片、存儲(chǔ)器芯片和輸入輸出接口芯片 安裝在同一塊印制電路板上,構(gòu)成具有一定功能的計(jì)算機(jī)系統(tǒng)單片機(jī)是將微處理器、存儲(chǔ)器和輸入輸出接口電路 集成在一塊集成電路芯片上,構(gòu)成具有一定功能的計(jì)算機(jī)系統(tǒng) 單片機(jī)之前,曾出現(xiàn)過(guò)單板機(jī) 單片機(jī)應(yīng)用 單片機(jī)應(yīng)用領(lǐng)域之廣,幾乎到了無(wú)
3、所不在的地步各領(lǐng)域智能化產(chǎn)品幾乎都有“單片機(jī)”的影子 單片機(jī)應(yīng)用的意義 不僅在于它的廣闊范圍及所帶來(lái)的經(jīng)濟(jì)效益更重要的是 從根本上改變了控制系統(tǒng)傳統(tǒng)的設(shè)計(jì)思想和設(shè)計(jì)方法 單片機(jī)發(fā)展概況 探索階段 以Intel公司MCS-48為代表,屬低檔型8位機(jī)大致可分為四個(gè)階段: 完善階段 以Intel公司MCS-51為代表,屬高檔型8位機(jī) MCS-51系列后來(lái)改進(jìn)為80C51系列 在世界和我國(guó)得到了廣泛的應(yīng)用 Intel公司推出了16位的MCS-96系列單片機(jī) 16位機(jī)肯定比8位機(jī)性能優(yōu) 但由于價(jià)格不菲,其應(yīng)用面受到一定限制相反,MCS-51系列單片機(jī), 由于其性能價(jià)格比高 并吸引了世界許多知名芯片制造廠
4、商加盟, 競(jìng)相使用以80C51為內(nèi)核 擴(kuò)展部分測(cè)控系統(tǒng)中使用的電路技術(shù)、接口技術(shù) 推出了許多與80C51兼容的8位單片機(jī) 得到了比16位機(jī)更廣泛的應(yīng)用 8位機(jī)與16位機(jī)爭(zhēng)艷階段 微控制器全面發(fā)展階段 隨著單片機(jī)在各個(gè)領(lǐng)域全面深入發(fā)展和應(yīng)用世界各大電氣、半導(dǎo)體廠商普遍投入出現(xiàn)了高速、大尋址范圍、強(qiáng)運(yùn)算能力的通用型單片機(jī)32位、64位微處理器相繼問(wèn)世 例如ARM(Advanced RISC Machines)系列微處理器內(nèi)存越來(lái)越大,主頻越來(lái)越高并且駐入嵌入式操作系統(tǒng) 甚至可以直接使用Windows和Linux操作系統(tǒng)高端嵌入式微處理器的功能已經(jīng)開(kāi)始接近PC機(jī)1.1.2 80C51系列單片機(jī) MC
5、S-51單片機(jī)是上世紀(jì)80年代由Intel公司推出的 最初是HMOS制造工藝,功耗較大 后來(lái)推出CHMOS工藝的80C51芯片,大大降低了功耗隨后,Intel公司將80C51內(nèi)核使用權(quán)以專利互換或出售形式 轉(zhuǎn)讓給世界許多著名IC制造廠商 例如philips、Atmel、Dallas、LG等在保持與80C51兼容的基礎(chǔ)上,融入自身的優(yōu)勢(shì) 擴(kuò)展了針對(duì)滿足不同測(cè)控對(duì)象要求的外圍電路 開(kāi)發(fā)出幾百種功能各異的新品種 形成了有眾多芯片制造廠商支持的80C51大家族目前我國(guó)國(guó)內(nèi)應(yīng)用最廣泛的是 Atmel公司的AT89系列和宏晶公司的STC系列單片機(jī)芯片1.2 80C51單片機(jī)片內(nèi)結(jié)構(gòu)和引腳功能 1.2.1
6、片內(nèi)結(jié)構(gòu) 1.2.2 引腳功能 共40個(gè)引腳,大致可分為四類:電源、時(shí)鐘、控制和I/O引腳 電源 VCC 芯片電源,接+5V VSS 接地端 時(shí)鐘 XTAL1、XTAL2 外接石英晶體 控制線 ALE/PROG 地址鎖存允許/片內(nèi)EPROM編程脈沖 ALE功能:用來(lái)鎖存P0口送出的低8位地址 PROG功能:在EPROM編程期間,此引腳輸入編程脈沖 PSEN 外ROM讀選通信號(hào) RST/VPD 復(fù)位/備用電源 RST(Reset)功能:正常工作時(shí),輸入復(fù)位信號(hào) 在該引腳上連續(xù)保持2個(gè)機(jī)器周期以上高電平,80C51復(fù)位 VPD功能:在VCC掉電情況下,該引腳可接上備用電源 EA/VPP 內(nèi)外ROM
7、選擇/片內(nèi)EPROM編程電源 功能:正常工作時(shí),用于選擇內(nèi)外ROM EA=0,只訪問(wèn)外ROM EA=1,先訪問(wèn)內(nèi)ROM,超過(guò)4kB時(shí),自動(dòng)轉(zhuǎn)向外ROM VPP功能:在EPROM編程期間,用于施加編程電源VPP I/O線 有4個(gè)8位并行I/O端口: P0、P1、P2和P3口, 每口8位,共32個(gè)引腳 4個(gè)I/O口,各有各的用途在并行擴(kuò)展外存儲(chǔ)器時(shí) P0口專用于分時(shí)傳送低8位地址信號(hào)和8位數(shù)據(jù)信號(hào) P2口專用于傳送高8位地址信號(hào) P3口根據(jù)需要常用于特殊信號(hào)輸入輸出和控制信號(hào)1.3 存儲(chǔ)空間配置和功能 80C51可分為3個(gè)不同的存儲(chǔ)空間: 64kB程序存儲(chǔ)器(ROM),包括片內(nèi)ROM和片外ROM
8、64kB外部數(shù)據(jù)存儲(chǔ)器(簡(jiǎn)稱外RAM) 256B(包括特殊功能寄存器)內(nèi)部數(shù)據(jù)存儲(chǔ)器(簡(jiǎn)稱內(nèi)RAM) 3個(gè)不同的存儲(chǔ)空間用不同的指令和控制信號(hào)實(shí)現(xiàn)讀、寫功能操作:(1) ROM空間用MOVC指令實(shí)現(xiàn)只讀功能操作, 用PSEN信號(hào)選通讀外ROM。(2) 外RAM空間用MOVX指令實(shí)現(xiàn)讀寫功能操作 用RD信號(hào)選通讀外RAM,用WR信號(hào)選通寫外RAM。 內(nèi)RAM(包括特殊功能寄存器) 用MOV指令實(shí)現(xiàn)讀、寫功能操作。1.3.3 內(nèi)部數(shù)據(jù)存儲(chǔ)器(內(nèi)RAM) 可分成三個(gè)物理空間:工作寄存器區(qū)、位尋址區(qū)和數(shù)據(jù)緩沖區(qū) 1.3.4 特殊功能寄存器(SFR)特殊功能寄存器(Special Flag Regist
9、er,縮寫為SFR)共有21個(gè),離散地分布在高128B片內(nèi)RAM 80HFFH中 累加器ACC(Accumulator) ACC是80C51單片機(jī)中最常用的寄存器 許多指令的操作數(shù)取自于ACC 許多運(yùn)算的結(jié)果存放在ACC中 乘除法指令必須通過(guò)ACC進(jìn)行 ACC的指令助記符為A 寄存器B 乘除法指令中要用到寄存器B 此外,B可作為一般寄存器用 程序狀態(tài)字寄存器PSW(Program Status Word) 存放當(dāng)前指令執(zhí)行的狀態(tài)和各有關(guān)標(biāo)志 Cy 進(jìn)位標(biāo)志 加減法運(yùn)算時(shí),若最高位有進(jìn)位或借位,Cy置1,否則清0 位操作時(shí),Cy是位操作累加器,指令助記符用C表示 AC 輔助進(jìn)位標(biāo)志 加減運(yùn)算時(shí),
10、若ACC.3向ACC.4有進(jìn)(借)位,AC置1,否則清0 RS1、RS0 工作寄存器區(qū)選擇控制位 工作寄存器區(qū)有4個(gè),但當(dāng)前工作的寄存器區(qū)只能打開(kāi)一個(gè) RS1、RS0的編號(hào)用于選擇當(dāng)前工作的寄存器區(qū) RS1、RS0 =00 0區(qū)(00H07H) RS1、RS0 =01 1區(qū)(08H0FH) RS1、RS0 =10 2區(qū)(10H17H) RS1、RS0 =11 3區(qū)(18H1FH) OV 溢出標(biāo)志 用于表示ACC在有符號(hào)數(shù)算術(shù)運(yùn)算中的溢出 溢出和進(jìn)位是兩個(gè)不同的概念 進(jìn)位是指ACC.7向更高位進(jìn)位,用于無(wú)符號(hào)數(shù)運(yùn)算 溢出是指有符號(hào)數(shù)運(yùn)算時(shí),運(yùn)算結(jié)果數(shù)超出+127-128范圍 發(fā)生溢出時(shí)OV置1,
11、否則清0 P 奇偶標(biāo)志 表示ACC中“1”的個(gè)數(shù)的奇偶性 F0 用戶標(biāo)志 可作位寄存器用 數(shù)據(jù)指針DPTR(Data Pointer) 16位的特殊功能寄存器,由兩個(gè)8位寄存器DPH、DPL組成 主要用于存放一個(gè)16位地址,作為訪問(wèn)外部存儲(chǔ)器的地址指針 堆棧指針SP(Stack Pointer) 堆棧是CPU用于暫時(shí)存放特殊數(shù)據(jù)的“倉(cāng)庫(kù)” 例如子程序斷口地址,中斷斷口地址和其他需要保存的數(shù)據(jù) 堆棧指針SP專用于指出堆棧頂部數(shù)據(jù)的地址 堆棧中數(shù)據(jù)存取按先進(jìn)后出、后進(jìn)先出的原則1.5 時(shí)鐘和時(shí)序 1.5.1 時(shí)鐘電路和機(jī)器周期 時(shí)鐘電路 時(shí)鐘周期和機(jī)器周期 時(shí)鐘周期 是80C51振蕩器產(chǎn)生的時(shí)鐘脈
12、沖頻率的倒數(shù), 是最基本最小的定時(shí)信號(hào) 機(jī)器周期 是80C51單片機(jī)工作的基本定時(shí)單位 機(jī)器周期是時(shí)鐘周期的12倍 當(dāng)時(shí)鐘頻率為12MHz時(shí),機(jī)器周期為1s 當(dāng)時(shí)鐘頻率為6MHz時(shí),機(jī)器周期為2s1.5.2 時(shí)序 時(shí)序是執(zhí)行指令的操作節(jié)拍步驟每一條指令的執(zhí)行都可以包括取指和執(zhí)行兩個(gè)階段可分為:?jiǎn)螜C(jī)周指令、雙機(jī)周指令和四機(jī)周指令 只有乘除法指令執(zhí)行時(shí)間是4機(jī)周。 其余指令執(zhí)行時(shí)間為12個(gè)機(jī)器周期1.6 復(fù)位和低功耗工作方式 80C51單片機(jī)的工作方式共有四種: 復(fù)位方式、程序執(zhí)行方式、低功耗方式和片內(nèi)ROM編程方式 程序執(zhí)行方式是單片機(jī)的基本工作方式 CPU按照PC所指出的地址從ROM中取指并執(zhí)
13、行 每取出一個(gè)字節(jié),PC+1PC 當(dāng)調(diào)用子程序、中斷或執(zhí)行轉(zhuǎn)移指令時(shí) PC會(huì)相應(yīng)產(chǎn)生新的地址 片內(nèi)ROM編程一般由專門的編程器實(shí)現(xiàn),用戶不需了解1.6.1 復(fù)位 復(fù)位條件 必須使RST引腳(編號(hào)9)保持2個(gè)機(jī)器周期以上的高電平 復(fù)位電路 復(fù)位后CPU狀態(tài) 80C51單片機(jī)實(shí)用教程基于Keil C和Proteus 雙解匯編和C51兩種程序每條指令/語(yǔ)句均給出注釋編入36例Proteus仿真實(shí)驗(yàn) 第4章 C51語(yǔ)言及程序設(shè)計(jì) 80C51單片機(jī)實(shí)用教程基于Keil C和Proteus配套Proteus虛擬仿真36例目錄(免費(fèi)下載)對(duì)照書中程序,演示運(yùn)行理解,增強(qiáng)教學(xué)效果 C語(yǔ)言概述第4章 C51語(yǔ)言
14、及程序設(shè)計(jì) 4.1 C51概述 C語(yǔ)言是一種結(jié)構(gòu)化語(yǔ)言,簡(jiǎn)潔、緊湊,層次清晰,便于按模塊化方式編寫程序;有豐富的運(yùn)算符和數(shù)據(jù)類型,能適應(yīng)并實(shí)現(xiàn)各種復(fù)雜的數(shù)據(jù)處理;能實(shí)現(xiàn)位(bit)操作,生成目標(biāo)代碼效率較高,可移植性好,兼有高級(jí)語(yǔ)言和低級(jí)語(yǔ)言的優(yōu)點(diǎn)。 因此,C語(yǔ)言應(yīng)用范圍越來(lái)越廣泛。目前,各種操作系統(tǒng)和單片機(jī),都可以用C語(yǔ)言編程,C語(yǔ)言是一種通用的程序設(shè)計(jì)語(yǔ)言,在大型、中型、小型和微型計(jì)算機(jī)上都得到了廣泛應(yīng)用。 用于80C51系列單片機(jī)編程的C語(yǔ)言,通常稱為C51C51實(shí)際上是一個(gè)編譯系統(tǒng)能將C語(yǔ)言程序轉(zhuǎn)換成80C51可執(zhí)行代碼 C51編程的主要特點(diǎn) 編程相對(duì)方便。 能自動(dòng)完成對(duì)變量存儲(chǔ)單元的
15、分配和使用 僅在調(diào)用時(shí)臨時(shí)分配存儲(chǔ)單元,使用完畢即行釋放 大大提高了80C51片內(nèi)有限存儲(chǔ)空間的使用效率 使用者不需過(guò)多關(guān)注涉及的具體存儲(chǔ)單元及其操作指令 便于實(shí)現(xiàn)各種復(fù)雜的運(yùn)算和程序 具有豐富且功能強(qiáng)大的運(yùn)算符 可方便地調(diào)用各已有程序模塊 可讀性較好 實(shí)時(shí)性較差4.2 C51數(shù)據(jù)與運(yùn)算 4.2.1 數(shù)據(jù)與數(shù)據(jù)類型 數(shù)據(jù)類型 數(shù)據(jù)的不同格式稱為數(shù)據(jù)類型字符型、整型和長(zhǎng)整型數(shù)據(jù)還又可分別分為有符號(hào)signed和無(wú)符號(hào)unsigned 數(shù)據(jù)長(zhǎng)度和值域表4-1 C51數(shù)據(jù)長(zhǎng)度和值域 標(biāo)識(shí)符 數(shù)據(jù)、變量、數(shù)組、函數(shù)等常用標(biāo)識(shí)符表示實(shí)際上標(biāo)識(shí)符就是一個(gè)代號(hào)、代名字C51標(biāo)識(shí)符命名規(guī)定: 只能由字母、數(shù)字
16、和下劃線三種字符組成 且須以字母或下劃線開(kāi)頭。 不能與“關(guān)鍵詞”同名 ANSI C和Keil C51的關(guān)鍵詞分別如表4-2和表4-3所示 英文字母區(qū)分大小寫標(biāo)識(shí)符命名宜簡(jiǎn)單而含義清晰4.2.2 變量及其定義方法C51數(shù)據(jù)可分為常量和變量程序運(yùn)行過(guò)程中,其值可以改變的量稱為變量變量名按標(biāo)識(shí)符規(guī)則定義變量值存儲(chǔ)在存儲(chǔ)器中變量必須先定義,后使用程序運(yùn)行中,通過(guò)變量名引用變量值可分為: 字符型變量 整型變量 實(shí)型變量 位變量 指針變量 變量的存儲(chǔ)區(qū)域常量和變量必須定位在80C51不同的存儲(chǔ)區(qū)域存儲(chǔ)區(qū)域按存儲(chǔ)器類型分類 不同的存儲(chǔ)器類型,其訪問(wèn)方式和速度也就不同在已知變量長(zhǎng)度及變量為正整數(shù)的情況下 應(yīng)盡
17、量采用8bit無(wú)符號(hào)格式:unsigned char 存儲(chǔ)器類型表4-5 C51存儲(chǔ)器類型與80C51存儲(chǔ)空間的對(duì)應(yīng)關(guān)系 不同性質(zhì)的數(shù)據(jù)應(yīng)區(qū)別對(duì)待 位變量只能定位在片內(nèi)RAM位尋址區(qū) 使用bdata存儲(chǔ)器類型 常用的數(shù)據(jù)應(yīng)定位在片內(nèi)RAM中 使用data和idata存儲(chǔ)器類型 不太常用的數(shù)據(jù)可定位在片外RAM中 使用pdata和xdata存儲(chǔ)器類型 常量可采用code存儲(chǔ)器類型 編譯模式 若用戶不對(duì)變量的存儲(chǔ)器類型作出定義系統(tǒng)將由編譯模式默認(rèn)存儲(chǔ)器類型編譯模式由源程序、函數(shù)或C51編譯器設(shè)置表4-6 C51存儲(chǔ)器編譯模式 局部變量和全局變量變量按使用范圍可分為局部變量和全局變量 局部變量 局部
18、變量是某個(gè)函數(shù)內(nèi)部定義的變量 使用范圍僅限于該函數(shù)內(nèi)部 不同函數(shù)中允許使用相同的局部變量名 函數(shù)運(yùn)行結(jié)束,即釋放局部變量存儲(chǔ)單元 可大大提高80C51內(nèi)存單元的利用率 全局變量 全局變量在整個(gè)文件或程序中有效,可供各函數(shù)共用 使用全局變量可以增加各函數(shù)間數(shù)據(jù)聯(lián)系的渠道 使用全局變量的缺點(diǎn): 始終占用一個(gè)固定的存儲(chǔ)單元 降低了內(nèi)部存儲(chǔ)單元的利用率 降低了函數(shù)的通用性 函數(shù)移植到其他文件時(shí)需同時(shí)將全局變量一起移植 因此,應(yīng)盡量減少全局變量,能不用就盡量不用 變量的定義方式 定義格式:數(shù)據(jù)類型 存儲(chǔ)器類型 變量名表帶中括號(hào) 者為非必需項(xiàng),缺省時(shí)由C51編譯器默認(rèn)例如:unsigned int a;
19、char b=100,c; char data var; float idata x,y,z; unsigned int pdata sum; char code text =CHINA; unsigned char xdata *ap; 定義80C51特殊功能寄存器及其可尋址位C51雖可用關(guān)鍵詞定義80C51特殊功能寄存器 體現(xiàn)了C51編譯功能的多樣性和完整性 但編者還是建議讀者不要去重新定義直接使用預(yù)處理命令:#include 即可在程序中直接引用21個(gè)特殊功能寄存器 及其可位尋址并有專用位定義名稱的位變量既省事又不易出錯(cuò) 位變量定義方式 定義128位可尋址位的位變量 定義格式:bit 位
20、變量名 例如:bit u,v; /定義位變量u,v 定義ACC、B、P0、P1和P2中的位變量 這些位變量沒(méi)有專用的位定義名稱,只有位編號(hào) 但這些位編號(hào)不符合ANSI C標(biāo)識(shí)符要求 應(yīng)重新定義。其格式如下: sbit 位變量名=位地址常數(shù) 例如:sbit P10= P10; /定義P10為P1.0 絕對(duì)地址變量定義方式絕對(duì)地址變量需要指定變量的存儲(chǔ)單元地址 屬全局變量,定義方法有兩種: 應(yīng)用關(guān)鍵詞 _at_ 數(shù)據(jù)類型 存儲(chǔ)器類型 變量名_at_絕對(duì)地址 例如:unsigned char xdata PA_at_0 x7fff ; 應(yīng)用絕對(duì)地址訪問(wèn)# include 需引用C51庫(kù)函數(shù)absac
21、c.h表4-15 絕對(duì)地址 4.2.3 運(yùn)算符和表達(dá)式 賦值運(yùn)算符 一般格式:變量表達(dá)式 由賦值運(yùn)算符組成的表達(dá)式稱為賦值表達(dá)式 算術(shù)運(yùn)算符表4-7 C51算術(shù)運(yùn)算符表 自增1和自減1有兩種寫法: i和i:i先加(減)1,后使用 i和i:i先使用,后加(減)1 除法運(yùn)算的結(jié)果與參與運(yùn)算數(shù)據(jù)的類型有關(guān) 若兩個(gè)數(shù)據(jù)都是整數(shù),則運(yùn)算結(jié)果也為整數(shù) 即使有余數(shù),也只取整數(shù),舍去小數(shù) 例如:7/3,運(yùn)算結(jié)果為 2 求余運(yùn)算要求參與運(yùn)算的數(shù)據(jù)都是整型 運(yùn)算結(jié)果為兩數(shù)相除的余數(shù) 例如:73,運(yùn)算結(jié)果為 1算術(shù)運(yùn)算符說(shuō)明 關(guān)系運(yùn)算符表4-8 C51關(guān)系運(yùn)算符表 用于兩個(gè)數(shù)據(jù)之間進(jìn)行比較判斷運(yùn)算的結(jié)果只能有兩種:
22、 條件滿足,運(yùn)算結(jié)果為1(真) 條件不滿足,運(yùn)算結(jié)果為0(假)注意,不要混淆“”與“的區(qū)別 “用于給變量賦值 “”用于判斷是否相等 邏輯運(yùn)算符表4-9 C51邏輯運(yùn)算符 一般形式為: 邏輯與:(條件表達(dá)式1)&(條件表達(dá)式2) 邏輯或:(條件表達(dá)式1)|(條件表達(dá)式2) 邏輯非:!(條件表達(dá)式)用于求條件表達(dá)式整體之間邏輯運(yùn)算的邏輯值 條件表達(dá)式的值只有兩種:1或0 運(yùn)算結(jié)果也只有兩種:1或0 位邏輯運(yùn)算符表4-10 C51位邏輯運(yùn)算符表 用于變量數(shù)據(jù)本身按位進(jìn)行邏輯運(yùn)算例如,若a=211,b=185 “a&b”的結(jié)果是145 “a&b”的結(jié)果卻是1 位左移時(shí),低位移進(jìn)0,移出位作廢 位右移時(shí)
23、,無(wú)符號(hào)數(shù)和正數(shù)高位移進(jìn)0 負(fù)數(shù)補(bǔ)碼移進(jìn)1,移出位作廢 有符號(hào)數(shù)無(wú)論位左移右移,符號(hào)位均不參與移位 復(fù)合賦值運(yùn)算符表4-11 C51復(fù)合賦值運(yùn)算符表 復(fù)合賦值運(yùn)算符由運(yùn)算符和賦值運(yùn)算符疊加組合復(fù)合賦值運(yùn)算符是先進(jìn)行運(yùn)算符所要求的運(yùn)算 再把運(yùn)算結(jié)果賦值給復(fù)合賦值運(yùn)算符左側(cè)的變量例如,x+=y等同于x=x+y x/=y+10等同于x=x/(y+10)4.3 C51基本語(yǔ)句 4.3.1 語(yǔ)句基本概念 語(yǔ)句是用來(lái)向計(jì)算機(jī)系統(tǒng)發(fā)出的操作指令一條C51語(yǔ)句編譯后會(huì)產(chǎn)生若干條機(jī)器操作碼有表達(dá)式語(yǔ)句、復(fù)合語(yǔ)句、選擇語(yǔ)句和循環(huán)語(yǔ)句 表達(dá)式語(yǔ)句 在表達(dá)式后面加上“;”就構(gòu)成表達(dá)式語(yǔ)句 例如:a=b+c; 復(fù)合語(yǔ)句
24、 由若干條單語(yǔ)句組合而成的語(yǔ)句稱為復(fù)合語(yǔ)句 局部變量定義; 語(yǔ)句1; 語(yǔ)句2; ; 語(yǔ)句n; 單一語(yǔ)句,可不用花括號(hào)括起 復(fù)合語(yǔ)句,必須用花括號(hào)括起 且每個(gè)單語(yǔ)句后須有“;” 復(fù)合語(yǔ)句允許嵌套 即在復(fù)合語(yǔ)句中引入另一條復(fù)合語(yǔ)句4.3.2 選擇語(yǔ)句 選擇語(yǔ)句是根據(jù)給定的條件是否成立 判斷并選擇相應(yīng)的操作 if語(yǔ)句 C51中的if語(yǔ)句可分為3種形式: 圖4-5 if語(yǔ)句流程圖 條件成立就選擇,否則就不選擇 if (條件表達(dá)式) 內(nèi)嵌語(yǔ)句; 例如:if (xy) m=x; /若xy,最大值m= x max=m; /最大值max= m 不論條件成立與否,總要選擇一個(gè) if (條件表達(dá)式) 內(nèi)嵌語(yǔ)句1;
25、 else 內(nèi)嵌語(yǔ)句2; 例如: if (xy) max=x; /若xy,最大值max= x else max=y; /否則,最大值max= y 也可以用條件運(yùn)算符“?:”實(shí)現(xiàn) 表達(dá)式1?表達(dá)式2:表達(dá)式3; 例如: max = (xy) ? x : y; /若xy,max= x;否則,max= y 串行多分支結(jié)構(gòu) 如圖4-5c所示 if (條件表達(dá)式1 ) 內(nèi)嵌語(yǔ)句1;else if (條件表達(dá)式2 ) 內(nèi)嵌語(yǔ)句2; else if (條件表達(dá)式n ) 內(nèi)嵌語(yǔ)句n;else 內(nèi)嵌語(yǔ)句(n+1);【例4-6】 要求實(shí)現(xiàn)雙鍵控4燈 K0、K1均未按下,VD0亮,其余燈滅; K0單獨(dú)按下,VD1亮
26、,其余燈滅; K1單獨(dú)按下,VD2亮,其余燈滅; K0、K1均按下,VD3亮,其余燈滅。圖4-6 信號(hào)燈電路 演示Keil C51調(diào)試和Proteus仿真(見(jiàn)實(shí)驗(yàn)5) 雙鍵控4燈程序 if語(yǔ)句嵌套 【例4-7】 試用if語(yǔ)句嵌套實(shí)現(xiàn)雙鍵控4燈演示Keil C51調(diào)試和Proteus仿真(見(jiàn)實(shí)驗(yàn)5) switch語(yǔ)句 switch語(yǔ)句是一種并行多分支選擇語(yǔ)句,也稱為散轉(zhuǎn) 圖4-7 switch語(yǔ)句流程圖 【例4-8】 試用switch語(yǔ)句實(shí)現(xiàn)雙鍵控4燈 演示本例Keil C51調(diào)試和Proteus仿真(見(jiàn)實(shí)驗(yàn)5) 4.3.3 循環(huán)語(yǔ)句 while循環(huán)語(yǔ)句 根據(jù)判斷語(yǔ)句在流程中執(zhí)行的先后 可分為w
27、hile循環(huán)和do-while循環(huán)圖4-8 循環(huán)語(yǔ)句流程圖 while循環(huán)while (條件表達(dá)式) 循環(huán)體語(yǔ)句;【例4-9】 試求:sum=n=1+2+100 演示本例本例Keil C51調(diào)試 最后顯示:n=101,sum=5050表示n=101時(shí)停止累加之前累加值sum=5050 do-while循環(huán)do 循環(huán)體語(yǔ)句;while(條件表達(dá)式);【例4-10】 用do-while循環(huán)語(yǔ)句實(shí)現(xiàn)n最后顯示:n=101,sum=5050表示n=101時(shí)停止累加之前累加值sum=5050演示本例本例Keil C51調(diào)試while循環(huán)與do-while循環(huán)的區(qū)別: 先判斷后執(zhí)行 還是 先執(zhí)行后判斷當(dāng)?shù)?/p>
28、一次判斷為真時(shí) 兩者的執(zhí)行結(jié)果是完全相同但若第一次判斷為假時(shí) 兩者的執(zhí)行結(jié)果就不同 while循環(huán)一次也沒(méi)執(zhí)行 do-while循環(huán)至少執(zhí)行了一次 for循環(huán)語(yǔ)句 for (表達(dá)式1;表達(dá)式2;表達(dá)式3) 循環(huán)體語(yǔ)句; 首先對(duì)循環(huán)變量(表達(dá)式1)賦初值 判斷表達(dá)式2 是否滿足給定的循環(huán)條件 若滿足循環(huán)條件(值為非0) 則執(zhí)行循環(huán)體語(yǔ)句 若不滿足循環(huán)條件(值為0) 則結(jié)束循環(huán) 在滿足循環(huán)條件(值為非0)的前提下 執(zhí)行循環(huán)體語(yǔ)句; 計(jì)算表達(dá)式3,更新循環(huán)變量; 返回判斷表達(dá)式2,重復(fù)及以下操作 直至跳出for循環(huán)語(yǔ)句。 圖4-9 for循環(huán)流程圖 【例4-11】 用for循環(huán)語(yǔ)句實(shí)現(xiàn)n最后顯示:n
29、=101,sum=5050表示n=101時(shí)停止累加之前累加值sum=5050演示本例本例Keil C51調(diào)試 循環(huán)嵌套 在一個(gè)循環(huán)體內(nèi)包含另一個(gè)循環(huán),稱為循環(huán)嵌套 循環(huán)嵌套常用于延時(shí)程序【例4-12】 要求8個(gè)發(fā)光二極管循環(huán)點(diǎn)亮 每次點(diǎn)亮?xí)r間約為0.5秒。演示本例Keil C51調(diào)試和Proteus仿真(見(jiàn)實(shí)驗(yàn)6) 4.4 C51構(gòu)造類型數(shù)據(jù) 4.4.1 數(shù)組數(shù)組是一組具有相同類型數(shù)據(jù)的有序集合數(shù)組可分為一維和多維,常用的是一維數(shù)組 一維數(shù)組 定義格式 數(shù)據(jù)類型 存儲(chǔ)器類型 數(shù)組名元素個(gè)數(shù) 例如:unsigned int code a10; 引用格式 數(shù)組名下標(biāo) 注意:數(shù)組下標(biāo)是從0開(kāi)始編號(hào)的
30、 數(shù)組賦值 一般在數(shù)組初始化時(shí)(即數(shù)組定義時(shí))賦值在單片機(jī)應(yīng)用中,數(shù)組的主要功能是查表【例4-15】 循環(huán)燈電路,要求實(shí)現(xiàn)流水循環(huán)演示本例Keil C51調(diào)試和Proteus仿真(實(shí)驗(yàn)6)花樣循環(huán)燈電路,要求按下列順序循環(huán): 全亮,全暗,并重復(fù)一次; 從上至下,每次亮2個(gè); 從下至上,每次亮2個(gè); 從上至下,每次亮4個(gè),并重復(fù)一次; 從上至下,每次間隔亮2個(gè); 每次間隔亮4個(gè),并重復(fù)一次; 返回,不斷循環(huán)。演示本例Keil C51調(diào)試和Proteus仿真(實(shí)驗(yàn)6)實(shí)際上是按花樣循環(huán)碼數(shù)組依次運(yùn)行4.4.2 指針 指針和指針變量 指針就是地址 變量的指針就是變量的地址 存放指針的變量稱為指針變量
31、 指針變量定義方式數(shù)據(jù)類型 數(shù)據(jù)存儲(chǔ)器類型 *指針存儲(chǔ)器類型 指針變量名 取地址運(yùn)算符和指針運(yùn)算符 &:取地址運(yùn)算符 例如:y=&a; *:指針運(yùn)算符 例如:z=*ap;用指針實(shí)現(xiàn)例4-15花樣循環(huán)電路演示本例Keil C51調(diào)試和Proteus仿真(實(shí)驗(yàn)6)說(shuō)明:本程序書中沒(méi)有4.5 C51函數(shù)函數(shù)是C程序的基本單位即C51程序主要是由函數(shù)構(gòu)成的 4.5.1 函數(shù)概述 可分為主函數(shù)main( )和普通函數(shù)一個(gè)C51源程序必須有也只能有一個(gè)main函數(shù)而且是整個(gè)程序執(zhí)行的起始點(diǎn)普通函數(shù)是被主函數(shù)調(diào)用的子函數(shù)普通函數(shù)又可分為標(biāo)準(zhǔn)庫(kù)函數(shù)和自定義函數(shù)標(biāo)準(zhǔn)庫(kù)函數(shù)是由C51編譯系統(tǒng)的函數(shù)庫(kù)提供的用戶自定
32、義函數(shù)就是用戶根據(jù)自己的需要編寫的函數(shù) 函數(shù)的分類 函數(shù)的定義方式返回值類型是指本函數(shù)返回值的數(shù)據(jù)類型, 若無(wú)返回值,則成為無(wú)類型,用void表示; 若該項(xiàng)要素缺省,則C51編譯系統(tǒng)默認(rèn)為int類型。函數(shù)名除了main函數(shù)有固定名稱外, 其他函數(shù)由用戶按標(biāo)識(shí)符的規(guī)則自行命名。形式參數(shù)用變量名(標(biāo)識(shí)符)表示,沒(méi)有具體數(shù)值; 可以是一個(gè),或多個(gè)(中間用逗號(hào)“,”分隔),或沒(méi)有形式參數(shù)。編譯屬性是指定該函數(shù)采用的存儲(chǔ)器編譯模式, 有Small、Compact和Large 3種選擇,缺省時(shí),默認(rèn)Small模式。 中斷屬性是指明該函數(shù)是否中斷函數(shù); 寄存器組屬性是指明該函數(shù)被調(diào)用時(shí)準(zhǔn)備采用哪組工作寄存器
33、。 局部變量是僅應(yīng)用于本函數(shù)內(nèi)的變量, 在執(zhí)行本函數(shù)時(shí)臨時(shí)開(kāi)辟存儲(chǔ)單元使用,本函數(shù)運(yùn)行結(jié)束即予釋放; 局部變量說(shuō)明是說(shuō)明該變量的數(shù)據(jù)類型、存儲(chǔ)器類型等。 不能顛倒局部變量說(shuō)明與函數(shù)體語(yǔ)句的次序,否則C51編譯器將視作出錯(cuò)。一對(duì)花括號(hào)是必須的。 4.5.2 函數(shù)的參數(shù)和返回值 函數(shù)的參數(shù)函數(shù)的參數(shù)有形式參數(shù)和實(shí)際參數(shù) 形式參數(shù)是定義函數(shù)名后面括號(hào)中的變量 實(shí)際參數(shù)是主調(diào)用函數(shù)調(diào)用被調(diào)用函數(shù)時(shí) 賦給形式參數(shù)的實(shí)際數(shù)值 形參與實(shí)參之間的傳遞是單方向的 只能是主調(diào)用函數(shù)向被調(diào)用函數(shù)傳遞 其好處是: 提高了函數(shù)的通用性與靈活性 提高80C51內(nèi)存空間的使用率 函數(shù)的返回值 功能是把程序運(yùn)行的結(jié)果返回給主
34、調(diào)用函數(shù)return 表達(dá)式;【例4-22】 根據(jù)n值計(jì)算 n例4-9已給出計(jì)算n程序,本例n不定,由外部輸入 演示本例Keil C51調(diào)試 若輸入n=100,程序運(yùn)行結(jié)果:sum=5050。 數(shù)組作為函數(shù)的形式參數(shù) 用數(shù)組作函數(shù)的參數(shù)時(shí) 并不是把數(shù)組值傳遞給形參 而是將實(shí)參數(shù)組起始地址傳遞給形參數(shù)組 使兩個(gè)數(shù)組占用同一段存儲(chǔ)單元一旦形參數(shù)組某元素值發(fā)生變化 將會(huì)導(dǎo)致實(shí)參數(shù)組相應(yīng)元素值隨之變化數(shù)組參數(shù)傳遞屬于地址傳遞 能得到多于一個(gè)的函數(shù)返回值指針變量作為函數(shù)的形式參數(shù)時(shí) 也可起到地址傳遞的作用【例4-24】 對(duì)n個(gè)數(shù)組元素(隨機(jī)輸入)從大到小排序設(shè)數(shù)組:a16=11,99,66,22,111
35、,55,0,222,44,155,77,255,133,100,88,33演示本例Keil C51調(diào)試 Serial#1窗口立刻顯示數(shù)組原始數(shù)據(jù)和排序后的數(shù)據(jù) 4.5.4 常用庫(kù)函數(shù) 庫(kù)函數(shù)是C51在庫(kù)文件中已經(jīng)定義好的函數(shù) 若需調(diào)用,應(yīng)在源程序的開(kāi)頭采用預(yù)處理指令 將有關(guān)的庫(kù)函數(shù)包含進(jìn)來(lái)格式如下: #include 常用庫(kù)函數(shù)主要有: 訪問(wèn)80C51特殊功能寄存器庫(kù)函數(shù)reg51.h 絕對(duì)地址訪問(wèn)庫(kù)函數(shù)absacc.h 內(nèi)聯(lián)函數(shù)intrins.h 輸入輸出函數(shù)stdio.h 數(shù)學(xué)函數(shù)math.h 等。書中部分習(xí)題編成的目錄(仿真文件免費(fèi)下載)80C51單片機(jī)實(shí)用教程基于Keil C和Prot
36、eus 雙解匯編和C51兩種程序每條指令/語(yǔ)句均給出注釋編入36例Proteus仿真實(shí)驗(yàn) 第5章 中斷系統(tǒng)和定時(shí)/計(jì)數(shù)器 80C51單片機(jī)實(shí)用教程基于Keil C和Proteus配套Proteus虛擬仿真36例目錄(免費(fèi)下載)對(duì)照書中程序,演示運(yùn)行理解,增強(qiáng)教學(xué)效果第5章 中斷系統(tǒng)和定時(shí)/計(jì)數(shù)器 5.1 80C51中斷系統(tǒng)5.1.1 中斷概述 什么叫中斷? CPU暫時(shí)中止其正在執(zhí)行的程序 轉(zhuǎn)去執(zhí)行請(qǐng)求中斷的那個(gè)外設(shè)或事件的服務(wù)程序 等處理完畢后再返回執(zhí)行原來(lái)中止的程序 為什么要設(shè)置中斷? 提高CPU工作效率 具有實(shí)時(shí)處理功能 具有故障處理功能 實(shí)現(xiàn)分時(shí)操作 中斷源 80C51單片機(jī)的中斷源共有
37、5個(gè)中斷源 其中2個(gè)為外部中斷源,3個(gè)為內(nèi)部中斷源: :外部中斷0,中斷請(qǐng)求信號(hào)由P3.2輸入 :外部中斷1,中斷請(qǐng)求信號(hào)由P3.3輸入 T0:定時(shí)/計(jì)數(shù)器0溢出中斷,對(duì)外部脈沖計(jì)數(shù)由P3.4輸入 T1:定時(shí)/計(jì)數(shù)器1溢出中斷,對(duì)外部脈沖計(jì)數(shù)由P3.5輸入 串行中斷(包括串行接收中斷RI和串行發(fā)送中斷TI)5.1.2 中斷源和中斷控制寄存器 中斷請(qǐng)求控制寄存器 80C51涉及中斷請(qǐng)求的控制寄存器有2個(gè) 定時(shí)和外中斷用TCON,串行中斷用SCON 用于判別5個(gè)中斷源是否請(qǐng)求中斷 相應(yīng)標(biāo)志位為“1”,表示請(qǐng)求中斷 中斷允許控制寄存器IE 用于控制中斷源的開(kāi)放或關(guān)閉 可用軟件對(duì)各位分別設(shè)置 相應(yīng)標(biāo)志
38、位置“1”,開(kāi)中;清0,關(guān)中 其中EA是總控制位。EA=0,5個(gè)中斷源全部關(guān)閉 中斷優(yōu)先級(jí)控制寄存器IP 可將5個(gè)中斷源劃分為兩個(gè)中斷優(yōu)先級(jí): 高優(yōu)先級(jí)和低優(yōu)先級(jí) 相應(yīng)標(biāo)志位置“1”,設(shè)置為高優(yōu)先級(jí) 相應(yīng)標(biāo)志位清“0”,設(shè)置為低優(yōu)先級(jí) 高優(yōu)先級(jí)中斷可以中斷正在響應(yīng)的低優(yōu)先級(jí)中斷 同優(yōu)先級(jí)中斷不能互相中斷5.1.3 中斷處理過(guò)程 中斷處理過(guò)程大致可分為四步: 中斷請(qǐng)求、中斷響應(yīng)、中斷服務(wù)和中斷返回 中斷請(qǐng)求 某中斷請(qǐng)求標(biāo)志位置“1”,發(fā)出中斷請(qǐng)求信號(hào) 中斷響應(yīng) CPU查詢(檢測(cè))到某中斷標(biāo)志為“1”在滿足中斷響應(yīng)條件下,響應(yīng)中斷 中斷響應(yīng)操作 保護(hù)斷點(diǎn)地址; 撤除該中斷源的中斷請(qǐng)求標(biāo)志; 關(guān)閉同
39、級(jí)中斷; 將相應(yīng)中斷的入口地址送入PC; 中斷響應(yīng)條件: 該中斷已經(jīng)“開(kāi)中”; CPU此時(shí)沒(méi)有響應(yīng)同級(jí)或更高級(jí)的中斷; 當(dāng)前正處于所執(zhí)行指令的最后一個(gè)機(jī)器周期; 正在執(zhí)行的指令不是RETI或者是訪向IE、IP的指令 否則必須再另外執(zhí)行一條指令后才能響應(yīng)。圖5-2 中斷處理過(guò)程流程圖 執(zhí)行中斷服務(wù)程序 一般來(lái)說(shuō),中斷服務(wù)程序應(yīng)包含以下幾部分: 保護(hù)現(xiàn)場(chǎng) 執(zhí)行中斷服務(wù)程序主體,完成相應(yīng)操作 恢復(fù)現(xiàn)場(chǎng)80C51五個(gè)中斷源的中斷入口地址如下: INT0:0003H T0:000BH INT1:0013H T1:001BH 串行口:0023H 中斷返回 在中斷服務(wù)程序最后,必須安排一條中斷返回指令RET
40、I 當(dāng)CPU執(zhí)行RETI指令后,自動(dòng)完成下列操作: 恢復(fù)斷點(diǎn)地址。 開(kāi)放同級(jí)中斷,以便允許同級(jí)中斷源請(qǐng)求中斷。中斷系統(tǒng)的應(yīng)用主要是編制應(yīng)用程序編制應(yīng)用程序包括兩大部分內(nèi)容:第一部分是中斷初始化;第二部分是中斷服務(wù)程序5.1.4 中斷系統(tǒng)的應(yīng)用 設(shè)置堆棧指針SP 定義中斷優(yōu)先級(jí) 定義外中斷觸發(fā)方式 一般應(yīng)定義邊沿觸發(fā)方式為宜 若外中斷信號(hào)無(wú)法適用邊沿觸發(fā)方式 必須采用電平觸發(fā)方式時(shí) 應(yīng)在硬件電路上和中斷服務(wù)程序中 采取撤除中斷請(qǐng)求信號(hào)的措施 開(kāi)放中斷 除上述中斷初始化操作外,還應(yīng)安排好 等待中斷或中斷發(fā)生前主程序應(yīng)完成的操作內(nèi)容 中斷初始化 在中斷服務(wù)入口地址設(shè)置一條跳轉(zhuǎn)指令 轉(zhuǎn)移到中斷服務(wù)程序
41、的實(shí)際入口處 根據(jù)需要保護(hù)現(xiàn)場(chǎng) C51程序,由編譯器自動(dòng)完成保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng) 中斷源請(qǐng)求中斷服務(wù)要求的操作 這是中斷服務(wù)程序的主體 若是外中斷電平觸發(fā)方式,應(yīng)有中斷信號(hào)撤除操作 若是串行收發(fā)中斷,應(yīng)有對(duì)RI、TI清0指令 恢復(fù)現(xiàn)場(chǎng) 中斷返回,最后一條指令必須是RETI 中斷服務(wù)子程序中斷服務(wù)程序以C51子函數(shù)的形式出現(xiàn),其格式如下: void 函數(shù)名( ) interrupt n using m 中斷函數(shù)體語(yǔ)句; 中斷函數(shù)無(wú)返回值,也不帶參數(shù) interrupt是C51關(guān)鍵字,表示該函數(shù)是一個(gè)中斷服務(wù)子函數(shù) n=04(常正整數(shù)),對(duì)應(yīng)中斷源編號(hào) 中斷C51編程 using是C51關(guān)鍵字,用于
42、中斷函數(shù)內(nèi)選擇工作寄存器組 m=03(常正整數(shù)),對(duì)應(yīng)工作寄存器區(qū)編號(hào) using m缺省時(shí),不進(jìn)行工作寄存器組切換 但所有在中斷函數(shù)內(nèi)用到的工作寄存器將被壓棧保護(hù)。 中斷函數(shù)不能被非中斷調(diào)用 允許在中斷函數(shù)中調(diào)用其他子函數(shù) 但被調(diào)用子函數(shù)使用的工作寄存器組 必須與中斷函數(shù)使用的工作寄存器組相同、 中斷系統(tǒng)應(yīng)用舉例【例5-1】 出租車計(jì)價(jià)器計(jì)程方法是 車輪每運(yùn)轉(zhuǎn)一圈產(chǎn)生一個(gè)負(fù)脈沖, 從外中斷INT0(P3.2)引腳輸入。 行駛里程為: 輪胎周長(zhǎng)運(yùn)轉(zhuǎn)圈數(shù)設(shè)輪胎周長(zhǎng)為2m, 試實(shí)時(shí)計(jì)算出租車行駛里程(單位米)。演示Proteus仿真(見(jiàn)練習(xí)12)5.2 80C51定時(shí)/計(jì)數(shù)器 5.2.1 定時(shí)/計(jì)
43、數(shù)器概述80C51單片機(jī)內(nèi)部有兩個(gè)定時(shí)/計(jì)數(shù)器T0和T1 其核心是計(jì)數(shù)器,基本功能是加1 對(duì)外部事件脈沖(下降沿)計(jì)數(shù),是計(jì)數(shù)器 對(duì)片內(nèi)機(jī)周脈沖計(jì)數(shù),是定時(shí)器 片內(nèi)機(jī)周脈沖頻率是固定的,是fOSC的1/12 若fOSC = 12MHZ,1機(jī)周為1s 若fOSC = 6MHZ,1機(jī)周為2s。計(jì)數(shù)器由二個(gè)8位計(jì)數(shù)器組成,合起來(lái)是16位計(jì)數(shù)器 TH0/TH1是高8位,TL0/TL1是低8位 作計(jì)數(shù)器時(shí),外部事件脈沖必須從規(guī)定的引腳輸入 T0的外部事件脈沖應(yīng)從P3.4引腳輸入 T1的外部事件脈沖應(yīng)從P3.5引腳輸入 且外部脈沖的最高頻率不能超過(guò)時(shí)鐘頻率的1/245.2.2 定時(shí)/計(jì)數(shù)器的控制寄存器80
44、C51定時(shí)/計(jì)數(shù)器是可編程的通過(guò)TCON和TMOD的狀態(tài)設(shè)置來(lái)實(shí)現(xiàn) 定時(shí)/計(jì)數(shù)器控制寄存器TCONTCON已在5.1.2節(jié)中介紹,其中 低4位用于外中斷控制,高4位用于定時(shí)/計(jì)數(shù)器控制 TF1/TF0為定時(shí)/計(jì)數(shù)器T1/T0中斷請(qǐng)求標(biāo)志 TR1/TR0為定時(shí)/計(jì)數(shù)器T1/T0運(yùn)行控制位 TR1/TR0=1,T1/T0運(yùn)行;TR1/TR0=0,T1/T0停運(yùn)行表5-6 TCON的結(jié)構(gòu)和各位名稱、位地址 定時(shí)/計(jì)數(shù)器工作方式控制寄存器TMOD 用于設(shè)定定時(shí)/計(jì)數(shù)器的工作方式 低4位用于控制T0,高4位用于控制T1表5-7 TMOD的結(jié)構(gòu)和各位名稱、功能 表5-8 M1M0的4種工作方式 M1M0:
45、工作方式選擇位,可選擇4種工作方式 方式0:13位計(jì)數(shù)器,最大計(jì)數(shù)值213 =8192方式1:16位計(jì)數(shù)器,最大計(jì)數(shù)值216 =65536方式2:8位計(jì)數(shù)器,最大計(jì)數(shù)值28 =256,定時(shí)初值可自動(dòng)恢復(fù)方式3:2個(gè)8位計(jì)數(shù)器,僅適用于T0,T1無(wú)方式3 常用作串行口波特率發(fā)生器 C/T:計(jì)數(shù)/定時(shí)方式選擇位C/T= 1,為計(jì)數(shù)工作方式對(duì)P3.4/ P3.5引腳輸入的外部事件脈沖計(jì)數(shù),負(fù)跳變脈沖有效C/T= 0,為定時(shí)工作方式,對(duì)片內(nèi)機(jī)周脈沖計(jì)數(shù) GATE 門控位GATE=0,定時(shí)/計(jì)數(shù)器的運(yùn)行只受TR0/TR1的控制GATE=1,定時(shí)/計(jì)數(shù)器的運(yùn)行同時(shí)受TR0/TR1和 外中斷輸入信號(hào)(INT
46、0/INT1)的雙重控制 只有當(dāng)INT0/INT1=1 ,且TR0/TR1=1時(shí) T0/T1才能開(kāi)始運(yùn)行 運(yùn)行后,若出現(xiàn)INT0/INT1=0,T0/T1立即停止運(yùn)行5.2.4 定時(shí)/計(jì)數(shù)器的應(yīng)用 合理選擇定時(shí)/計(jì)數(shù)器工作方式 計(jì)算定時(shí)/計(jì)數(shù)器定時(shí)初值 T初值 = 2N -定時(shí)時(shí)間/機(jī)周時(shí)間 方式0,N = 13; 方式1,N = 16; 方式2、3,N = 8 機(jī)周時(shí)間與主振頻率有關(guān),機(jī)器周期是時(shí)鐘周期的12倍 編制應(yīng)用程序 定時(shí)/計(jì)數(shù)器的初始化,包括定義TMOD, 寫入定時(shí)初值,設(shè)置中斷系統(tǒng),啟動(dòng)定時(shí)/計(jì)數(shù)器運(yùn)行等 正確編制定時(shí)/計(jì)數(shù)器中斷服務(wù)程序 應(yīng)用步驟 應(yīng)用舉例【例5-3】 已知fO
47、SC=12MHz,要求在P1.0引腳輸出周期為400s的 脈沖方波,試分別用T1工作方式1、方式2編制程序。解: 工作方式1設(shè)置TMOD 計(jì)算定時(shí)初值 T1初值=216200s/1s =65536200=65336=FF38H 工作方式2 設(shè)置TMOD:M1M0=10,因此,TMOD=20H 定時(shí)初值:T1初值=28 -200s/1s=38H,因此,TH1=TL1=38H 主程序只需修改TMOD、TH1、TL1賦值數(shù)據(jù) 中斷服務(wù)子程序只需刪除T1重置初值指令(語(yǔ)句) 其余全部相同 方式2與方式1相比,優(yōu)點(diǎn)是定時(shí)初值不需重裝Keil C調(diào)試和Proteus 虛擬仿真見(jiàn)實(shí)驗(yàn)8。書中部分習(xí)題編成的目
48、錄(仿真文件免費(fèi)下載)80C51單片機(jī)實(shí)用教程基于Keil C和Proteus 雙解匯編和C51兩種程序每條指令/語(yǔ)句均給出注釋編入36例Proteus仿真實(shí)驗(yàn) 第6章 80C51并行擴(kuò)展 80C51單片機(jī)實(shí)用教程基于Keil C和Proteus配套Proteus虛擬仿真36例目錄(免費(fèi)下載)對(duì)照書中程序,演示運(yùn)行理解,增強(qiáng)教學(xué)效果第6章 80C51并行擴(kuò)展80C51系列單片機(jī)有很強(qiáng)的外部擴(kuò)展能力外部擴(kuò)展可分為并行擴(kuò)展和串行擴(kuò)展兩大形式 早期的單片機(jī)應(yīng)用系統(tǒng)以采用并行擴(kuò)展為多 近期的單片機(jī)應(yīng)用系統(tǒng)以采用串行擴(kuò)展為多外部擴(kuò)展器件可有ROM、RAM、I/O口和其他一些功能器件 擴(kuò)展器件大多是一些常
49、規(guī)芯片,有典型的擴(kuò)展應(yīng)用電路用戶很容易根據(jù)規(guī)范化電路來(lái)構(gòu)成能滿足要求的應(yīng)用系統(tǒng) 6.1 并行擴(kuò)展慨述數(shù)據(jù)傳送:由數(shù)據(jù)線DB(D0D7)完成;交互握手:由控制線CB(PSEN、WR、RD、ALE、EA)完成。單元尋址:由地址線AB(A0A15)完成;6.1.1 并行擴(kuò)展連結(jié)方式 并行擴(kuò)展總線組成 地址總線(AB):A0A15,共16位 低8位地址線由P0口提供,鎖存器鎖存后輸出 高8位地址線由P2口提供 數(shù)據(jù)總線(DB):由P0口提供,寬度8位 控制總線(CB) ALE:用于鎖存P0口輸出的低8位地址信號(hào) 與地址鎖存器門控端G連接。 PSEN:用于外ROM讀選通控制 與外ROM輸出允許端OE連接
50、。 EA:用于選擇讀內(nèi)/外ROM EA=1,讀內(nèi)ROM;當(dāng)EA=0,讀外ROM。 RD:用于讀外RAM選通,與外RAM讀允許端OE連接。 WR:用于寫外RAM選通,與外RAM寫允許端WE連接。 P2.x:用于片選控制,一般由P2口高位地址線擔(dān)任 與擴(kuò)展器件片選端CE連接。低位地址線A0A10實(shí)現(xiàn)片內(nèi)尋址。高位地址線A11A13實(shí)現(xiàn)片選(A11A13中只允許有一根為低電平,另二根必須為高電平,否則出錯(cuò))。無(wú)關(guān)位A14、A15可任取,一般取“1”。 線選法缺點(diǎn):芯片地址空間不連續(xù); 存在地址重疊現(xiàn)象。線選法優(yōu)點(diǎn):連接簡(jiǎn)單;適用于擴(kuò)展存儲(chǔ)容量較小的場(chǎng)合。存儲(chǔ)器內(nèi)存儲(chǔ)單元的子地址,由與存儲(chǔ)器地址線直接
51、連接的低位地址線確定;存儲(chǔ)器的芯片地址由高位地址線產(chǎn)生的片選信號(hào)確定。6.1.2 并行擴(kuò)展尋址方式 表6-1 線選法三片存儲(chǔ)器芯片地址分配表 通過(guò)譯碼器將高位地址線譯碼轉(zhuǎn)換為片選信號(hào) 2條地址線能譯成4種片選信號(hào),對(duì)應(yīng)的譯碼芯片為74139(雙2-4譯碼器) 3條地址線能譯成8種片選信號(hào),對(duì)應(yīng)的譯碼芯片為74138(3-8譯碼器) 4條地址線能譯成16種片選信號(hào),所對(duì)應(yīng)的譯碼芯片為74154(4-16譯碼器)74138 簡(jiǎn)介:C、B、A為地址線輸入端,C是高位 Y0、Y1、Y2、Y7為譯碼狀態(tài)信號(hào)輸出端 8種狀態(tài)中只會(huì)有一種有效,取決于CBA編碼 G1、G2A、G2B為控制端,同時(shí)有效時(shí),74
52、138被選通工作 譯碼法圖6-3 74138引腳圖 表6-2 74138真值表 圖6-4 用全譯碼方式實(shí)現(xiàn)片選 6.2 并行擴(kuò)展外ROM 地址線: 低8位地址:由80C51 P0.0P0.7與74373 D0D7連接,ALE有效時(shí), 74373鎖存該低8位地址,并從Q0Q7輸出,與EPROM芯片低8位地址A0A7相接。 高位地址: 視EPROM芯片容量大小。2764需5位,P2.0P2.4與2764 A8A12相連; 27128需6位,P2.0P2.5與27128 A8A13相連。 數(shù)據(jù)線:由80C51地址/數(shù)據(jù)復(fù)用總線P0.0P0.7直接與EPROM數(shù)據(jù)線D0D7相連。 輸出允許:EPROM
53、的輸出允許端 直接與80C51 相連,80C51的 信號(hào) 正好用于控制EPROM 端。 :有內(nèi)ROM并且使用時(shí), 接VCC;無(wú)內(nèi)ROM或僅使用外ROM時(shí), 接地。 控制線: ALE:80C51 ALE端與74373門控端G相連,專用于鎖存低8位地址。 片選端:由于只擴(kuò)展一片EPROM,因此一般不用片選,EPROM片選端 直接接地。圖6-5 2764與80C51典型連接電路圖6-6 27128與80C51典型連接電路 地址線、數(shù)據(jù)線仍按80C51一般擴(kuò)展ROM時(shí)方式連接, 高位地址線視RAM芯片容量,6116需3根,6264需5根。 片選線一般由80C51高位地址線控制,并決定RAM的口地址。
54、6264有2個(gè)片選端只須用其一個(gè),一般用 ,CE2直接接VCC。 按圖7-5,6116的地址范圍是7800H7FFFH; 按圖7-6,6264的地址范圍是6000H7FFFH(無(wú)關(guān)位為1)。 讀寫控制線由80C51的 、 分別與RAM芯片的 、 相接。 6.3 并行擴(kuò)展外RAM 圖6-7 6116與80C51典型連接電路圖6-8 6264與80C51典型連接電路并行擴(kuò)展I/O口可分為可編程和不可編程兩大類。不可編程是指不能用軟件對(duì)其I/O功能進(jìn)行設(shè)置、編輯,功能固定;可編程是指通過(guò)編程對(duì)其I/O功能進(jìn)行設(shè)置、編輯和硬件功能的應(yīng)用發(fā)揮。 擴(kuò)展I/O口不可編程芯片主要有74LS、74HC系列芯片和
55、CMOS 4000系列芯片。74LS系列輸出驅(qū)動(dòng)能力強(qiáng)、速度快;CMOS 4000系列輸入阻抗高、微功耗。74HC系列是一種高速HCMOS芯片,其引腳和輸入輸出電平與74LS兼容,輸出驅(qū)動(dòng)能力和速度與74LS系列相當(dāng),是目前較為常用的I/O口擴(kuò)展芯片。 擴(kuò)展I/O口可分為擴(kuò)展輸入口和輸出口。由于通常通過(guò)P0口擴(kuò)展,而P0口要分時(shí)傳送低8位地址和輸入輸出數(shù)據(jù),因此構(gòu)成輸出口時(shí),接口芯片應(yīng)具有片選和鎖存功能;構(gòu)成輸入口時(shí),接口芯片應(yīng)具有三態(tài)緩沖和鎖存功能。6.4 并行擴(kuò)展I/O口擴(kuò)展輸入口的74系列芯片有很多,以74373最為方便和常用。 表6-4 74373功能表 圖6-10 74373引腳圖圖
56、6-11 74373擴(kuò)展輸入口 6.4.1 用74系列芯片并行擴(kuò)展輸入口【例6-2】 按圖6-11電路,試編制程序,從373外部每隔0.5秒讀入一個(gè)數(shù)據(jù),共16個(gè)數(shù)據(jù),存入以30H為首址的內(nèi)RAM。擴(kuò)展輸出口的典型常用芯片以74377最為方便。 圖6-12 74377引腳圖 表6-5 74377功能表 圖6-13 74377擴(kuò)展輸出口6.4.2 用74系列芯片并行擴(kuò)展輸出口【例6-3】 按圖6-13電路,試編制程序,每隔0.5秒,從74377依次輸出一個(gè)數(shù)據(jù),共16個(gè),輸出數(shù)據(jù)存在以TAB為首址的ROM中。書中部分習(xí)題編成的目錄(仿真文件免費(fèi)下載)80C51單片機(jī)實(shí)用教程基于Keil C和Pr
57、oteus 雙解匯編和C51兩種程序每條指令/語(yǔ)句均給出注釋編入36例Proteus仿真實(shí)驗(yàn) 第7章 80C51串行口及串行擴(kuò)展 80C51單片機(jī)實(shí)用教程基于Keil C和Proteus配套Proteus虛擬仿真36例目錄(免費(fèi)下載)對(duì)照書中程序,演示運(yùn)行理解,增強(qiáng)教學(xué)效果第7章 80C51串行口及串行擴(kuò)展7.1 80C51串行口80C51系列單片機(jī)有一個(gè)全雙工的串行口 既可實(shí)現(xiàn)串行異步通信,又可作為同步移位寄存器使用7.1.1 串行通信概述 串行通信只需要一到兩根數(shù)據(jù)線,長(zhǎng)距離傳送時(shí),比較經(jīng)濟(jì),但由于每次只能傳送一位數(shù)據(jù),傳送速度較慢,隨著通信信號(hào)頻率的提高,傳送速度較慢的矛盾已逐漸緩解。
58、7.1.2 串行口特殊功能寄存器發(fā)送時(shí),只需將發(fā)送數(shù)據(jù)輸入SBUF CPU將自動(dòng)啟動(dòng)和完成串行數(shù)據(jù)的發(fā)送 接收時(shí),CPU將自動(dòng)把接收到的數(shù)據(jù)存入SBUF 用戶只需從SBUF中讀出接收數(shù)據(jù) 串行數(shù)據(jù)緩沖器SBUF SM0 SM1:串行口工作方式選擇位 SM2:多機(jī)通信控制位 REN:允許接收控制位:REN=0,禁止接收;REN=1,允許接收 TB8:方式2和方式3中要發(fā)送的第9位數(shù)據(jù) 在多機(jī)通信中,TB8=0表示數(shù)據(jù),TB8=1表示地址 TB8還可用于奇偶校驗(yàn)位 RB8:方式2和方式3中要接收的第9位數(shù)據(jù) TI:發(fā)送中斷標(biāo)志。TI=1,表示幀發(fā)送結(jié)束,TI位必須由軟件清0 RI:接收中斷標(biāo)志。R
59、I=1,表示幀接收結(jié)束,RI位也必須由軟件清0 串行控制寄存器SCON表7-1 SCON的結(jié)構(gòu)和各位名稱、位地址 表7-2 串行口工作方式 7.1.3 串行工作方式1串行工作方式0使用方式0可通過(guò)外接移位寄存器將串行輸入輸出數(shù)據(jù)轉(zhuǎn)換成并行輸入輸出數(shù)據(jù)。 圖7-6 74HC164引腳圖電路表7-4 74HC164功能表 80C51串行發(fā)送是低位在前高位在后,而移位寄存器的移位秩序是從Q0Q7。最終的結(jié)果是80C51 SBUF中的D0D7置于移位寄存器的Q7Q0,位秩序相反。 數(shù)據(jù)發(fā)送 與具有“串入并出”功能的移位寄存器配合 例如74HC164、74HC595或CC4094等 就可以將串行口變?yōu)椴?/p>
60、行輸出口使用 【例7-1】 已知74HC164串入并出電路如圖7-10所示, fOSC=12MHz,要求每隔0.5秒,按下列順序亮燈,不斷循環(huán)。 全亮,全暗,并重復(fù)一次; 從右至左,每次亮2個(gè); 從左至右,每次亮2個(gè); 從右至左,每次亮4個(gè),并重復(fù)一次; 從右至左,每次間隔亮2個(gè); 每次間隔亮4個(gè),并重復(fù)一次; 返回,不斷循環(huán)。圖7-10 74LS164串入并出電路 本例Keil C51調(diào)試和Proteus仿真見(jiàn)實(shí)驗(yàn)13 數(shù)據(jù)接收與具有“并入串出”功能的移位寄存器配合例如74HC165或CC4014、 CC4021等就可以將串行口變?yōu)椴⑿休斎肟谑褂?圖7-8 74HC165引腳圖表7-6 74
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 外貿(mào)采礦合同模板
- 建筑施工合同范例簡(jiǎn)易
- 南川無(wú)船承運(yùn)業(yè)務(wù)合同范例
- 墻面油漆合同范例
- 樂(lè)山專業(yè)保安合同范例
- 養(yǎng)殖人員合同范例
- 養(yǎng)生按摩勞務(wù)合同范例
- 書本合同范例
- 葉縣生豬購(gòu)銷合同模板
- 臨時(shí)建設(shè)包工合同范例
- 《大灰狼娶新娘》PPT
- 康復(fù)治療技術(shù)(康復(fù)養(yǎng)老服務(wù))專業(yè)群建設(shè)方案
- 夫妻同意賣房房款分配協(xié)議
- AT和D-Dimer的臨床應(yīng)用進(jìn)展課件(PPT 44頁(yè))
- 部編本小學(xué)語(yǔ)文一年級(jí)上冊(cè)第1課《秋天》教學(xué)設(shè)計(jì)(第一課時(shí))
- 國(guó)家開(kāi)放大學(xué)《人文英語(yǔ)3》章節(jié)測(cè)試參考答案
- DB33∕1121-2016 民用建筑電動(dòng)汽車充電設(shè)施配置與設(shè)計(jì)規(guī)范
- 農(nóng)產(chǎn)品質(zhì)量安全及農(nóng)藥安全科學(xué)使用技術(shù)
- 漿囊袋注漿錨桿應(yīng)用介紹
- 化糞池有限空間告知牌
- 認(rèn)識(shí)光罩以及簡(jiǎn)要的工藝流程
評(píng)論
0/150
提交評(píng)論