




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
單片機原理及應用項目化教程(C語言版)
項目結構項目一:單片機介紹項目二:輸入/輸出功能項目三:數碼管基礎與矩陣鍵盤掃描項目四:定時器與數碼管動態顯示項目五:外部中斷與串行通信項目六:LCD1602顯示原理及實現項目七:I2C總線與EEPROM項目八:DS18B20與蜂鳴器項目九:A/D與D/A轉換項目十:實時時鐘DS1302項目十一:紅外通信與步進電機項目一:單片機介紹單片機最小系統單片機開發系統軟件介紹Proteus仿真軟件的使用單片機介紹1.1.1單片機的基本概念
單片微型計算機(Single-ChipMicrocomputer),簡稱單片機,是將微處理器(CPU)、存儲器(存放程序或數據的ROM和RAM)、總線、定時器/計數器、輸入/輸出接口(I/O口)和其他多種功能器件集成在一塊芯片上的微型計算機。由于單片機的重要應用領域為智能化電子產品,一般需要嵌入儀器設備內,故又稱為嵌入式微控制器(EmbeddedMicrocontroller)。單片機介紹單片機的主要特點如下:(1)可靠性高;(2)便于擴展;(3)控制功能強;(4)低功耗、低電壓;(5)易于嵌入、發展迅速、應用廣泛單片機介紹1.1.2單片機的應用領域(1)工業控制與檢測(2)智能儀器儀表(3)消費類電子產品(4)網絡和通信(5)設備領域(6)武器裝備(7)汽車電子
此外,單片機在工商、金融、科研、教育、電力、通信、物流和國防航空航天等領域都有著十分廣泛的用途。單片機介紹1.1.3單片機有哪些系列
單片機種類繁多,一般常用的有以下幾種:(1)8051單片機(2)MOTOROLA單片機(3)Microchip單片機(4)Atmel單片機(5)NEC單片機(6)東芝單片機單片機介紹(7)富士通單片機(8)LG公司生產的GMS90系列單片機(9)凌陽16位單片機(10)Scenix單片機(11)EPSON單片機(12)華邦單片機單片機介紹1.1.4單片機的選擇
當今單片機琳瑯滿目,產品性能各異。如何選擇好單片機是項目開發首要解決的問題。(1)單片機的基本參數及其內部資源,如:程序存儲器容量,I/O引腳數量,AD或DA通道數量及轉換樣精度等;(2)單片機的增強功能,例如看門狗,RTC,EEPROM,擴展RAM,CAN總線接口,I2C接口,SPI接口等。(3)Flash和OTP(一次性可編程)相比較,最好是Flash。(4)封裝,一般來說貼片的比直插的體積小,抗干擾性強,但是價格要貴一些。單片機介紹(5)工作溫度范圍,工業級還是商業級,如果設計戶外產品,必須選用工業級。(6)工作電壓范圍,例如設計電視機遙控器,2節干電池供電,至少應該能在1.8-3.6V電壓范圍內工作。(7)功耗,能夠滿足設計要求的前提下功耗越低越好。(8)性價比高。(9)供貨渠道暢通,盡量選用市場上容易購買到的單片機。(10)有服務商,像Microchip公司推PIC,周立功公司推Philips,雙龍公司推AVR,都提供了很多有用的技術資料,起碼燒寫器有地方買。單片機介紹1.1.5MCS-51單片機識讀1、MCS-51單片機內部結構 MCS-51單片機由中央處理器(CPU)、程序存儲器(ROM/EPROM)、數據存儲器(RAM)、定時/計數器、I/O接口、中斷系統等組成。內部中斷外部中斷CPU振蕩器基準時鐘源4KBROM256BRAM總線控制擴展I/O串行口2個16位的TC控制并行I/O串行輸入串行輸出計數器8051的結構框圖內部結構如下:運算器控制器CPU128字節的RAM,作用是存放運算的中間結果以及數據暫存。00H~7FH4K程序存儲區,地址從0000H開始,用于存放程序代碼和表格數據2個16位的定時計數器4個IO(P0,P1,P2,P3共32線)口與外界交換信息1.2MHz~12MHz一個全雙工的串口UART5個中斷源,三個內部,二個外部單片機介紹2、引腳功能說明
DIP引腳圖邏輯符號
單片機介紹電源引腳(2根)
VCC(40腳):電源端,接+5V電源。
VSS(20腳):接地端。I/O引腳(4×8=32根)控制引腳(6根)
時鐘電路引腳XTAL1(19腳)和XTAL2(18腳)XTAL1:接外部晶振和微調電容的一端,在片內它是振蕩器倒相放大器的輸入,若使用外部TTL時鐘時,該引腳必須接地。XTAL2:接外部晶振和微調電容的另一端,在片內它是振蕩器倒相放大器的輸出,若使用外部TTL時鐘時,該引腳為外部時鐘的輸入端。單片機介紹ALE/PROG(30腳):地址鎖存允許信號輸出當CPU訪問片外存儲器時,ALE輸出信號控制鎖存P0口輸出的低8位地址,從而實現P0口數據與低位地址的分時復用。EA/VPP(31腳):外部程序存儲器地址允許輸入端。當為高電平時,CPU執行片內程序存儲器指令,但當PC中的值超過0FFFH時,將自動轉向執行片外程序存儲器指令。當為低電平時,CPU只執行片外程序存儲器指令。PSEN(32腳):外部程序存儲器讀選通信號。是讀外部程序存儲器的選通信號,低電平有效。RST(9腳):復位信號輸入端。該信號高電平有效,在輸入端保持兩個機器周期的高電平后,就可以完成復位操作。單片機介紹1.1.6單片機最小系統的組成
所謂單片機最小系統,是指用最少的元件能使單片機工作起來的一個最基本的組成電路。對51系列單片機來說,最小系統一般應該包括:電源、晶振電路、復位電路等。同時單片機要正常運行,還必須具備電源正常、時鐘正常、復位正常三個基本條件。單片機介紹(1)電源
電源是單片機工作的動力源泉。我們所選用的STC89C52,它需要5V的供電系統,我們的開發板是使用USB口輸出的5V直流直接供電的。供電電路在40腳和20腳的位置上,40腳接的是+5V,通常也稱為VCC或VDD,代表的是電源正極,20腳接的是GND,代表的是電源的負極。(2)時鐘電路
時鐘電路為單片機產生時序脈沖,單片機所有運算與控制過程都是在統一的時序脈沖的驅動下進行的。STC89C52單片機的18腳和19腳是晶振引腳,我們接一個11.0592MHz的晶振(它每秒振蕩11059200次),外加兩個20pF的電容,電容的作用是幫助晶振起振,并維持振蕩信號的穩定。單片機介紹(3)復位電路
在復位引腳(9腳)腳持續出現24個振蕩器脈沖周期(即2個機器周期)的高電平信號將使單片機復位,此時,一些專用寄存器的狀態值將恢復為初始值。單片機復位一般是3種情況:上電復位、手動復位、程序自動復位。(a)上電復位電路
(b)按鍵復位電路單片機介紹復位后各特殊功能寄存器初始狀態寄存器狀態寄存器狀態PC0000HTCON00HACC00HTL000HPSW00HTH000HSP07HTL100HDPTR0000HTH100HP0--P3FFHSCON00HIPxxx00000HSBUF不確定IE0xx00000HPCON0xxx0000HTMOD00H
單片機開發系統軟件介紹
單片機開發,首要的兩個軟件一個是編程軟件,一個是下載軟件。編程軟件我們用KeiluVision的51版本,也叫KeilC51,KeilC51集編輯,編譯,仿真于一體,支持匯編、PLM語言和C語言的程序設計,界面友好,易學易用。在51系列單片機的學習與開發過程中,keilC51軟件的使用為程序設計開發提供了一個高效率的平臺。單片機開發系統軟件介紹單片機開發系統軟件介紹用keilC51軟件編輯編譯一段C程序,實現打印的KeilC51歡迎界面:“HelloIamKEIL,Iwillbeyourfriend.”。根據任務編寫的C源程序如下:#include<reg52.h>//包含頭文件#include<stdio.h>voidmain(void)//主函數{SCON=0x52;TMOD=0x20;TH1=0xf3;TR1=1;//PRINTF函數所必須printf(“HelloIamKEIL.\n”);printf(“Iwillbeyourfriend.\n”);while(1);}單片機開發系統軟件介紹(1)建立一個新的工程項目單片機開發系統軟件介紹(2)保存工程項目單片機開發系統軟件介紹(3)為工程項目選擇單片機型號單片機開發系統軟件介紹(4)新建源程序文件單片機開發系統軟件介紹(5)保存源程序文件單片機開發系統軟件介紹(6)為工程項目添加源程序文件單片機開發系統軟件介紹(7)輸入源程序文件單片機開發系統軟件介紹(8)編譯源程序單片機開發系統軟件介紹(9)調試源程序單片機開發系統軟件介紹(10)查看分析結果單片機開發系統軟件介紹(11)生成Hex代碼文件
Protues仿真軟件的使用 ProteusISIS是英國Labcenter公司開發的電路分析與實物仿真軟件。它運行于Windows操作系統上,可以仿真、分析(SPICE)各種模擬器件和集成電路。在51系列單片機的學習與開發過程中,keilC51軟件是程序設計開發的平臺,不能直接的進行單片機的硬件仿真。如果將keilC51軟件和Proteus軟件有機結合起來,那么51系列單片機的設計與開發將在軟硬件仿真上得到完美的結合。主頁ISISARES3D瀏覽Proteus8.0Professional的主頁界面元件清單關于Proteus8.0幫助信息簡介PCB設計模擬入門指導新版本等打開設計圖/新建設計圖…最近的設計圖主頁文件(F)編輯(E)瀏覽(V)工具(T)設計(D)繪圖(G)除錯(D)庫(L)模板(T)系統(S)幫助(H)Proteus中ISIS的主窗口示意圖ISIS通用工具菜單專用工具菜單電路編輯窗口坐標原點瀏覽窗口器件工具列表窗口ARES電氣規則檢查主菜單交互仿真按鍵元件清單←點擊鼠標:點擊此鍵可取消左鍵的放置功能,但可編輯對象。←選擇元器件:在元件表選中器件,在編輯窗中移動鼠標,點擊左鍵放置←標注聯接點:當兩條連線交叉時,放個接點表示連通。←標志網絡線標號:電路聯線可用網絡標號代替,相同標號的線是相同的。←放置文本說明:是對電路的說明,與電路仿真無關!←放置總線:當多線并行簡化聯線,用總線標示。←放置器件引腳:有普通.反相.正時鐘.反時鐘.短引腳.總線。←放置圖紙內部終端:有普通.輸入.輸出.雙向.電源.接地.總線。←放置子電路:可將部分電路以子電路形式畫在另一圖紙上。編輯工具←放置分析圖:有模擬.數字.混合.頻率特性.傳輸特
性.噪聲分析等。←放置錄放音設置:
←放置電源.信號源:有直流電源,正弦信號源,脈沖
信號源等。←放置電壓電流探針:顯示網絡線上的電壓或串聯
在指定的網絡線上顯示電流值。←放置虛擬儀器:有示波器.計數器.RS232終端.SPI調
試器.I2C調試器.信號發生器.圖形發生器.直流
電壓表.直流電流表,交流電壓表.交流電流表。調試工具←放置各種線:有器件.引腳.端口.圖形線.總線等。←放置矩形框:移動鼠標到框的一角,按下左鍵拖動,釋放后完成。←放置圓形框:移動鼠標到圓心,按左鍵拖動,釋放后完成。←放置圓弧線:鼠標移到起點,按下左鍵拖動,釋放后調整弧長,點擊鼠
標完成。←畫閉合多邊形:鼠標移到起點,點擊產生折點,閉合后完成。←放置文字標簽:在編輯框放置說明文本標簽。←放置特殊圖形:可在庫中選擇各種圖形。←放置特殊節點:可有原點.節點.標簽引腳名.引腳號。←圖形正/反旋轉。←圖形垂直/水平翻轉。圖形工具
Protues仿真軟件的使用用Proteus仿真軟件,實現單片機最小系統的簡單應用。要求:P1口控制8個發光二極管LED循環點亮。電路原理圖如下圖所示。
Protues仿真軟件的使用(1)建立一個新的設計項目
Protues仿真軟件的使用(2)保存設計項目
Protues仿真軟件的使用(3)為設計項目選擇電路元器件
Protues仿真軟件的使用(4)設計電路元器件的布局與連線
Protues仿真軟件的使用(5)編輯電路原理圖元件
Protues仿真軟件的使用(6)編輯設計原理圖界面
Protues仿真軟件的使用(7)保存設計的原理圖電路文件
單擊保存按鈕,保存原理圖電路文件。
到此,一個完整的單片機最小系統電路原理圖就設計完成了。接下來需要做的就是將在KeilC51軟件中編譯生成的.Hex文件添加到原理圖的單片機中就可以了。
Protues仿真軟件的使用(8)為單片機添加.Hex程序文件
在原理圖中右鍵選中單片機,單擊左鍵,在彈出的對話框中選中ProgramFile選項,再單擊“
打開”按鈕,添加.Hex文件。保存后就可以進行電路仿真了,仿真電路如下圖所示。然后根據仿真現象,不斷進行源程序調試,完善設計。附:單片機常用學習網站周立功單片機()武漢力源()中源單片機()嵌入開發網()
51單片機()單片機學習網()單片機愛好者(www.mcufan.con)項目二輸入/輸出功能項目描述
我們所熟悉的電腦的輸入設備有鍵盤、鼠標、麥克風等,輸出設備有顯示器、音響等。如同電腦,輸入/輸出是單片機最基本的功能,單片機最常用的輸入設備為按鍵,最常用的輸出設備為發光二極管LED、數碼管以及液晶顯示器LCD。本項目基于KST-51開發板,通過編程實現獨立按鍵檢測與LED燈點亮功能。輸出功能──點亮LED燈2.1.1LED燈介紹
LED(light-emittingdiode),即發光二極管,俗稱LED小燈,我們板子上用的是普通的貼片發光二極管,其正向導通電壓是1.8V到2.2V之間,工作電流一般在1mA~20mA之間。當電流在1mA~5mA之間變化時,隨著通過LED的電流越來越大,我們的肉眼會明顯感覺到這個小燈越來越亮,而當電流從5mA~20mA之間變化時,我們看到的發光二極管的亮度變化就不是太明顯了。當電流超過20mA時,LED就會有燒壞的危險了,電流越大,燒壞的也就越快。輸出功能──點亮LED燈LED驅動電路如下圖所示。若接入的VCC電壓是5V,發光二極管自身壓降大概是2V,電阻兩端電壓U=3V,當電流是1mA的時候,電阻值是3K;當電流是20mA的時候,電阻值是150歐,也就是R34的取值范圍是150~3K歐姆。這個電阻我們通常稱之為“限流電阻”。圖中R用的是1K,可以計算出流過LED的電流大約為3mA。輸出功能──點亮LED燈
將上頁圖變換一下,用一個單片機的IO口來驅動LED,有兩種方式輸出功能──點亮LED燈2.1.2源程序編寫1、特殊功能寄存器和位定義①
sfrP0=0x80; sfr這個關鍵字,是51單片機特有的,他的作用是定義一個單片機特殊功能寄存器SFR(specialfunctionregister)。51單片機內部有很多寄存器,如果我們想使用的話必須提前進行sfr聲明。不過Keil軟件已經把所有這些聲明都預先寫好并保存到一個專門的文件中去了,我們要用的話只要文件開頭添加一行#include<reg52.h>即可。輸出功能──點亮LED燈②sbitLED=P0^0;
這個sbit用來定義寄存器或者變量中的某一位。經過上邊語句后,以后只要在程序里寫LED,就代表了P0.0口,注意這個P必須大寫,也就是說我們給P0.0又取了一個更形象的名字叫做LED。輸出功能──點亮LED燈2、程序編寫(用C語言編寫程序點亮LED燈)#include<reg52.h>//包含特殊功能寄存器定義的頭文件sbitLED=P1^0;//位地址聲明,注意:sbit必須小寫、P大寫!voidmain()//任何一個C程序都必須有且僅有一個main函數{ //{}是成對存在的,在這里表示函數的起始和結束 LED=0;//分號表示一條語句結束}邏輯上來看,程序這樣寫就可以了,但是在實際單片機應用中,存在一個問題。比如我們的程序空間可以容納100行代碼,但是我們實際上的程序只用了50行代碼,當運行完了50行,再繼續運行時,第51行的程序不是我們想運行的程序,而是不確定的未知內容,一旦執行下去程序就會出錯從而可能導致單片機自動復位。輸出功能──點亮LED燈
通常在程序中加入一個死循環,讓程序停留在我們希望的這個狀態下,不要亂運行,有以下兩種寫法可以參考:參考程序一:
參考程序二:#include<reg52.h> #include<reg52.h>sbitLED=P0^0; sbitLED=P0^0;voidmain() voidmain(){ { while(1) LED=0; { while(1); LED=0; } }}
理論上這兩個程序都能點亮LED小燈,但是下載到開發板以后板子上的LED等并沒亮,為什么呢?輸出功能──點亮LED燈
我們做單片機編程,實際上算是硬件底層驅動程序開發,這種程序的開發,是離不開電路圖的,必須根據硬件電路圖來進行程序的編寫。輸出功能──點亮LED燈
分析電路可知:若要點亮LED2,必須使得DB0端口(通過鎖存器74HC245連接至單片機P0.0端口)輸出低電平,同時Q16三極管9012導通,即LEDS6端口輸出低電平,而LEDS6接至74HC138的Y6端,Y6端輸出低電平的條件是74HC138正常工作(E1、E2端為低電平,E3端為高電平)且A2A1A0端口電平分別為1、1、0,因此,程序初始化時應將ENLED置0,ADDR3置1,ADDR2置1,ADDR1置1,ADDR0置0。輸出功能──點亮LED燈#include<reg52.h>//包含特殊功能寄存器定義的頭文件sbitLED=P0^0;//位地址聲明,注意:sbit必須小寫、P大寫!sbitADDR0=P1^0;sbitADDR1=P1^1;sbitADDR2=P1^2;sbitADDR3=P1^3;sbitENLED=P1^4;voidmain(){ ENLED=0; ADDR3=1; ADDR2=1; ADDR1=1; ADDR0=0; LED=0;//點亮小燈 while(1);//程序停止在這里}輸出功能──點亮LED燈3、程序下載
首先,我們要把硬件連接好,把板子插到電腦上,打開設備管理器查看所使用的是哪個COM口,如左圖所示,找到“USB-SERIALCH340(COM3)”這一項,這里最后的數字就是開發板目前所使用的COM端口號。注意要先在電腦上安裝USB轉串口的驅動程序以后才能看到相應的COM端口,否則如右圖所示,將無法下載程序。輸出功能──點亮LED燈打開STC系列單片的下載軟件——STC-ISP輸出功能──點亮LED燈下載軟件列出了5個步驟:①選擇單片機型號,我們現在用的單片機型號是STC89C52RC②點擊“打開程序文件”,找到我們剛才建立工程文件夾,找到步驟二編譯所生成的hex文件LED.hex,點擊打開;③選擇剛才查到的COM口,波特率使用默認的就行;④這里的所有選項都使用默認設置,不要隨便更改,有的選項改錯了以后可能會產生麻煩。⑤因為STC單片機要冷啟動下載,就是先點下載,然后再給單片機上電,所以我們先關閉板子上的電源開關,然后點擊“Download/下載”按鈕,等待軟件提示你請上電后,然后再按下板子的電源開關,就可以將程序下載到單片機里邊了。當軟件顯示“已加密”就表示程序下載成功了。輸入功能—按鍵檢測2.2.1鍵盤介紹
在單片機應用系統中,鍵盤主要用于向計算機輸入數據、傳送命令等,是人工干預計算機的主要手段。鍵盤要通過接口與單片機相連,分為編碼鍵盤和非編碼鍵盤兩類。
鍵盤上閉合鍵的識別由專用的硬件編碼器實現,并產生鍵編碼號或鍵值的稱為編碼鍵盤,如計算機鍵盤。而靠軟件編程來識別的稱為非編碼鍵盤,在單片機組成的各種系統中,使用最廣泛的是非編碼鍵盤。當然,也有用到編碼鍵盤的。
非編碼鍵盤有分為:獨立鍵盤和行列式(又稱為矩陣式)鍵盤。輸入功能—按鍵檢測
獨立鍵盤每個鍵相互獨立,各自與一條I/O線相連,CPU可直接讀取該I/O線的高/低電平狀態。其優點是硬件、軟件結構簡單,判鍵速度快,使用方便;缺點是占I/O口線多。多用于設置控制鍵、功能鍵。適用于鍵數少的場合。輸入功能—按鍵檢測
矩陣鍵盤的鍵按矩陣排列,各鍵處于行/列的結點處,CPU通過對連在行(列)的I/O線送已知電平的信號,然后讀取列(行)線的狀態信息。逐線掃描,得出鍵碼。其特點是鍵多時占用I/O口線少,硬件資源利用合理,但判鍵速度慢。多用于設置數字鍵,適用于鍵數多的場合。輸入功能—按鍵檢測
在2.1節中,IO口作為輸出口時,只需要在程序中將P0.0端口設為低電平即可點亮LED燈,將P0.0端口設為高電平即可熄滅LED燈。STC89C52單片機的輸入功能比輸出功能稍微復雜一些,在使用之前需進行一些設置,否則有可能無法準確識別輸入端口電平!(1)P0口
P0口為雙向三態輸入/輸出口,P0口既可作為地址/數據總線口,又可作為通用I/O口,作通用I/O口時,P0口只是一個準雙向口,需要在外部引腳處外接上拉電阻。VCC作輸入口使用時必須先給鎖存器置1!Q(2)P2口
P2口常用做外部存儲器的高8位地址口。當不用做地址口時,P2口也可作為通用I/O口,這時它也是一個準雙向I/O口,即作輸入口使用時必須先給鎖存器置1。不必外接上拉電阻就可以驅動任何MOS驅動電路。(3)P1口
P1口常用做通用I/O口,它也是一個標準的準雙向I/O口,不必外接上拉電阻就可以驅動任何MOS驅動電路。P1口的位結構如下圖所示。(4)P3口
P3口是一個雙功能口,第一功能與P1口一樣可用做通用I/O口,也是一個準雙向I/O口。另外還具有第二功能。P3口工作在第二功能時各管腳定義如下表所示。P3口的位結構圖如右圖所示。
引腳功能引腳信號名稱P3.0串行數據接收口(RXD)P3.4定時器/計數器0的外部輸入口(T0)P3.1串行數據發送口(TXD)P3.5定時器/計數器1的外部輸入口(T1)P3.2外部中斷0(INT0)P3.6外部RAM寫選通信號(WR)P3.3外部中斷1(INT1)P3.7外部RAM讀選通信號(RD)輸入功能—按鍵檢測
分析IO口電路就可以得出一個結論,這種具有上拉的準雙向IO口,如果要正常讀取外部信號的狀態,必須首先得保證自己內部輸出的是1,如果內部輸出0,則無論外部信號是1還是0,這個引腳讀進來的都是0。因此,輸入數據時,應先向端口寫1,使場效應管截止,然后方可作為輸入。(注:P0口作為通用IO口使用時需加上拉電阻,其他IO口內部有上拉電阻,不需外接上拉電阻)輸入功能—按鍵檢測2.2.2獨立按鍵掃描
單獨的按鍵掃描程序執行后看不到任何現象,為了有個直觀的效果,我們可以將之前的點亮LED燈的程序加進來,當K1鍵按下時點亮一個LED燈(如板子最右側的LED2)。1、構建獨立按鍵若要將K1變為獨立按鍵,只需KeyOut1端接地即可,因此,只要將單片機的P2.3(KeyOut1接至P2.3端口)端口輸出低電平,就可以將K1看成是一個獨立按鍵。輸入功能—按鍵檢測2、獨立式按鍵的軟件設計開始初始化按鍵是否按下?延時去抖點亮LEDYN輸入功能—按鍵檢測3、按鍵消抖
在鍵盤的軟件設計中還要注意按鍵的去抖動問題。由于按鍵一般是由機械式觸點構成的,在按鍵按下和斷開的瞬間均有一個抖動過程,時間大約為5ms~10ms,可能會造成單片機對按鍵的誤識別。按鍵消抖一般有兩種方法,即硬件消抖和軟件消抖。軟件消抖方式經濟實惠,且操作簡單,因此應用廣泛。在軟件設計中,當單片機檢測到有鍵按下時,可以先延時一段時間越過抖動過程再對按鍵識別。輸入功能—按鍵檢測
實際應用中,一般希望按鍵一次按下單片機只處理一次,但由于單片機執行程序的速度很快,按鍵一次按下可能被單片機多次處理。為避免此問題,可在按鍵第一次按下時延時10ms之后再次檢測按鍵是否按下,如果此時按鍵仍然按下,則確定有按鍵輸入。這樣便可以避免按鍵的重復處理。輸入功能—按鍵檢測2.2.3源程序編寫#include<reg52.h> //包含特殊功能寄存器定義的頭文件sbitLED0=P0^0; //位地址聲明sbitADDR0=P1^0;sbitADDR1=P1^1;sbitADDR2=P1^2;sbitADDR3=P1^3;sbitENLED=P1^4;sbitKeyIn1=P2^4;sbitKeyOut1=P2^3;
voiddelay10ms(void)//延時10ms子函數{ unsignedchari,k;//變量定義 for(i=20;i>0;i--)//for語句循環體 for(k=250;k>0;k--);}輸入功能—按鍵檢測voidmain() //主程序{ KeyIn1=1; //向輸入端口寫1,為輸入做準備 KeyOut1=0; //將K1作為獨立按鍵使用 ENLED=0; ADDR3=1; ADDR2=1; ADDR1=1; ADDR0=0; while(1) { if(KeyIn1==0) //判斷K1鍵是否按下 {
輸入功能—按鍵檢測 delay10ms(); //延時去抖 if(KeyIn1==0) { while(KeyIn1==0); //等待按鍵釋放 LED0=0; //點亮LED燈 } }}}程序寫完以后,按照Keil寫程序的過程,建立工程->保存工程->建立文件->添加文件到工程->編寫程序->編譯->下載程序。程序下載完成以后,可以發現,按K1鍵,松開以后開發板上最右側的LED燈(LED2)點亮。項目三數碼管基礎與
矩陣鍵盤掃描項目描述
單片機項目開發過程中經常要用到“0~9”的數字顯示,如:顯示實時時鐘、顯示檢測到的溫度、電壓等。數碼管是實現“0~9”的數字顯示的最簡單的元件,其結構簡單、價格便宜、驅動程序編寫容易,因此得到廣泛應用。本項目通過編程掃描4×4矩陣鍵盤,并將鍵值編號(0~F)顯示在數碼管上。數碼管基礎3.1.1數碼管的基本介紹七段LED數碼管顯示器能夠顯示十進制或十六進制數字及某些簡單字符。從原理圖可以看出數碼管共有a、b、c、d、e、f、g、dp這么8個段,而實際上,這8個段每一段都是一個LED小燈,所以一個數碼管就是由8個LED小燈組成的。數碼管基礎
從開發板的電路圖上能看出來,我們所用的數碼管都是共陽數碼管,一共有6個。 6個數碼管的com都是接到了正極上,由74HC138控制三極管的導通來控制整個數碼管的使能。先來看最右邊的DS1這個數碼管,原理圖上可以看出,控制DS1的三極管是Q17,控制Q17的引腳是LEDS0,對應到74HC138上邊就是U3的Y0輸出。數碼管基礎數碼管基礎
要最右邊的DS1數碼管亮,LEDS0這個引腳必須輸出低電平,由上圖分析可知ADDR0=0;ADDR1=0;ADDR2=0;ADDR3=1;ENLED=0.數碼管通常是用來顯示數字的,我們板子上有6個數碼管,習慣上稱之為6位,那控制位選擇的就是74HC138了。而數碼管內部的8個LED小燈我們稱之為數碼管的段,那么數碼管的段選擇(即該段的亮滅)是通過P0口控制,經過74HC245驅動。數碼管基礎3.1.2數碼管真值表
數碼管的8個段,我們直接當成8個LED小燈來控制,那就是a、b、c、d、e、f、g、dp一共8個LED小燈。我們通過原理圖可以看出,如果點亮b和c這兩個LED小燈,也就是數碼管的b段和c段,其他的所有的段都熄滅的話,就可以讓數碼管顯示出一個數字1,那么這個時候實際上P0的值就是0b11111001,十六進制就是0xF9。數碼管基礎
用同樣的方法,我們可以把其他的數字字符列出來,如下表所示,稱為數碼管真值表。
思考:如果是共陰數碼管,其真值表應如何列??數碼管基礎#include<reg52.h>sbitADDR0=P1^0;sbitADDR1=P1^1;sbitADDR2=P1^2;sbitADDR3=P1^3;sbitENLED=P1^4;voidmain(){ ENLED=0;//使能U3,選擇數碼管DS1 ADDR3=1; ADDR2=0; ADDR1=0; ADDR0=0; P0=0xF9;//點亮數碼管段b和c while(1);}
把上面這個程序編譯一下,并下載到單片機中,就可以看到程序運行的結果是在最右側的數碼管上顯示了一個數字1。數碼管基礎3.1.3數碼管的靜態顯示LED數碼管顯示器的工作方式:靜態和動態兩種顯示方式。
靜態顯示方式各數碼管在顯示過程中持續得到送顯信號,與各數碼管接口的I/O口線是專用的。其特點是顯示穩定,無閃爍,用元器件多,占I/O線多,無須掃描。系統運行過程中,在需要更新顯示內容時,CPU才去執行顯示更新子程序,節省CPU時間,提高CPU的工作效率,編程簡單。
動態顯示方式是指一位一位地輪流點亮每位顯示器,與各數碼管接口的I/O口線是共用的。其特點是有閃爍,用元器件少,占I/O線少,必須掃描,花費CPU時間,編程復雜。STC89C52P0.0…P0.7P1.0…P1.7P2.0…P2.7靜態顯示方式電路動態顯示方式驅動電路數碼管基礎
靜態顯示如同74HC138在同一時刻只能讓一個輸出口為低電平,也就是說在一個時刻內,我們只能使能一個數碼管,并根據我們給出的P0的值來改變這個數碼管的顯示字符,我們可以將此理解為數碼管的靜態顯示。數碼管靜態顯示是對應動態顯示而言的,靜態顯示對于一兩個數碼管還行,多個數碼管,靜態顯示實現的意義就沒有了。下面我們編程實現數碼管靜態循環顯示字符0~F。數碼管基礎
先介紹一個51單片機的關鍵字code。前面定義變量時,一般用到unsignedchar或者unsignedint這兩個關鍵字,這樣定義的變量都是放在單片機的RAM中,我們在程序中可以隨意去改變這些變量的值。但是還有一種數據,在程序中要使用,但是卻不會改變它的值,定義這種數據時可以加一個code關鍵字修飾一下,這個數據就會存儲到程序空間Flash中,這樣可以大大節省單片機的RAM的使用量,畢竟單片機RAM空間比較小,而程序空間則大的多。那么現在要使用的數碼管真值表,我們只會使用它們的值,而不需要改變它們,就可以用code關鍵字把它放入Flash中了。數碼管基礎#include<reg52.h>sbitADDR0=P1^0;sbitADDR1=P1^1;sbitADDR2=P1^2;sbitADDR3=P1^3;sbitENLED=P1^4; //用數組來存儲數碼管的真值表unsignedcharcodeLedChar[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};voiddelay() //軟件延時子程序{unsignedinti,k;for(i=200;i>0;i--)for(k=250;k>0;k--);}數碼管基礎voidmain(){unsignedcnt=0; //定義變量,用于控制循環顯示ENLED=0;//使能U3,選擇數碼管DS1ADDR3=1;ADDR2=0;ADDR1=0;ADDR0=0;while(1){ P0=LedChar[cnt]; cnt++; delay(); if(cnt==16) { cnt=0; }}}數碼管基礎
把上面程序編譯一下,并下載到單片機中,就可以看到程序運行的結果是在最右側的數碼管上循環顯示0~F。
修改延時子程序中的參數,將延時時間改短,如:去掉第一重for循環for(i=200;i>0;i--)語句,重新編譯下載程序,觀察實驗現象,并分析產生該實驗現象的原因。矩陣鍵盤掃描3.2.1結構和工作原理
當輸入部分有多個按鍵時,若仍然采用獨立鍵盤,必然會占用大量的I/O口,采用矩陣鍵盤是一種比較節省資源的方法。矩陣式鍵盤又稱行列式鍵盤,往往用于按鍵數量較多的場合。矩陣式鍵盤的按鍵設置在行與列的交點上。
我們的開發板上是一個4*4的矩陣鍵盤,如下圖所示,共有16個按鍵,按4×4的矩陣式排列,鍵號依次設為0~F。單片機的P2.0~P2.3為輸出口,連接4條行線;P2.4~P2.7為輸入口,連接4條列線。矩陣鍵盤掃描P2.3P2.2P2.1P2.0P2.4P2.5P2.6P2.7矩陣鍵盤掃描
確定鍵盤上哪一個鍵被按下可以采用逐行掃描或逐列掃描的方法,稱為行(列)掃描法。(1)先將全部行線置為低電平,然后通過列線接口讀取列線電平,判斷鍵盤中是否有按鍵被按下。(2)判斷閉合鍵的具體位置。在確認鍵盤中有按鍵被按下后,依次將列線置為低電平,再逐行檢測各行的電平狀態。若某行為低電平,則該列與置為低電平的行線相交處的按鍵即為閉合按鍵。(3)綜合上述兩步的結果,即可確定出閉合鍵所在的行和列,從而識別出所按下的鍵。矩陣鍵盤掃描3.2.2軟件設計思路
矩陣式鍵盤的掃描常用編程掃描方式、定時掃描方式或中斷掃描方式,無論采用哪種方式,都要編制相應的鍵盤掃描程序。在鍵盤掃描程序中一般要完成以下幾個功能:(1)判斷鍵盤上有無按鍵按下;(2)去鍵的機械抖動影響;(3)求所按鍵的鍵號;(4)轉向鍵處理程序。矩陣鍵盤掃描
在編程掃描方式中,只有當單片機空閑時,才執行鍵盤掃描任務。一般是把鍵盤掃描程序編成子程序,在主程序循環執行時調用。在主程序執行任務太多或執行時間太長時,按鍵的反應速度會變慢。
在定時掃描方式中單片機可以定時對鍵盤進行掃描,方法是利用單片機內部定時器,每隔一定的時間就產生定時中斷,CPU響應中斷后對鍵盤進行掃描,并在有按鍵按下時進行處理。
在中斷掃描方式中,當鍵盤上有按鍵被按下時產生中斷申請,單片機響應中斷后,在中斷服務程序中完成鍵掃描、識別鍵號并進行鍵功能處理。
以上幾種鍵盤掃描方式只是轉入鍵盤掃描程序的方式不同,而鍵盤掃描程序的設計方法是類似的。矩陣鍵盤掃描
下面以編程掃描方式介紹矩陣鍵盤掃描程序。通過編程掃描4*4矩陣鍵盤,并將得到的鍵值編號(0~F)通過開發上最右邊的數碼管DS1顯示出來。
在矩陣式按鍵的掃描程序中,要對按鍵逐行逐列地掃描,得到按下鍵的行列信息,然后還要轉換成鍵號,以便據此轉到相應的鍵處理程序。
按鍵掃描子函數中,先對4條行線送高電平,當判斷有按鍵按下之后,延時30ms之后再判斷該按鍵是否按下。若仍然有按鍵按下,則能知道被按下按鍵所處的行編碼。之后再在判斷被按下按鍵所處列編碼,綜合行、列編碼得到按鍵位置,從而判斷出鍵值。程序流程圖如下圖所示。矩陣鍵盤掃描矩陣鍵盤掃描3.2.3源程序編寫#include<reg52.h>
sbitADDR0=P1^0;sbitADDR1=P1^1;sbitADDR2=P1^2;sbitADDR3=P1^3;sbitENLED=P1^4;
#defineucharunsignedchar#defineuintunsignedintucharkey;unsignedcharcodeLedChar[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};矩陣鍵盤掃描unsignedcharcodekey_code[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
voiddelayms(uintms){uchart;while(ms--){for(t=0;t<120;t++);}}矩陣鍵盤掃描ucharkeyscan()//鍵盤掃描程序{ucharscan1,scan2,keycode,j;P2=0x0f;scan1=P2;if((scan1&0x0f)!=0x0f)//判鍵是否按下{delayms(30);//延時30msscan1=P2;if((scan1&0x0f)!=0x0f)//二次判鍵是否按下{P2=0xf0;scan2=P2;keycode=scan1|scan2;//組合成鍵編碼for(j=0;j<=15;j++){if(keycode==key_code[j])//查表得鍵值 {矩陣鍵盤掃描 key=j;return(key);}}}}elseP2=0xff;return(16);}voidkeydown()//判斷是否有鍵按下{P2=0xf0;if((P2&0xf0)!=0xf0){keyscan();P0=LedChar[key];//在數碼管上顯示鍵值}}矩陣鍵盤掃描main(){ ENLED=0;//使能U3,選擇數碼管DS1 ADDR3=1; ADDR2=0; ADDR1=0; ADDR0=0;
P0=0xbf;//數碼管顯示"-"P3=0xff;while(1){keydown();}}矩陣鍵盤掃描
將上述程序編譯一下,并下載到單片機中,就可以看到程序運行的結果是當每按下一個按鍵,其編號(0~F)在最右側的數碼管上顯示。思考:1、修改3.1節中的程序,使6個數碼管同時循環顯示0~F。2、矩陣鍵盤中,如果有兩個按鍵同時按下,能否識別?項目四定時器與數碼管
動態顯示項目描述
定時器用來實現精確定時,是單片機系統的一個重點,應用十分廣泛,大家一定要完全理解并熟練掌握定時器的應用。本項目利用定時器設計一個實時時鐘,利用六位數碼管分別顯示時鐘的時、分、秒等信息。定時器4.1.1定時器的初步認識
學習定時器之前,我們先來了解單片機時序中的幾個概念:時鐘周期、機器周期和指令周期。
時鐘周期:時鐘周期T是時序中最小的時間單位,具體計算的方法就是1/時鐘源頻率,我們KST-51單片機開發板上用的晶振是11.0592M,那么對于我們這個單片機系統來說,時鐘周期=1/11059200秒。定時器
機器周期:單片機完成一個操作的最短時間。機器周期主要針對匯編語言而言,在匯編語言下程序的每一條語句執行所使用的時間都是機器周期的整數倍,而且語句占用的時間是可以計算出來的。51單片機系列,在其標準架構下一個機器周期是12個時鐘周期,也就是12/11059200秒。定時器指令周期:執行一條指令(這里指匯編語言指令)所需要的時間稱為指令周期,指令周期是時序中的最大單位。由于機器執行不同指令所需時間不同,因此不同指令所包含的機器周期數也不盡相同。51系列單片機的指令可能包括1~4個不等的機器周期。通常,包含一個機器周期的指令稱為單周期指令,包含兩個機器周期的指令稱為雙周期指令,等等。指令所包含的機器周期數決定了指令的運算速度,機器周期數越少的指令,其執行速度越快。定時器
定時器用來進行定時。定時器內部有一個寄存器,開始計數后,這個寄存器的值每經過一個機器周期(也就是12/11059200秒)就會自動加1。加到一定的值時會自動溢出,后面會講到定時器有多種工作模式,分別使用不同的位寬(指使用多少個二進制位),假如是16位的定時器,也就是2個字節,最大值就是65535,那么加到65535后,再加1就算溢出,對于51單片機來說,溢出后,這個值會直接變成0。從某一個初始值開始,經過確定的時間后溢出,這個過程就是定時的含義。定時器4.1.2定時器的寄存器標準的51單片機內部有T0和T1這兩個定時器。(1)定時值存儲寄存器下表的寄存器是存儲定時器的計數值的。TH0/TL0用于T0,TH1/TL1用于T1。先學習如何看寄存器TF1TR1TF0TR0IE1IT1IE0IT0TCON1、先分清每一位屬于哪個模塊2、查看每一位是可讀、可寫、可讀寫位的哪一種3、看每一位的具體功能以及在0或1時分別是什么狀態4、如何通過指令設置寄存器或者寄存器某一位的值5、寄存器的物理地址定時器(2)定時器控制寄存器TCON(地址0x88、可位尋址)TF0/TF1:T0/T1計數溢出標志位。可用于申請中斷或供CPU查詢。在進入中斷服務程序時會自動清零;但在查詢方式時必須軟件清零。
=1:計數溢出;=0:計數未滿。TR0/TR1:T0/T1啟停控制位。
=1:啟動計數;=0:停止計數。低四位IE1、IT1、IE0、IT0用于外部中斷,下一章再做介紹。
M1,M0:工作方式選擇位。
=00:13位定時器/計數器;
=01:16位定時器/計數器(常用);
=10:可自動重裝的8位定時器/計數器(常用);
=11:T0分為2個8位定時器/計數器;僅適用于T0。
C/:定時方式/計數方式選擇位。
=1:選擇計數器工作方式,對T0/T1引腳輸入外部事件的負脈沖計數;
=0:選擇定時器工作方式,對機器周期脈沖計數定時。GATEC/TM1M0GATEC/TM1M0T1T0定時器(3)定時器模式寄存器TMOD(地址0x89、不可位尋址)GATE:門控位,定時/計數器的啟/停可由軟件與硬件兩者控制
=0:軟件控制,只由TCON中的啟/停控制位TR0/TR1控制 定時器/計數器的啟/停。
=1:硬件控制,由外部中斷請求信號/和TCON中 的啟/停控制位TR0/TR1組合狀態控制定時器/計數器的啟/停。定時器定時器定時器/計數器的4種工作方式M1M0工作方式功能描述00工作方式013位計數器01工作方式116位計數器10工作方式2自動再裝入8位計數器11工作方式3定時器0:分成兩個8位計數器,定時器1:停止計數定時器
MCS-51單片機的定時器/計數器共有4種工作模式,現以T0為例加以介紹,T1與T0的工作原理相同,但在方式3下,T1停止計數。1.工作方式0(M1M0=00,13位定時器/計數器)由TH0的全部8位和TL0的低5位(TL0的高3位未用)構成13位加1計數器,當TL0低5位計數滿時直接向TH0進位,并當全部13位計數滿溢出時,溢出標志位TF0置“1”。2.工作方式1(M1M0=01,16位定時器/計數器)由TH0和TL0構成16位加1計數器,其他特性與工作方式0相同。3.工作方式2(M1M0=10,自動重裝計數初值的8位定時器/計數器)
16位定時器/計數器被拆成兩個8位寄存器TH0和TL0,CPU在對它們初始化時必須裝入相同的定時器/計數器初值。以TL0作計數器,而TH0作為預置寄存器。當計數滿溢出時,TF0置“1”,同時TH0將計數初值以硬件方法自動裝入TL0。這種工作方式很適合于那些重復計數的應用場合(如串行數據通信的波特率發生器)。定時器4、工作方式3(M1M0=11,2個8位定時器/計數器,僅適用于T0)TL0:8位定時器/計數器,使用T0原有控制資源TR0和TF0,其功能和操作與方式0或方式1完全相同。TH0:只能作為8位定時器,借用T1的控制位TR1和TF1,只能對片內機器周期脈沖計數。在方式3模式下,定時器/計數器0可以構成兩個定時器或者一個定時器和一個計數器。
一般,只有在T1以方式2運行(當波特率發生器用)時,才讓T0工作于方式3下。定時器定時器例:設定定時器1為定時工作方式,要求軟件啟動定時器1按方式2工作。定時器0為計數方式,要求由軟件啟動定時器0,按方式1工作。怎么來實現這個要求呢?①控制定時器1工作在定時方式或計數方式是哪個位?
位(D6)是定時或計數功能選擇位,當=0時定時/計數器就為定時工作方式。②設定定時器1按方式2工作。要使定時/計數器1工作在方式2,M0(D4)M1(D5)的值必須是10。③設定定時器0為計數方式。當=1時,就工作在計數器方式。④由軟件啟動定時器0,當門控位GATE=0時,定時/計數器的啟停就由軟件控制。定時器⑤設定定時/計數器工作在方式1,使定時/計數器0工作在方式1,M0(D0)M1(D1)的值必須是01。
從上面的分析我們可以知道,只要將TMOD的各位,按規定的要求設置好后,定時器/計數器就會按我們預定的要求工作。我們分析的這個例子最后各位的情況如下: D7D6D5D4D3D2D1D0 00100101
二進制數00100101b=十六進制數25H。所以執行TMOD=0x25(或者用匯編語言MOVTMOD,#25H)這條指令就可以實現上述要求。定時器4.1.3定時器初始化
由于定時器/計數器的功能是由軟件編程確定的,所以一般在使用前都要對其進行初始化,初始化的步驟一般如下:(1)確定工作方式(即對TMOD賦值);(2)預置定時或計數的初值(可直接將初值寫入TH0、TL0或TH1、TL1);(3)根據需要開放定時器/計數器中斷(直接對IE位賦值)(4)啟動定時器/計數器(若已規定用軟件啟動,則可把TR0或TR1置“1”;若已規定由外中斷引腳電平啟動,則需給外引腳加啟動電平。)。定時器下面介紹一下確定時時/計數器初值的具體方法。在不同工作方式下計數器位數不同,最大計數值也不同。現假設最大計數值為M,那么各方式下的最大值M值如下:方式0:M=213=8192方式1:M=216=65536方式2:M=28=256方式3:定時器0分成兩個8位計數器,所以兩個M均為256。
因為定時器/計數器是作“加1”計數,并在計數滿溢出時產生中斷,因此初值X可以這樣計算: X=M-計數值定時器例:選擇T1方式0用于定時,在P1.1輸出周期為1ms方波,晶振
fosc=6MHz。解:根據題意,只要使P1.1每隔500us取反一次即可得到1ms的方波,因而T1的定時時間為500us,因定時時間不長,取方式1即可。則M1M0=1;因是定時器方式,所以=0;在此用軟件啟動T1,所以GATE=0。T0不用,方式字可任意設置,只要不使其進入方式3即可,一般取0,故TMOD=10H。計算500us定時T1初始值:
機器周期:T=12/fosc=12/(6×106)Hz=2μs設初值為X,則:(216-X)×2×10-6s=500×10-6s定時器X=216-250=65286=FF06H=1111111100000110B因此TH1=FFH,TL1=06H。初始化程序如下:TMOD=0x10; //定時器1方式1TH1=0XFF;TL1=0X06; //裝入時間常數TR1=1; //啟動定時器定時器4.1.4定時器中斷1、中斷的基本概念
中斷的定義:所謂“中斷”,是指CPU執行正常程序時,系統中出現特殊請求,CPU暫時中止當前的程序,轉去處理更緊急的事件(執行中斷服務程序),處理完畢(中斷服務完成)后,CPU自動返回原程序的過程。
中斷后轉向執行的程序叫中斷服務程序或中斷處理程序。原程序被斷開的位置(地址)叫作斷點。
發出中斷信號的設備稱為中斷源。中斷源要求中斷服務所發出的標志信號稱為中斷請示或中斷申請。
定時器
中斷源向CPU發出中斷申請,CPU經過判斷認為滿足條件,則對中斷源作出答復,這叫中斷響應。中斷響應后就去處理中斷源的有關請求,即轉去執行中斷服務程序。2.引入中斷的主要優點(1)提高CPU工作效率(2)實現實時處理功能(3)實現分時操作定時器3.STC89C52中斷源 STC89C52單片機共有6個中斷源。它們分別是:2個外部中斷,4個片內中斷,即定時器T0的溢出中斷、定時器T1的溢出中斷、定時器T2的溢出中斷和串行口中斷;這6個中斷源,可以根據需要隨時向CPU發出中斷申請。(1)外部中斷源
外部中斷是由外部信號引起的,請求有兩種信號觸發方式,即低電平觸發和下降沿觸發。外部中斷請求的這兩種信號方式,可通過設置寄存器TCON中的IT0和IT1位狀態的值來設定。定時器控制寄存器TCON各位定義如下表所示。定時器IE0/IE1:外部中斷申請標志位(由硬件自動置位,中斷響
應后轉向中斷服務程序時,由硬件自動清0)
=0:沒有外部中斷申請;
=1:有外部中斷申請。IT0/IT1:外部中斷請求的觸發方式控制位(可由用戶通過軟
件設置)。 =0:在端申請中斷的信號低電平有效; =1:在端申請中斷的信號負跳變有效。定時器(2)定時器溢出中斷源
定時/計數器中斷由單片機內部定時器產生,屬于內部中斷。STC89C52內部有三個16位的定時器/計數器T0、T1和T2,最常用的是T0和T1,它們以計數的方法來實現定時或計數的。當它作為定時器使用時,其計數信號來自于CPU內部的機器周期脈沖,當它作為計數器使用時,其計數信號來自于CPU的T0(P3.4)、T1(P3.5)引腳。
在啟動定時/計數器后,每來一個機器周期或在對應的引腳上每檢測到一個脈沖信號時,定時/計數器就加1一次,當計數器的值從全1變為全0時,就去置位一個溢出標志位,CPU查詢到后就知道有定時/計數器的溢出中斷的申請。定時器(3)串行中斷源
串行口中斷源分為串行口發送中斷和串行口接收中斷兩種。串行中斷是為串行數據傳送的需要而設置的。每當串行口發送完一組串行數據時,就會使串行口控制寄存器SCON中的串行發送中斷標志位TI置1,每當串行口接收完一組串行數據時,就會使串行接收中斷標志位RI置1,作為串行口中斷請求標志,產生一個中斷請求。串行口控制寄存器SCON的內容如下表所示。SCOND7D6D5D4D3D2D1D0位符號SM0SM1SM2RENTB8RB8TIRI位地址9FH9EH9DH9CH9BH9AH99H98H定時器其中與中斷請求標志有關的位如下:①TI:串行口發送中斷請求標志位
當發送完一幀串行數據后,由硬件置“1”;在轉向中斷服務程序后,需要用軟件對該位清“0”。②RI:串行口接收中斷請求標志位
當接收完一幀串行數據后,由硬件置“1”;在轉向中斷服務程序后,需要用軟件對該位清“0”。串行中斷請求由TI和RI的邏輯或得到。就是說,無論是發送標志還是接收標志,都會產生串行中斷請求。定時器4.中斷控制51系列單片機中斷系統的硬件結構如下圖所示定時器對中斷信號進行鎖存、屏蔽、優先級控制是通過設置一些特殊功能寄存器,如寄存器TCON、SCON、IE和IP來進行的。(1)中斷允許控制寄存器IE(0A8H)
EAESET1EX1ET0EX0EX0/EX1/ET0/ET1/ES位:分別是
,T0/T1,串行口的中斷允許控制位。
=0:禁止中斷;
=1:允許中斷。EA:總的中斷允許控制位(總開關):
=0:禁止全部中斷;
=1:允許中斷。(4)中斷優先級控制寄存器IP(0B8H)
51單片機有兩個中斷優先級,即高優先級和低優先級,每個中斷源都可設置為高或低中斷優先級,以便CPU對所有的中斷實現兩級中斷嵌套。51單片機內部中斷系統對各中斷源的中斷優先級有一個統一的規定,稱為自然優先級。如下表所示。中斷源入口地址中斷號優先級別說
明外部中斷00003H0高低來自P3.2引腳(INT0)的外部中斷請求定時/計數器0000BH1定時/計數器T0溢出中斷請求外部中斷10013H2來自P3.3引腳(INT1)的外部中斷請求定時/計數器1001BH3定時/計數器T1溢出中斷請求串行口0023H4串行口完成一幀數據的發送或接受請求定時/計數器2002BH5定時/計數器T2溢出中斷請求↓定時器
中斷優先級控制寄存器IP(0B8H)
PSP
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 北京市建筑材料寄存與環保檢測服務協議范本2025
- 2025年北京市外貿企業員工勞動合同參考范本
- 物聯網在智慧農業中的前景展望
- 科普手術操作流程
- 電子產品物流司機用工合同
- 2025年度辦公室租賃及企業財務咨詢服務協議
- 二零二五年度互聯網企業員工勞動合同范本
- 腎衰竭護理查房
- 校園衛生咱維護勞動教育
- 林地使用權轉讓合同模板
- 湖南省炎德英才名校聯考聯合體2024-2025學年高二下學期3月月考-數學+答案
- (3月省質檢)福建省2025屆高三畢業班適應性練習卷英語試卷(含答案)
- 專業網格員測試題及答案
- 2025年上半年貴州黔東南州各縣(市)事業單位招聘工作人員1691人筆試易考易錯模擬試題(共500題)試卷后附參考答案
- 生豬屠宰獸醫衛生檢驗人員理論考試題庫及答案
- 2023年廣東省中學生生物學聯賽試題解析(word)及答案(掃描版)
- 浙美版六年級下冊美術全冊教案
- 《云南省食品安全地方標準 天麻》編制說明
- 基于語音信號去噪處理的FIR低通濾波器設計要點
- G414(五) 預應力鋼筋混凝土工字形屋面梁
- 木箱制作作業指導書
評論
0/150
提交評論