




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、項目一 發光二極管LED點亮控制 教學目的了解單片機的內部結構與主要型號;掌握單片機引腳功能;掌握單片機I/O口的基本功能;掌握用I/O口實現簡單控制的方法;利用單片機的I/O口實現LED閃爍的控制。工作模塊一 點亮一個發光二極管工作任務使用AT89S52單片機,P1.0引腳接發光二極管(LED)的陰極,通過C語言程序控制,從P1.0引腳輸出低電平,使發光二極管點亮。 PROTEUS簡介PROTEUS是英國Labcenter Electronics公司開發的多功能EDA軟件。PROTEUS不僅是模擬電路、數字電路、模數混合電路的設計與仿真平臺,也是目前較先進的單片機和嵌入式系統的設計與仿真平臺
2、。它實現了在計算機上完成從原理圖與電路設計、電路分析與仿真、單片機代碼級調試與仿真、系統測試與功能驗證到形成PCB的完整的電子設計、研發過程。 LED控制電路按照工作任務要求,點亮一個LED電路是由AT89S52單片機和1個LED電路構成。AT89S52單片機是美國ATMEL公司生產的低電壓、高性能8位單片機,具有豐富的內部資源, 使用AT89S52單片機無須外部存儲器。 用PROTEUS設計第一個LED控制電路新建設計文件保存設計文件選取元器件放置元器件 編輯元器件 放置終端 連線 屬性設置 電氣規則檢測 工作過程P1.0引腳接發光二極管(LED)的陰極,P1.0引腳輸出低電平時,發光二極管
3、點亮。 問題: 為什么P1.0引腳輸出低電平,發光二極管點亮?通過程序控制,使P1.0引腳輸出低電平,使發光二極管點亮。問題: 程序怎么使P1口的引腳輸出低電平? 下面我們來看一下程序,就可以找到答案。LED點亮程序#include /包含AT89X52.H頭文件sbit LED=P10; /定義LED是P1.0引腳對應的變量名void main (void) LED=0; / P1.0=0,LED點亮 while(1);KEIL C51(P32)Keil C51 是德國Keil軟件公司開發的基于8051 內核的微控制器軟件開發平臺,是51系列單片機C語言軟件開發系統,是目前開發8051 內核
4、單片機的主流工具。Keil C51軟件提供豐富的庫函數和功能強大的集成開發調試工具,全Windows界面。Vision2 集成開發環境可以完成從工程建立和管理、編譯、連接、目標代碼的生成、軟件仿真和硬件仿真等完整的開發流程。 用KEIL C51編寫第一個C語言程序 建立第一個C程序項目建立工程文件建立源文件加載源文件設置工程的配置參數進行編譯和連接進入調試模式全速運行程序用PROTEUS仿真運行調試 加載“點亮一個LED.hex ”目標代碼文件打開Proteus “點亮一個LED”電路。雙擊單片機“AT89S52”,在彈出的“編輯元件”對話框中單擊“Program File”欄的打開按鈕,在彈
5、出的“選擇文件名”對話框找到前面編譯生成的“點亮一個LED.hex ”HEX文件,單擊“打開“按鈕,完成“點亮一個LED.hex ”HEX文件加載。將“Clock Frequency”欄中的頻率設為12MHz,單擊“確定”,即可完成加載目標代碼文件。 仿真運行調試 單擊仿真工具欄“運行”按鈕,單片機全速運行程序。 認識單片機單片機實質上是一個芯片(P7) C P U 存 儲 器定 時 器 / 計 數 器 中 斷 系 統P0-P3TxDRxD TINT并行I/O口串行I/O口單片機的發展 第一階段(1974-1976年)為單片機初級階段由于受工藝及集成度的限制,單片機采用雙片形式,且功能比較簡單
6、。第二階段(1976-1978年)為低性能單片機階段單片機采用單芯片形式,是“小而全”。第三階段(1978-1982年)為高性能單片機階段,也是單片機普及階段第四階段(1982年以后)為16位單片機階段單片機的特點 由于單片機是在一塊芯片上集成了一臺微型計算機所需的CPU、存儲器、輸入/輸出部件和時鐘電路等。因此它具有體積小,使用靈活、成本低、易于產品化、抗干擾能力強,可在各種惡劣環境下可靠地工作等特點。體積小、重量輕,價格低、功能強,電源單一、功耗低,可靠性高、抗干擾能力強;使用方便靈活、通用性強;目前大多數單片機采用哈佛(Harvard)結構體系;突出控制功能的指令系統;較低的處理速度和較
7、小的存儲容量。單片機的應用 單片機主要應用在以下幾個方面: 家用電器智能卡智能儀器儀表網絡與通信工業控制單片機的分類單片機可分為通用型單片機和專用型單片機兩大類。通用型單片機是把可開發資源全部提供給使用者的微控制器。我們通常所說的單片機即指通用型單片機。專用型單片機則是為過程控制、參數檢測、信號處理等方面的特殊需要而設計的單片機。按片內不同程序存儲器的配置來分片內帶ROM、片內帶EPROM型、片內無ROM按片內不同容量的存儲器配置來分51子系列型(是基本型)、52子系列型(是增強型)按芯片的半導體制造工藝上的不同來分HMOS工藝型、CHMOS工藝型(用“C”表示)按所能適應的環境溫度范圍,可劃
8、分為三個等級:070民用級、40+85工業級、65+125軍用級。MCS-51單片機MCS-51是美國Intel公司的8位高檔單片機系列,也是我國目前應用最為廣泛的一種單片機系列。8051/80C51是整個MCS-51系列單片機的核心。51系列單片機源于Intel公司的MCS-51系列,在Intel公司將MCS-51系列單片機實行技術開放政策之后,許多公司都以MCS-51中的基礎結構8051為基核推出了許多各具特色、具有優異性能的單片機,如Philips、Atmel等。這樣,把這些廠家以8051為基核推出的各種型號的兼容型單片機統稱為51系列單片機。Atmel公司的AT89系列單片機AT89系
9、列單片機不但具有一般MCS-51單片機的所有特性,而且其Flash程序存儲器可以用電擦除方式瞬間擦除、改寫, 寫入單片機內的程序還可以進行加密。 型號快閃ROM片內RAM尋址范圍并行口線串行口中斷源定時器AT89C514K128264K3215216AT89C528K256264K3216316AT89C20512K12824K1515216AT89C40514K12824K1515216AT89S514K128264K3215216AT89S528K256264K3216316單片機硬件結構(P10)時鐘電路CPUROMRAMT0 T1中斷系統串行接口并行接口P0 P1 P2 P3TXD R
10、XDINT0 INT1定時計數器中央處理器CPU:8位,運算和控制功能內部RAM:共256個RAM單元,用戶使用前128個單元,用于存放可讀寫數據,后128個單元被專用寄存器占用。內部ROM:4KB掩膜ROM,用于存放程序、原始數據和表格。定時/計數器:兩個16位的定時/計數器,實現定時或計數功能。并行I/O口:4個8位的I/O口P0、P1、P2、P3。串行口:一個全雙工串行口。中斷控制系統:5個中斷源(外中斷2個,定時/計數中斷2 個,串行中斷1個)時鐘電路:可產生時鐘脈沖序列,允許晶振頻率6MHZ和12MHZ復位電路中央處理器(CPU)中央處理器是單片機的核心,完成運算和控制功能。MCS-
11、51的CPU能處理8位二進制數或代碼。內部數據存儲器(內部RAM)芯片中共有256個RAM單元前128單元,作為供用戶使用的寄存器和用于存放可讀寫的數據;后128單元被專用寄存器占用。通常所說的內部數據存儲器就是指前128單元,簡稱內部RAM。內部程序存儲器(內部ROM)芯片中共有4 KB個ROM單元。用于存放程序、原始數據或表格,因此,稱之為程序存儲器,簡稱內部ROM。定時/計數器兩個16位的定時/計數器。實現定時或計數功能,并以其定時或計數結果對計算機進行控制。并行I/O口4個8位的I/O口(P0、P1、P2、P3)實現數據的并行輸入/輸出串行口一個全雙工的串行口,以實現單片機和其它設備之
12、間的串行數據傳送。該串行口功能較強,既可作為全雙工異步通信收發器使用,也可作為同步移位器使用。中斷控制系統5個中斷源,即外中斷兩個,定時/計數中斷兩個,串行中斷一個。全部中斷分為高級和低級共兩個優先級別。AT89S52單片機結構 一個8位CPU;一個片內振蕩器及時鐘電路;8K字節可重復擦寫的Flash閃速存儲器三級加密程序存儲器;2568字節內部RAM;3個16位定時器/計數器;32條可編程的I/O線(四個8位并行I/O端口);一個可編程全雙工串行口;具有8個中斷源、兩個優先級嵌套中斷結構。 AT89S52引腳功能(P11) 電源線:VCC(+5V)、VSS(地)振蕩電路:XTAL1、XTAL
13、2復位引腳:RST并行口:P0、P1、P2、P3EA:訪問程序存儲控制信號PSEN:外部ROM讀選通信號ALE:地址鎖存控制信號P3口線的第二功能AT89S52引腳功能電源引腳(2根) VCC(40腳):電源端,接+5V電源。VSS(20腳):接地端。時鐘引腳(2根) XTAL1(19腳):接外部晶振和微調電容的一端。XTAL2(18腳):接外部晶振和微調電容的另一端。AT89S52引腳功能控制引腳(4根) RST/VPD(9腳):復位信號。 當輸入的復位信號延續兩個機器周期以上的高電平時即為有效,用以完成單片機的復位初始化操作。ALE/PROG (30腳):地址鎖存控制信號。 在系統擴展時,
14、ALE用于控制把P0口輸出的低8位地址鎖存起來,以實現低位地址和數據的隔離。EA/VPP(31腳):訪問程序存儲控制信號。 當信號為低電平時,對ROM的讀操作限定在外部程序存儲器;當信號為高電平時,對ROM的讀操作是從內部程序存儲器開始,并可延至外部程序存儲器。PSEN(29腳):片外ROM讀選通信號端。 在讀片外ROM時,PSEN有效,為低電平,以實現對片外ROM的讀操作。AT89S52引腳功能P0口 (引腳32-39)普通I/O口P1口 (引腳1-8) 普通I/O口P2口 (引腳21-28)普通I/O口P3口 (引腳10-17)普通I/O口,或作為其他第二功能口P3口各引腳與第二功能表引腳
15、 第二功能 功能說明 P3.0RXD串行口輸入P3.1TXD串行口輸出P3.2INT0外部中斷0輸入P3.3INT1外部中斷1輸入P3.4T0定時器/計數器0計數輸入P3.5T1定時器/計數器1計數輸入P3.6WR片外RAM寫選通信號(輸出)P3.7RD片外RAM讀選通信號(輸出)最小單片機系統(P13)單片機5V電源,接地時鐘電路(晶振)復位電路時鐘電路時鐘電路為單片機產生時鐘脈沖序列。系統允許的晶振頻率一般為6 MHz和12 MHz,電容C1和C2取30 pF左右。晶體振蕩頻率高,則系統的時鐘頻率也高,單片機運行速度也就快。時序的概念 單片機內的各種操作都是在一系列脈沖控制下進行的,而各脈
16、沖在時間上是有先后順序的,這種順序就稱為時序。 單片機的時序定時單位從小到大依次為:時鐘周期、狀態周期、機器周期和指令周期。振蕩周期是指晶體振蕩器直接產生的振蕩信號的周期,是振蕩頻率fosc的倒數,用P表示。 狀態周期(或狀態S)是振蕩周期的兩倍,它分為P1節拍和P2節拍。1個機器周期是由6個狀態構成。執行一條指令所需的時間稱為指令周期。各種周期的相互關系 復位電路單片機的復位引腳RST出現2個機器周期以上的高電平時,單片機就執行復位操作。 常見的復位操作有上電自動復位和按鍵手動復位兩種方式 。上電自動復位是通過外部復位電路的電容充電來實現的。按鍵手動復位是通過復位端經電阻與電源VCC接通而實
17、現的,它兼備上電復位功能。復位功能復位是單片機的初始化操作。是把PC初始化為0000H,使CPU從0000H單元開始執行程序;同時還對其他一些寄存器有影響,但內部RAM的數據是不變的。 除了進入系統的正常初始化之外,當由于程序運行出錯或操作錯誤使系統處于死鎖狀態時,為擺脫困境,也需要按復位鍵重新啟動。技能訓練1-1 單片機最小系統只是單片機能滿足工作的最低要求,它不能對外完成控制任務,實現人機對話。 單片機最小系統應用開關控制LED點亮電路設計 程序設計 工作模塊2 -LED閃爍分析軟件實現思路:點亮發光二極管延時(延時子程序)關閉發光二極管延時重復上述動作(循環)電路設計和前面一樣C語言程序
18、#include sbit LED = P10;void Delay() unsigned char i, j; for (i=0;i255;i+) for (j=0;j255;j+);void main () while(1) LED = 0; Delay(); LED = 1; Delay(); 思考把Delay()延時函數放在后面如何處理?提示:在程序開頭加入說明行(即子程序頭加分號),既定義在前,使用再后。C語言程序的構成(P47) C語言的程序是由一個或多個函數構成的,最簡單的程序只有一個main函數 。一個函數由兩部份組成 函數的首部、即函數的第一行; 包括函數名、函數類型、函數屬
19、性、函數參數(形參)名、參數類型。 函數體,即函數首部下面的大括號“”內的部份。函數體一般包括: 聲明部份:定義所用到的變量,如void Delay()中的unsigned char i, j;。執行部份:由若干個語句組成。 標識符 C語言規定標識符只能由字母、數字和下劃線三種字符組成,且第一個字符必須為字母或下劃線。變量名、常數名、數組名、函數名、文件名與類型名等統稱為標識符。標識符分為預定義標識符和用戶標識符。 說明:C語言中大寫字母與小寫字母被認為是兩個不同的字符。標識符在命名時應當簡單,含義清晰,這樣有助于閱讀理解程序。 關鍵字 關鍵字則是編程語言保留的特殊標識符,它們具有固定名稱和含
20、義,在程序編寫中不允許標識符與關鍵字相同。在Keil C中的關鍵字除了有ANSI C標準的32個關鍵字外,還根據51單片機的特點擴展了相關的關鍵字。在Keil C的文本編輯器中編寫C程序,系統把保留字以不同顏色顯示,缺省顏色為天藍色。 C語言基本語句(P52) C語言的程序是由一個或多個函數組成的,而函數又是由若干個語句組成的。語句是由一些基本字符和定義符按照C語言的語法規定組成的,每個語句以分號結束,分號是C語句的必要組成部份。C語言的語句可分為以下5種類型:表達式語句函數調用語句控制語句復合語句空語句 表達式語句表達式語句是由一個表達式加一個分號構成一個語句,其作用是計算表達式的值或改變變
21、量的值。它的一般形式是: 表達式; 即在表達式末尾加上分號,就變成了表達式語句。最典型的表達式語句是:在賦值表達式后加一個分號構成賦值語句。例如:a=3 是一個賦值表達式a=3; 是一個賦值語句函數調用語句由一個函數調用加一個分號構成函數調用語句,其作用是完成特定的功能。它的一般形式是:函數名(參數列表);例如mDelay(100); /調用延時函數,參數是100 控制語句控制語句用于完成一定的控制功能,以實現程序的各種結構方式。C語言有9種控制語句,可分為以下三類。條件判斷語句:if語句、switch語句。循環語句:for語句、while語句、do-while語句。轉向語句:break語句、
22、continue語句、goto語句、return語句。 復合語句復合語句是用一對大括號將若干條語句括起來的,也稱為分程序,在語法上相當于一條語句。例如main() t=x; x=y; y=t; /復合語句 空語句只有一個分號的語句稱為空語句。它的一般形式是: ; 空語句是什么操作也不執行,常用于作為循環語句中的循環體,表示循環體什么也不做。 注釋 注釋內容可以單獨寫在一行上,也可以寫在一個語句之后;可以用/*.*/的形式為 C 程序的任何一部份作注釋;Keil C也支持 C+風格的注釋,就是用“/”引導的后面的語句是注釋,例: P1_0=!P1_0; /取反 P1.0這種風格的注釋,只對本行有
23、效,書寫比較方便,所以在只需要一行注釋的時候,我們往往采用這種格式。 技能拓展-音頻控制應用 音頻控制電路由單片機最小系統、放大濾波電路和揚聲器構成。放大濾波電路由NPN三極管Q1、電阻R3、電容C4構成,Q1的基極經電阻R2接到P0.0引腳。 音頻控制流程圖 利用AT89S52端口輸出脈沖方波,方波經放大濾波后,驅動揚聲器發聲,聲音的頻率高低由延時長短控制。 音頻控制程序音頻控制程序和模塊二LED閃爍程序基本一樣,下面寫出程序不同之處。#include /包含AT89X52.H頭文件sbit SPK=P00; /定義SPK是P0.0位對應的引用符號 SPK = 0; / P0.0=0,輸出低
24、電平 Delay(); / 延時 SPK = 1; / P1.0=1,輸出高電平 Delay(); 技能訓練1-2 報警產生器P1.7引腳接一個開關;用P0.0輸出1KHz和500Hz的音頻信號驅動揚聲器,作報警信號。要求1KHz信號響100ms,500Hz信號響200ms,交替進行;當開關合上報警信號響,當開關斷開報警信號停止。 參考程序 #include #include unsigned char count; void dely500(void) /延時500us,即0.5ms unsigned char i; for(i=250;i0;i-) _nop_(); void main(v
25、oid) while(1) if(P1_7=0) for(count=200;count0;count-) /1KHz信號響100ms P1_0=P1_0; dely500(); for(count=200;count0;count-) /500Hz信號響200ms P1_0=P1_0; dely500(); dely500(); 項目二LED循環點亮教學目的掌握P0、P1、P2和P3功能及應用技能;掌握內部數據存儲器的地址分配及特殊功能寄存器;掌握C語言數據類型、常量和變量;會利用單片機I/O口實現開關控制LED循環點亮和步進電機控制。 LED控制電路控制八只發光二極管按一定的規律循環點亮工
26、作過程P1口接發光二極管(LED)的陰極,P1口的管腳輸出低電平時對應的發光二極管點亮。 問題: LED采用的是共陰極接法還是共陽極接法? 為什么P1口的管腳輸出低電平,對應的發光二極管點亮?通過程序按一定的規律向P1口的管腳輸出低電平和高電平,控制八只發光二極管循環點亮。問題: 程序怎么使P1口的管腳循環輸出低電平和高電平?LED循環點亮功能實現分析 由于LED循環點亮電路的LED是采用共陽極接法,這樣我們就可以通過“0”和“1”來控制LED的亮和滅。例如:在P1口輸出十六進制數0 xfe(二進制11111110B),D1被點亮。LED循環點亮功能實現過程如下:8個LED全滅,控制碼為0 x
27、ff;D1點亮,P1口輸出0 xfe,取反為0 x01(二進制00000001B),初始控制碼為0 x01;D2點亮,P1口輸出0 xfd,取反為0 x02(二進制00000010B), 控制碼為0 x02;D3點亮,P1口輸出0 xfb,取反為0 x04(二進制00000100B), 控制碼為0 x04;D8點亮,P1口輸出0 x7f,取反為0 x80(二進制10000000B), 控制碼為0 x80;重復第二步,這樣就可以實現LED循環點亮。 LED控制程序(C語言)Void main() unsigned char i; unsigned char temp; P1 = 0 xff; /
28、十六進制全1,熄滅所有LED while(1) temp = 0 x01; /第一位為1 for (i=0;i8;i+) P1 = temp; /temp值取反送P1口 Delay(); temp = temp 1 ; /temp值左移一位 思 考如何改變循環點亮的方向?并行I/O端口電路 單片機有4組8位并行I/O端口,稱為P0口、P1口、P2口和P3口;每個端口都各有8條I/O口線,每條I/O口線都能獨立地用作輸入或輸出;P0口負載能力為8個TTL門電路,P1口、P2口和P3口負載能力為4個TTL門電路;歸入特殊功能寄存器之列,具有字節尋址和位尋址功能。P0口的結構由1個數據輸出鎖存器(D
29、觸發器)、2個三態數據輸入緩沖器、1個輸出控制電路和1個輸出驅動電路組成。輸出控制電路由1個轉換開關MUX、1個與門及1個非門組成;輸出驅動電路由一對場效應管(V1和V2)組成,其工作狀態受輸出控制端的控制。 P0口有兩種功能通用I/O口地址/數據 分時復用總線 P0口作通用I/O口使用作為通用的I/O口使用時,內部的控制信號為低電平,封鎖與門,將輸出驅動電路的上拉場效應管(V1)截止,同時使多路轉接電路MUX接通鎖存器Q端的輸出通路。注意 當P0口進行一般的I/O輸出時,由于輸出電路是漏極開路電路,因此必須外接上拉電阻才能有高電平輸出;當P0口進行一般的I/O輸入時,必須先向電路中的鎖存器寫
30、入“1”,使場效應管(V2)截止,以避免鎖存器為“0”狀態時對引腳讀入的干擾,因為如果V2管是導通的,不論P0.X引腳上的狀態如何,輸入都會是低電平,將導致輸入錯誤。 P0口作地址/數據分時復用總線使用 當輸出地址或數據時,由內部發出控制信號,打開上面的與門,并使多路轉接電路MUX將內部地址/數據線與驅動場效應管(V2)接通。若地址/數據線為1,則V1導通,V2截止,P0口輸出為1;反之V1截止,V2導通,P0口輸出為0。而當輸入數據時,讀引腳使三態數據輸入緩沖器打開,數據信號則直接從引腳通過數據輸入緩沖器進入內部總線。 P1口的結構P1口通常作為通用I/O口使用的,在電路結構上與P0口有一些
31、不同之處:首先它不再需要多路轉接電路MUX;其次是電路的內部有上拉電阻,與場效應管共同組成輸出驅動電路。 P1口工作過程當作為輸出口時,1寫入鎖存器,Q(非)=0,場效應管截止,內部上拉電阻將電位拉至“1”,此時該口輸出為1,當0寫入鎖存器,Q(非)=1, 場效應管導通,輸出則為0。當作為輸入口時,必須先向鎖存器寫1,Q(非)=0,場效應管截止,此時該位既可以把外部電路拉成低電平,也可由內部上拉電阻拉成高電平。 P2口的結構它由一個數據輸出鎖存器(D觸發器)、兩個三態數據輸入緩沖器、一個轉換開關MUX、一個數據輸出驅動電路和控制電路組成。 P3口當作為I/O使用時,第二功能信號引線應保持高電平
32、,與非門開通,以維持從鎖存器到輸出端數據輸出通路的暢通。 當輸出第二功能信號時,該位的鎖存器應置“1”,使與非門對第二功能信號的輸出是暢通的,從而實現第二功能信號的輸出。 【技能訓練2-1】P0口外接上拉電阻 本電路設計和模塊三LED循環點亮電路基本一樣,差別是:使用了排阻、P0口接LED的陰極以及在P0口和LED陰極之間外接了上拉電阻 排阻 八個電阻的功能是完全一樣的,加工到一個器件里面,這個器件通常稱之為排阻。為了在電路板上占很小的地方,方便安裝和生產,在電路設計時常常選擇排阻。PR1和PR2都是排阻,阻值分別為4.7K*8和220*8。PR1排阻是上拉電阻,其功能是在這個引腳沒有信號的時
33、候,起到電位上拉的作用。PR2和普通的電阻用途沒有任何不同,在這里面起到限流作用,使通過LED的電流被限制在十幾個毫安左右。 AT89C51 內存空間 內部程序存儲器(FLASH)4K 字節 外部程序存儲器(ROM )64K 字節 內部數據存儲器(RAM )256 字節外部數據存儲器(RAM )64K 字節低128 個字節 寄存器區(單元地址為00H1FH) 共有4組寄存器,每組8個寄存單元,各組都以R0R7作寄存單元編號。位尋址區(單元地址為20H2FH) 既可作為一般RAM單元使用,進行字節操作,也可以對單元中每一位進行位操作。用戶區(單元地址為30H7FH) 供用戶使用的一般RAM區,沒
34、有任何規定或限制,一般應用中常把堆棧開辟在此區中。高128 個字節 高128單元是供給專用寄存器使用的,也稱為特殊功能寄存器,單元地址為80HFFH。特殊功能寄存器位地址空間 復位后內部各寄存器的數據值 PSW程序狀態字 用于存放程序運行中的各種狀態信息。CY (PSW.7) :高位進位標志位。常用“C”表示。 AC (PSW.6) :輔助進位標志位。 F0 (PSW.5 ) :用戶標志位。 RS1(PSW.4) :寄存器組選擇位1。 RS0(PSW.3) :寄存器組選擇位0。 OV (PSW.2 ):溢出標志位。 (PSW.1) :保留位,無定義。 P (PSW.0 ) :奇偶校驗位,若累加
35、器(A )中的“1”的位個數是奇數個則P1,偶數個則P0。 寄存器組的選擇 ACC累加器8位寄存器,是最常用的專用寄存器,功能較多,地位重要。既可用于存放操作數,也可用來存放運算的中間結果。MCS-51單片機中大部分單操作數指令的操作數就取自累加器,許多雙操作數指令中的一個操作數也取自累加器。B寄存器B寄存器是一個8位寄存器,主要用于乘除運算。乘法運算時,B存乘數。乘法操作后,乘積的高8位存于B中。除法運算時,B存除數。除法操作后,余數存于B中。此外,B寄存器也可作為一般數據寄存器使用。PC程序計數器作用是控制程序的執行順序。其內容為將要執行指令的地址,尋址范圍達64 KB。PC有自動加1功能
36、,從而實現程序的順序執行。PC沒有地址,是不可尋址的,因此用戶無法對它進行讀寫,但可以通過轉移、調用、返回等指令改變其內容,以實現程序的轉移。地址不在SFR(專用寄存器)之內,一般不計作專用寄存器。DPTR 數據指針數據指針為16位寄存器。編程時,DPTR既可以按16位寄存器使用,也可以按兩個8位寄存器分開使用,即: DPH: DPTR高位字節 DPL DPTR低位字節SP堆棧指針堆棧是一個特殊的存儲區,用來暫存數據和地址,它是按“先進后出”的原則存取數據的。堆棧共有兩種操作:進棧和出棧。 問題:復位后,SP的值是多少? 為什么,堆棧通常設在用戶區(30H7FH)?中斷源向量地址 “頭文件包含
37、”處理 所謂“頭文件”是指一個文件將另外一個文件的內容全部包含進來。頭文件一般在C:KELLC51INC下,INC文件夾里面有不少頭文件,并且里面還有很多以公司分類的文件夾,里面也都是相關產品的頭文件。在單片機中用C語言編程時,往往第一行就是頭文件或者其它的自定義頭文件。特殊功能寄存器在AT89X52.H中定義 符號 P1_0 表示 P1.0 引腳 程序存儲器 程序存儲器是用于存放用戶程序、數據和表格等。它是以程序計數器PC作為地址指針,MCS-51的程序計數器PC是16位的,所以MCS-51具有64KB程序存儲器尋址空間。對于內部無ROM的8031單片機,它的程序存儲器必須外接,空間地址為6
38、4kB,此時單片機的EA端必須接地,強制CPU從外部程序存儲器讀取程序。對于內部有ROM的單片機,正常運行時,則需接高電平,使CPU先從內部的程序存儲中讀取程序,當PC值超過內部ROM的容量時,才會轉向外部的程序存儲器讀取程序。 MCS-51ROM配置圖 當EA=1時,程序從內部ROM開始執行,當PC值超過內部ROM容量時會自動轉向外部ROM空間。當EA=0時,程序從外部存儲器開始執行。 51子系列ROM配置圖 52子系列ROM配置圖 具有特殊功能的地址 啟動地址單片機啟動復位后,程序計數器的內容為0000H,所以系統必須從0000H單元開始執行程序。因而0000H是啟動地址,也稱為系統程序的
39、復位入口地址。中斷服務程序入口地址 是專門用于存放中斷服務程序的地址單元,中斷響應后,按中斷的類型,自動轉到各自的入口地址去執行程序。 中斷源入口地址外部中斷00003H定時/計數器0000BH外部中斷10013H定時/計數器1001BH串行中斷0023H*定時器2溢出或T2EX(P1.1)端負跳002BH工作模塊4 開關控制LED循環點亮 用P3.0作輸入接開關SW,P1口作輸出接8個LED,通過開關SW控制LED循環點亮。開關SW打開,LED循環點亮,開關SW合上,LED停止循環點亮。 開關控制LED循環點亮程序 #include /包含AT89X52.H頭文件sbit SW=P30; /
40、定義SW是P3.0位對應的變量名void main() unsigned char i; unsigned char temp; P1 = 0 xff; /十六進制全1,熄滅所有LED while(1) temp = 0 x01; /第一位為1 for (i=0;i8;i+) while(SW!=0); P1 = temp; /temp值取反送P1口 Delay(); temp = temp 1 ; /temp值左移一位 C51數據類型 C51定義了標準C語言的所有數據類型;同時對標準C語言進行了擴展,更加注意對系統資源的合理利用,如表所示。 數據類型長度數值范圍unsigned char1字
41、節0255char1字節-128+127unsigned int2字節065535int2字節-32768+32767unsigned long4字節04294967295long4字節-2147483648+2147483647float4字節1.175494E-383.402823E+38*13字節對象的地址bit位0或1sfr1字節0255sfr162字節065535sbit位0或1C51基本數據類型 char字符類型長度是一個字節(8位) int整型長度為兩個字節(16位) long長整型 長度為四個字節(32位) float浮點型長度為四個字節(32位) * 指針型 指針型本身就是一
42、個變量,在這個變量中存放的是指向另一個數據的地址。這個指針變量要占據一定的內存單元,在C51中它的長度一般為13個字節。 C51擴展的數據類型 bit位變量 sfr特殊功能寄存器 sfr16 16位特殊功能寄存器 sbit可尋址位 bit位變量 bit位變量可以將與MCS-51硬件特性操作有關的定義成位變量。位變量必須定位在MCS-51單片機內部RAM的位尋址空間中。但不能定義位指針,也不能定義位數組。bit位變量的值就是一個二進制位,不是0就是1,類似True和False。例如: bit flag; / flag為bit位變量,其值是0或1 sfr特殊功能寄存器這種定義方法與標準C語言不兼容
43、,只適用于對MCS-51系列單片機進行C語言編程。Sfr占用一個字節,數值范圍為0255。利用它可以訪問51單片機內部的所有特殊功能寄存器。特殊功能寄存器C51定義的一般語法格式如下: sfr 特殊功能寄存器名=特殊功能寄存器的字節地址;例如: sfr P1 = 0 x90;這一句定義了P1為P1端口在內部的寄存器。又如: sfr SCON=0 x98;/ 串口控制寄存器,地址為0 x98 sfr TMOD=0 x89;/ 定時器/計數器方式控制寄存器sfr16 16位特殊功能寄存器sfr16占用兩個字節。在許多新的MCS-51系列單片機中,有時會使用兩個連續地址的特殊功能寄存器來指定一個16
44、位的值。如52子系列的定時器/計數器2。為了有效地訪問這類SFR,可使用關鍵字“sfr16”來定義,16位SFR定義語句的語法格式與8位SFR相同,只是“=”后面的地址必須用16位SFR的低字節地址,即低字節地址作為“sfr16”的定義地址。例如: sfr16 T2 = 0 xCC /定時器/計數器2:T2低8位地址為0 xCC,T2高8位地址為0 xCD注意:這種定義適用于所有新的16位SFR,不能用于定時器/計數器0和1。 sbit可尋址位C51的擴充功能支持特殊位的定義,與SFR定義一樣,關鍵字“sbit”用于定義某些特殊位,利用它可以訪問芯內部部的RAM中的可尋址位或特殊功能寄存器中的
45、可尋址位。如先前我們定義: sfr P1 = 0 x90; 因P1端口的寄存器是可位尋址的,所以我們可以定義: sbit P1_1 = P11;/P1_1為P1中的P1.1引腳這樣我們在以后的程序語句中就可以用P1_1來對P1.1引腳進行讀寫操作了。在C語言里,由于P1.1不是一個合法的C語言變量名,得給它另起一個名字,這里起的名為 P1_1,所以必須給它們建立聯系,這里使用了C51的關鍵字sbit來定義 sbit 的用法有三種格式 第一種格式sbit bit-name = sfr-nameint constant;其中“bit-name”是一個尋址位符號名,該位符號名必須是MCS-51單片機
46、中規定的位名稱; “sfr-name”必須是已定義過的SFR的名字;“”后的整常數是尋址位在特殊功能寄存器“sfr-name”中的位號,必須是07范圍中的數。例如:sfr PSW=0 xD0; / 定義PSW寄存器地址為0 xD0sbit OV=PSW2; / 定義OV位為PSW.2,地址為0 xD2sbit CY=PSW7; / 定義CY位為PSW.7,地址為0 xD7 sbit 的用法有三種格式第二種格式:sbit bit-name = int constantint constant;其中“=”后的int constant為尋址地址位所在的特殊功能寄存器的字節地址;“”符號后的int c
47、onstant為尋址位在特殊功能寄存器中的位號。例如:sbit OV=0 xD02;/定義OV位地址是0 xD0字節中的第2位sbit CY=0 xD07;/定義CY位地址是0 xD0字節中的第7位 sbit 的用法有三種格式第三種格式:sbit bit-name = int constant;其中“=”后的int constant為尋址位的絕對位地址。例如:sbit OV=0 xD2; /定義OV位地址為0 xD2sbit CY=0 xD7; /定義CY位地址為0 xD7 C語言常量與變量 常量是在程序運行過程中不能改變的,而變量是可以在程序運行過程中不斷變化的。變量的定義可以使用所有C51
48、編譯器支持的數據類型,而常量的數據類型只有整型、浮點型、字符型、字符串型和位變量。 常量 常量可用在不必改變值的場合,如固定的數據表,字庫等。 常量的定義方式有幾種,下面來加以說明。#difine False 0 x0; /用預定義語句可以定義常量#difine True 0 x1; /這里定義False為0,True為1 程序中用到False和True,在編譯時,False替換為0,True替換為1。unsigned int code a=100; /用code把a定義在程序存儲器中并賦值const unsigned int c=100; /用const定義c為無符號int常量并賦值 以上兩
49、句它們的值都保存在程序存儲器中,而程序存儲器在運行中是不允許被修改的,所以如果在這兩句后面用了類似a=110,a+這樣的賦值語句,編譯時將會出錯。 變量 變量就是一種在程序執行過程中其值能不斷變化的。要在程序中使用變量必須先用標識符作為變量名,并指出所用的數據類型和存儲模式,這樣編譯系統才能為變量分配相應的存儲空間。定義一個變量的格式如下: 存儲種類數據類型存儲器類型變量名表在定義格式中除了數據類型和變量名表是必要的,其它都是可選項。 存儲種類存儲種類有四種自動(auto),缺省類型為自動(auto)外部(extern)靜態(static)寄存器(register) 存儲器類型 存儲器類型的說
50、明就是指定該變量在C51硬件系統中所使用的存儲區域,并在編譯時準確的定位。 存儲器類型說明data直接訪問內部數據存儲器(128字節),訪問速度最快bdata可位尋址內部數據存儲器(16字節),允許位與字節混合訪問idata間接訪問內部數據存儲器(256字節),允許訪問全部內部地址pdata分頁訪問外部數據存儲器(256字節),用MOVX Ri指令訪問xdata外部數據存儲器(64KB),用MOVX DPTR指令訪問code程序存儲器(64KB),用MOVC A+DPTR指令訪問存儲模式 SMALL存儲模式把所有函數變量和局部數據段放在8051系統的內部數據存儲區,這使訪問數據非常快。在寫小型
51、的應用程序時,變量和數據放在data內部數據存儲器中是很好的,因為訪問速度快;但在較大的應用程序中data區最好只存放小的變量、數據或常用的變量(如循環計數、數據索引),而大的數據則放置在別的存儲區域。COMPACT存儲模式中所有的函數和程序變量和局部數據段定位在8051系統的外部數據存儲區,最多可有256字節。LARGE存儲模式所有函數和過程的變量和局部數據段都定位在8051系統的外部數據區,最多可有64KB。 工作模塊5 步進電機控制 工作任務 使用AT89S52單片機,由P1口的P1.0、 P1.1 、P1.2和 P1.3四個引腳通過步進電機驅動電路分別接在四相步進電機的四相繞組,步進電
52、機的勵磁方式采用四相雙四拍,通過程序控制步進電機正轉。 認識步進電機 步進電動機是“一步一步”的轉動的一種電動機。電源輸入的電信號是脈沖信號(脈沖電壓),每輸入一個電脈沖,電動機就轉過一個固定角度。故而,也稱為脈沖電動機。 步進電機的結構 步進電機是利用輸入數字信號轉換成機械能量的電氣設備。以內部線圈繞線來區分步進電機,有4相和5相兩種,使用5V及12V電源控制。一般來說,4相步進電機又稱為2相雙繞組步進電機,是最常用的一種電機。步進電機的工作過程 每輸入一個脈沖信號,步進電機固定旋轉一個步進角。例如: 若步進角為1.8的步進電機,如果輸入200個脈沖信號,步進電機就會旋轉200個步進角,且剛
53、好轉一圈(2001.8=360)。由于步進電機旋轉角度與輸入脈沖數目成正比,只要控制輸入的脈沖數目便可控制步進電機轉動角度。因此,合適的回路控制常用于精確定位和精確定速。 步進電機線圈勵磁的方式DC電流通過定子線圈建立磁場,稱為勵磁。步進電機勵磁順序:1相勵磁順序;2相勵磁順序;1-2相勵磁順序。 2相勵磁順序4相:表示電動機有四相繞組,分別為A、B、/A、/B繞組。2相勵磁:表示每一種勵磁狀態都有兩相繞組勵磁。2相勵磁順序:四種勵磁狀態為一個循環。只要改變勵磁順序,就可以改變步進電機旋轉方向。 正轉:(A、B)(B,/A)(/A,/B)(/B,A)(A,B)反轉:(A、B)(/B,A)(/A
54、,/B)(B,/A)(A,B)步進電機控制電路設計 步進電機驅動電路由ULN2003A和74LS04構成,其中ULN2003A驅動器是一個高電壓、大電流的達靈頓對數組。由于ULN2003A的輸入與TTL電平兼容,所以一般能直接連接到驅動組件或是負載上,例如:繼電器、電機或是LED顯示器等。電機正轉功能實現分析 控制狀態P1口控制碼P1.3P1.2P1.1P1.0D相C相B相A相A相、B相繞組通電03H0011B相、C相繞組通電06H0110C相、D相繞組通電0CH1100D相、A相繞組通電09H1001步進電機控制程序設計 #include /由delay參數確定延遲時間 void mDela
55、y (unsigned int delay) unsigned int i; for(;delay 0; delay-) for(i=0;i124;i+); void main() while(1) P1=0 x03; / A、B繞組勵磁 mDelay (50); P1=0 x06; / B、C繞組勵磁 mDelay (50); P1=0 x0C; /C、D 繞組勵磁 mDelay (50); P1=0 x09; /D、A繞組勵磁 mDelay (50); 技能拓展ULN2003A驅動器應用 在電子電路應用上,大多要求具有大電流輸出的能力,以便驅動各種類型的負載,驅動電路是電子設備輸出電路中一
56、個重要的組成部分。在大型儀器系統中,經常要用到伺服馬達、步進馬達、各種電磁閥等驅動電壓高和功率較大的組件。因此,像這種ULN2000和ULN2800等高電壓、大電流的達靈頓晶體管數組的產品就被開發出來,從而控制大功率組件。由于這類組件功能強大、應用范圍廣。UN2000系列能夠同時驅動7組負載,向ULN2800系列則能夠同時驅動8組負載。 ULN2003A特點一般市面上較為常見的是ULN2003A。ULN2003A組件是一個高電壓、大電流的達靈頓對數組,其中包含7個具備共射極的開集極達靈頓對。ULN2003A具有以下特點:電流增益高(大于1000mA);帶負載能力強(輸出電流大干500mA);溫
57、度范圍寬(-40o85o);工作電壓高(大于50V)。 ULN2003A引腳功能 由于ULN2003A的輸入與TTL電平兼容。所以一般能直接連接到驅動組件或是負載上。例如,繼電器、DC馬達或是LED顯示器等。對于每一個驅動器來說,都包含了一個二極管,其陽極連接到輸出端,而陰極連接到7個二極管的共通點上。外部的負載連接到電源供應點和驅動器的輸出端之間。該電源供應為小于+50V的正電壓。 【技能訓練2-2】單片機驅動繼電器電路設計通過ULN2003A的3個驅動器輸出直接驅動3個繼電器。每一個繼電器線圈的端子連接到驅動器輸出,另一端則漣接到供應電壓上。連接多大的電壓依賴繼電器的規格。 項目三數碼管顯
58、示教學目的掌握數字、字符轉換成顯示段碼的軟件譯碼方法;掌握靜態顯示的原理;掌握動態顯示的原理;掌握數碼管程序設計的方法。P130工作模塊6 數碼管循環顯示 09 利用AT89S51 單片機的P1 端口的P1.0P1.7 連接到一個共陰數碼管的ah 的筆段上,數碼管的公共端接地。在數碼管上循環顯示 09 數字。 工作模塊6 數碼管顯示程序(C程序)#include unsigned char code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f; unsigned char dispcount;void de
59、lay (void) unsigned char i,j,k; for(i=40;i0;i-) for(j=40;j0;j-) for(k=248;k0;k-); void main(void) while(1) for(dispcount=0;dispcount2的結果為真,而3b,a+bb+c,(a=3)=(b=5)在 C 語言中,沒有專門的邏輯型變量,如果運算的結果是“真”,用數值“1”表示,而運算的結果是“假”則用數值“0”表示。例如:x1=32的結果是x1等于1 原因是32的結果是“真”,即其結果為1,該結果被“”號賦給了x1。又如:x2=3=2的結果是 x2=0,請自行分析。 邏輯
60、運算符C語言提供了三種邏輯運算符:“&”(邏輯與);“|”(邏輯或);“!”(邏輯非)。 邏輯表達式用邏輯運算符將關系表達式或邏輯量連接起來的式子,稱為邏輯表達式。C語言編譯系統在給出邏輯運算的結果時:用“1”表示真,而用“0”表示假。在判斷一個量是否是“真”時,以0代表“假”,而以非0代表“真”,這一點務必要注意。若a=10,則!a的值為0,因為10被作為真處理;如果a=-2,結果與上完全相同,初學時常會誤以為負值為假,所以這里特別提醒注意;若a=10,b=20,則a&b的值為1,a|b的結果也為1。 if語句(P54)用if語句構成分支結構。分支結構又稱選擇結構,它體現了程序的判斷能力。這
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州版c類安全員考試試題及答案
- 廣東省建筑b證考試試題及答案
- 區塊鏈技術在跨境電子商務中的反欺詐研究-洞察闡釋
- 車架安全測試題及答案
- 采油工藝考試題及答案
- 《湖心亭看雪》教學實錄
- 2024年度河北省二級造價工程師之建設工程造價管理基礎知識能力測試試卷B卷附答案
- 商務寫字樓租賃合同范本
- 房屋買賣代理傭金結算協議
- Unit1-Listening-and-Speaking-and-Reading-結構詳解課件
- 九宮數獨200題(附答案全)
- 人教版2024年小升初語文模擬試卷(含答案解析)
- 2024年山東高壓電工題庫電工高級工考試題庫(全國版)
- 內鏡下硬化劑治療護理
- 三公經費違規的主要表現及防范措施
- 高中英語外研版(2019)選擇性必修第一冊各單元主題語境與單元目標
- 游艇運營方案
- 人教版八年級下學期音樂期末考試試卷(含答案)
- 給小學生科普人工智能
- 以青春之名勵青春之志
- 思維導圖(高分作文寫作)
評論
0/150
提交評論