Ⅰ 單片機開發與典型工程項目實例詳解的目 錄
1.1 單片機的應用和特點 1
1.1.1 單片機的應用 1
1.1.2 主流單片機的種類及特點 3
1.2 MCS-51系列單片機的內部結構 7
1.3 MCS-51單片機的引腳功能與時序 9
1.3.1 MCS-51系列單片機引腳說明 10
1.3.2 MCS-51單片機的時序 16
1.4 MCS-51單片機的存儲器組織 17
1.4.1 程序存儲器 18
1.4.2 數據存儲器 19
1.4.3 特殊功能寄存器 21
1.5 單片機最小系統 24
1.5.1 單片機最小系統 24
1.5.2 彩燈控制器的設計 25
1.5.3 順序控制器的設計 27
1.6 本章小結 29 2.1 單片機C語言宏配置介紹 30
2.1.1 處理器的配置 30
2.1.2 ID區域 31
2.1.3 EEPROM數據 31
2.2 單片機數據結構 31
2.2.1 類型限定詞 32
2.2.2 常數 33
2.2.3 變數 34
2.2.4 構造數據類型 38
2.2.5 函數 46
2.2.6 中斷 49
2.2.7 C語言和匯編語言的嵌套使用 53
2.2.8 偽指令 54
2.3 MPLAB IDE編譯器簡介 57
2.3.1 MPLAB工程管理器(MPLAB Project Manager) 57
2.3.2 MPLAB文本編輯器(MPLAB Editor) 57
2.3.3 MPLAB軟體模擬器(MPLAB-SIM Simulator) 58
2.3.4 MPLAB在線模擬器(MPLAB-ICE Simulator) 58
2.4 MPLAB IDE的安裝和使用 58
2.4.1 MPLAB IDE的安裝要求 58
2.4.2 MPLAB IDE的使用 59
2.4.3 實例應用 59
2.4.4 MPLAB IDE中的工程 62
2.4.5 MPLAB IDE工程的編譯 65
2.4.6 MPLAB IDE的軟體模擬 66
2.5 MCC18基礎 68
2.5.1 MCC18的安裝目錄瀏覽 68
2.5.2 MCC18的語言執行流程 70
2.5.3 MCC18舉例 70
2.5.4 MCC18的編譯環境 72
2.5.5 MCC18和單片機的比較 73
2.6 單片機的混合開發 74
2.6.1 C51和匯編語言的性能比較 74
2.6.2 C51和匯編語言的混合編程 74
2.7 本章小結 79 3.1 單片機應用系統設計的流程 80
3.2 單片機應用系統兩設計原則 82
3.2.1 硬體系統設計原則 82
3.2.2 應用軟體設計原則 83
3.3 單片機的選型 83
3.3.1 單片機選型的原則 83
3.3.2 單片機選型參考 85
3.3.3 開發工具的選擇 86
3.4 系統常見故障與調試 87
3.5 本章小結 88 4.1 數字濾波演算法 89
4.1.1 算術平均值濾波 90
4.1.2 滑動平均值濾波 92
4.1.3 防脈沖干擾平均值濾波 93
4.1.4 中值濾波 95
4.1.5 一階滯後濾波 96
4.2 數字PID控制演算法 97
4.2.1 位置式PID控制演算法 98
4.2.2 增量式PID控制演算法 100
4.2.3 積分分離的PID控制演算法 102
4.2.4 變速積分PID控制演算法 103
4.3 本章小結 104 5.1 鍵盤設計的組成和分類 105
5.1.1 鍵盤的物理結構 106
5.1.2 鍵盤的組成形式 106
5.2 鍵盤介面的工作過程和工作方式 111
5.2.1 鍵盤的抖動干擾和消除方法 111
5.2.2 盤介面的工作過程 112
5.2.3 鍵盤的工作方式 112
5.3 鍵位置的判別方法 113
5.4 鍵盤介面設計的儲存晶元和
5.4 相關協議 114
5.4.1 鍵盤介面設計的儲存晶元 114
5.4.2 AT24CXX系列的晶元及I2C協議 114
5.4.3 A93CXX系列的晶元及SPI協議 124
5.5 鍵盤介面實現的工程實例 132
5.5.1 矩陣鍵盤介面的工程實例 132
5.5.2 矩陣式中斷掃描鍵盤的設計 137
5.5.3 二進制編碼鍵盤介面的工程實例 139
5.6 重點與難點 141 6.1 交通燈順序控制 143
6.1.1 硬體系統的設計 143
6.1.2 反向器74F06 145
6.1.3 控制字 145
6.1.4 程序設計 145
6.2 設計一種基於模糊理論的單片機控制交通路口調度系統 148
6.2.1 系統的總體設計 148
6.2.2 十字路口調度系統模糊控制器的設計 149
6.2.3 電路設計 151
6.2.4 車流量檢測電路 154
6.2.5 系統主程序和模糊控製程序設計 155
6.2.6 系統顯示程序設計 157
6.3 重點與難點 159 7.1 顯示屏顯示原理及串列通信基本概念 161
7.1.1 顯示屏顯示原理 161
7.1.2 串列通信 163
7.1.3 陣列式LED顯示屏的實現 166
7.2 顯示屏硬體電路設計 166
7.2.1 硬體電路介紹 168
7.2.2 外擴數據存儲器電路 170
7.3 列式LED顯示屏顯示程序的171
7.3.1 漢字點陣數據的提取 171
7.3.2 顯示主程序 174
7.3.3 串口中斷處理程序 176
7.3.4 顯示驅動函數 179
7.3.5 外部存儲器讀寫程序 181
7.3.6 串口通信程序 181
7.3.7 文字顯示特效程序 182
7.4 本章小結 191 8.1 IC卡基礎 192
8.1.1 IC卡的分類 192
8.1.2 IC卡的標准 194
8.2 接觸型IC卡讀寫系統的開發 194
8.2.1 IC卡讀寫系統的時序 195
8.2.2 IC卡讀寫系統的硬體連196
8.2.3 IC卡讀寫系統的軟體系統 197
8.3 基於SLE4442加密卡讀寫系統的開發 201
8.3.1 SLE4442卡的介紹 201
8.3.2 SLE4442的模式 203
8.3.3 SLE4442的操作命令 205
8.3.4 SLE4442讀/寫系統的軟硬體設計 208
8.4 重點與難點 215 9.1 無刷直流電機控制原理 216
9.1.1 無刷直流電機的組成 217
9.1.2 無刷直流電機的工作原理 217
9.1.3 無刷直流電機的控制方法 219
9.2 無刷直流電機的工作特性 220
9.3 直流無刷電機控制的應用實現 221
9.3.1 總體設計概述 221
9.3.2 直流無刷電機控制的硬體設計 222
9.3.3 直流無刷電機控制的軟體設計 224
9.3.4 無刷直流電機速度閉環控制系統 227
9.4 本章小結 230 10.1 永磁同步電機的結構與分類 231
10.2 永磁同步電機的矢量控制 232
10.3 永磁同步電機控制 236
10.3.1 控制電路設計 237
10.3.2 光電隔離電路設計 238
10.3.3 功率電路設計 239
10.4 永磁同步電機控制的軟體實現 239
10.4.1 電壓SVPVM的DSPIC33f軟體實現 241
10.4.2 轉子位置檢測 243
10.4.3 AD轉換模塊 245
10.5 本章小結 246 11.1 汽車行駛記錄儀功能介紹 247
11.2 簡易汽車行駛記錄儀的設計 249
11.2.1 汽車行駛記錄儀的考慮因素 250
11.2.1 MSP430 251
11.2.2 車模擬信號的採集 254
11.2.4 數字信號採集電路 255
11.2.5 SST39VF160晶元介紹 257
11.3 記錄儀的軟體設計 257
11.3.1 軟體流程圖 258
11.3.2 數據存儲格式 259
11.3.3 SST39VF160存儲器數據讀寫的實現 259
11.4 數據採集的程序實現 263
11.5 本章小結 264 12.1 USB-GPIB控制器簡介 265
12.1.1 認識USB 266
12.1.2 GPIB 269
12.2 USB-GPIB控制器的硬體電路設計 271
12.2.1 器件的選擇 272
12.2.2 USB-GPIB控制器電路設計 278
12.3 USB-GPIB控制器的軟體程序的實現 287
12.3.1 USB單片機協議控制晶元與主機(計算機)的數據交互 288
12.3.2 USB協議控制晶元與GPIB控制器的數據交互 299
12.4 USB-GPIB控制器固件的調試與固化 300
12.4.1 USB-GPIB控制器固件的調試 301
12.4.2 USB-GPIB控制器固件程序的固化 302
12.5 本章小結 303 13.1 研究抗干擾技術的重要性 304
13.2 干擾的分類 305
13.2.1 按雜訊產生的原因分類 306
13.2.2 按雜訊傳導模式分類 306
13.2.3 按雜訊波形及性質分類 307
13.3 干擾的耦合方式 308
13.4 單片機系統可靠性的設計任務與方法 310
13.4.1 單片機系統可靠性設計的任務 310
13.4.2 可靠性設計一般方法 311
13.5 本章小結 313 14.1 無源濾波器抗干擾 314
14.1.1 電容濾波器 315
14.1.2 電感濾波器 316
14.1.3 RC低通濾波器 316
14.1.4 1LC低通濾波器 318
14.1.5 低通濾波器的結構選擇 319
14.1.6 低通濾波器的平衡結構與串聯形式 319
14.2 有源濾波器抗干擾 321
14.2.1 一級低通有源濾波器 321
14.2.2 二級低通有源濾波器 322
14.3 去耦電路 324
14.3.1 尖峰電流的形成原理 324
14.3.2 去耦電容的配置 325
14.3.3 光電隔離 326
14.3.4 繼電器隔離 328
14.3.5 變壓器隔離 328
14.3.6 布線隔離 329
14.4 接地技術 330
14.5 本章小結 334 15.1 概述 335
15.2 指令冗餘技術 336
15.2.1 單位元組指令冗餘 337
15.2.2 重要指令冗餘 337
15.3 軟體陷阱技術 337
15.3.1 未使用的中斷向量區設置陷阱 338
15.3.2 RAM數據區中設置陷阱 338
15.3.3 未使用的EPROM數據區設置陷阱 339
15.3.4 非EPROM單片機空間設置陷阱 339
15.3.5 運行程序區設置陷阱 339
15.4 看門狗技術 339
15.4.1 硬體看門狗技術 340
15.4.2 軟體看門狗技術 342
15.5 本章小結 345
Ⅱ 我現在剛開始學習單片機,編程用的是keil軟體,可電腦和硬體總是連不起來怎麼回事啊。
手把手教你學單片機
出版社 : 北京航空航天大學出版社作者 : 周興華 出版日期:2005年4月版別版次:2005年4月第1版第1次印刷 ISBN : 7-81077-613-4字數 :486千字 印張:19印數 :5000 頁數:292開本 :787*1092 1/16 內容簡介本書以實際編程及做實驗為主線貫穿全書。完全摒棄教科書的方法,採用「程序完成後軟體模擬→單片機燒錄程序→試驗板通電實驗」的方法,以全新的方式邊學邊實驗,將初學者領進單片機世界的大門。隨書所附的光碟中提供了一些工具軟體以及本書所有的實驗程序文件,在學習、實驗時可參考。 本書的讀者對象是大中專學生、職業學校學生、廣大電子製作愛好者。第1章 實驗設備及器材使用介紹1.1 單片機的發展史及特點1.2 單片機入門的有效途徑1.3 實驗工具及器材第2章 Keil C51集成開發環境及TOP851多功能編程器2.1 Keil C51集成開發環境軟體安裝2.2 TOP851燒錄軟體安裝2.3 TOP851燒錄軟體操作第3章 初步接觸KeilC51及TOP851軟體並感受第一個演示程序效果3.1 建立一個工程項目,選擇晶元並確定選項3.2 建立源程序文件3.3 添加文件到當前項目組中3.4 編譯(匯編)文件3,5 檢查並修改源程序文件中的錯誤3.6 軟體模擬模擬調試3.7 燒錄程序(編程操作)3.8 觀察程序運行的結果第4章 單片機的基本知識4.1 MCS51單片機的基本結構4.2 80C51基本特性及引腳定義4.3 80C51的內部結構4.4 80C51的存儲器配置和寄存器第5章 匯編語言程序指令的學習5.1 MCS51單片機的指令系統5.2 匯編語言的特點5.3 匯編語言的語句格式第6章 數據傳送指令的學習及實驗6.1 按定址方式分類的數據傳送指令6.2 點亮/熄滅一個發光二極體的實驗,自動循環工作6.3 點亮/熄滅一個發光二極體的實驗,點亮/熄滅時間自動發生變化(分3段),自動循環工作6.4 P1口的8個發光二極體每隔2個右循環點亮實驗6.5 MCS51內部的RAM和特殊功能寄存器SFR的數據傳送指令6.6 「跑馬燈」實驗6.7 單片機的受控輸出顯示實驗6.8 小結第7章 算術運算指令的學習及實驗7.1 算術運算指令7.3 FFH、03H兩數相乘實驗,結果從P0、P1口輸出7.4 加1指令實驗,讓P1口的8個發光二極體模擬二進制的加法運算7.5 加1指令實驗(不進行二十進制調整)7.6 加1指令實驗(進行二十進制調整)7.7 小結第8章 邏輯運算指令的學習及實驗8.1 邏輯運算指令8.2 邏輯運算舉例一8.3 邏輯運算舉例二8.4 邏輯運算舉例三8.5 小結第9章 控制轉移類指令的學習及實驗9.1 控制轉移類指令9.2 散轉程序實驗9.3 統計含58H關鍵字的實驗84第10章 位操作指令的學習10.1 位操作指令10.2 將P1.0的狀態傳送到P2.0的實驗10.3 比較輸入數大小的實驗10.4 將累加器A中的立即數移出的實驗10.5 實現邏輯函數的實驗第11章 棧操作指令、空操作指令、偽指令及位元組交換指令的學習11.1 棧操作指令11.2 空操作指令11.3 偽指令11.4 位元組交換指令11.5 查0~9平方表實驗11.6 利用NOP指令產生精確方波實驗11.7 MCS51指令分類表第12章 定時器/計數器及實驗12.1 定時器/計數器的結構及工作原理12.2 定時器/計數器方式寄存器和控制寄存器12.3 定時器/計數器的工作方式12.4 定時器/計數器的初始化12.5 蜂鳴器發音實驗12.6 定時器T1方式2計數實驗12.7 定時器T1方式1定時實驗第13章 中斷系統及實驗13.1 中斷的種類13.2 MCS51單片機的中斷系統13.3 令LED輸出試驗板上的蜂鳴器發出1 kHz音頻的實驗13.4 利用外中斷方式進行數據採集實驗13.5 中斷嵌套實驗13.6 交通燈控制器實驗13.7 鍵控計數實驗第14章 匯編語言的程序設計及實驗14.1 單片機應用系統的設計過程14.2 匯編語言程序設計步驟14.3 順序程序設計14.4 右移循環流水燈實驗14.5 循環程序設計14.6 找數據塊中最大數的實驗14.7 延時子程序的結構14.8 尋找ASCII碼「$」的實驗14.9 子程序設計、調用及返回14.10 使P0口的8個LED閃爍20次實驗14.11 分支程序設計14.12 做簡單的+、-、×、÷實驗14.13 查表程序設計14.14 單片機演奏音樂的實驗14.15 數據排序實驗第15章 鍵盤介面技術及實驗15.1 獨立式鍵盤15.2 行列式鍵盤15.3 獨立式鍵盤介面的編程模式15.4行列式鍵盤介面的編程模式15.5 鍵盤工作方式15.6 獨立式鍵盤輸入實驗15.7 行列式鍵盤輸入實驗15.8 掃描方式的鍵盤輸入實驗15.9 定時中斷方式的鍵盤輸入實驗第16章 LED顯示器介面技術及實驗16.1 LED數碼顯示器的構造及特點16.2 LED數碼顯示器的顯示方法16.3 靜態顯示實驗16.4 慢速動態顯示實驗16.5 快速動態顯示實驗16.6 實時時鍾實驗第17章 字元型液晶(LCD)模塊原理及設計學習17.1 液晶顯示器概述17.2 16×2字元型液晶顯示模塊(LCM)特性17.3 16×2字元型液晶顯示模塊(LCM)引腳及功能17.4 16×2字元型液晶顯示模塊(LCM)的內部結構17.5 液晶顯示控制驅動集成電路HD44780特點17.6 HD44780工作原理17.7 LCD控制器的指令17.8 LCM工作時序17.9 單片機驅動LCM的電路第18章 體驗第一個液晶程序的效果並建立模塊化設計的相關子程序18.1 體驗第一個液晶程序的效果18.2 查詢忙碌標志信號子程序18.3 寫指令到LCM(IR寄存器)子程序18.4 寫數據到LCM(DR寄存器)子程序18.5 清除顯示屏子程序18.6 啟動LCM子程序18.7 讓字母「F」在顯示屏的第2行第10列顯示18.8 使LCM顯示2行字元串(英文信息)18.9 使LCM顯示2行字元串(英文信息)並循環移動第19章 簡單的液晶顯示型自動化儀器的設計學習及實驗19.1 工業生產自動計數器19.2 設備運行狀態自動顯示器19.3 液晶顯示計時時鍾19.4 讓液晶顯示屏顯示自製圖形「中」19.5 液晶顯示屏顯示復雜的自製圖形第20章 Keil C51集成開發環境的設置及調試方法20.1 工程項目的建立、源程序文件的建立及載入20.2 工程的詳細設置20.3 編譯、連接20.4 Keil C51集成開發環境軟體的調試方法20.5 外圍介面工具單片機有
C51單片機(全都用C語言寫程序)
還有
ASM單片機(全用匯編寫程序)
如C51點亮一個數碼管程序如下:
#include<reg52.h>
sbit D1=P1^0;
void main()
{
D1=0;
}
用C51寫簡單多了
我在學C51有興趣一起研究一下……
Ⅲ STC系列增強型8051單片機原理與應用的圖書目錄
第1章 STC11F08XE單片機的增強型8051內核
1.1 STC單片機概述
1.1.1 單片機的概念
1.1.2 常見單片機
1.1.3 STC系列單片機
1.2 STC11F08XE單片機的引腳
1.3 STC11F08XE單片機的內部結構
1.3.1 STC11F08XE單片機的內部結構框圖
1.3.2 CPU結構
1.4 STC11F08XE單片機的存儲結構
1.5 STC11F08XE單片機的並行I/O口
1.5.1 STC11F08XE單片機的並行I/O口與工作模式
1.5.2 STC11F08XE單片機的並行I/O口的結構
1.5.3 STC11F08XE單片機並行I/O口的使用注意事項
1.6 STC11F08XE單片機的時鍾與復位
1.6.1 STC11F08XE單片機的時鍾
1.6.2 STC11F08XE單片機的復位
本章小結
習題1
第2章 單片機應用的開發工具
2.1 Keil μVision 2集成開發環境
2.1.1 Keil μVision 2集成開發環境概述
2.1.2 Keil C集成開發環境下的程序編輯、編譯與調試
2.2 STC系列單片機程序的在線編程與STC模擬器
2.2.1 STC系列單片機程序的在線下載電路
2.2.2 STC系列單片機PC端下載軟體的使用
*2.2.3 STC模擬器
2.3 單片機學習的實踐模式
2.3.1 模擬模式
2.3.2 在線系統調試模式
本章小結
習題2
第3章 STC11F08XE單片機的指令系統
3.1 概述
3.2 數據傳送類指令
3.3 算術運算類指令
3.4 邏輯運算與循環移位類指令(24條)
3.5 控制轉移類指令(17條)
3.6 位操作類指令(17條)
本章小結
習題3
第4章 STC11F08XE單片機的程序設計
4.1 匯編語言程序設計
4.1.1 匯編語言程序設計基礎
4.1.2 基本程序結構與程序設計舉例
4.2 C51程序設計
4.2.1 C51基礎
4.2.2 C51程序設計
本章小結
習題4
第5章 STC11F08XE單片機存儲器的應用
5.1 STC11F08XE單片機的程序存儲器
5.2 STC11F08XE單片機的基本RAM
5.3 STC11F08XE單片機的擴展RAM(XRAM)
5.4 STC11F08XE單片機的EEPROM(數據FLASH)
本章小結
習題5
第6章 STC11F08XE單片機中斷系統
6.1 中斷系統概述
6.1.1 中斷系統的幾個概念
6.1.2 中斷的技術優勢
6.1.3 中斷系統需要解決的問題
6.2 STC11F08XE單片機的中斷系統
6.2.1 STC11F08XE單片機的中斷源
6.2.2 STC11F08XE單片機的中斷控制
6.2.3 STC11F08XE單片機的中斷處理過程
6.2.4 STC11F08XE單片機中斷應用舉例
6.3 STC11F08XE單片機外部中斷的擴展
本章小結
習題6
第7章 STC11F08XE單片機的定時/計數器
7.1 STC11F08XE單片機定時/計數器的結構和工作原理
7.2 STC11F08XE單片機定時/計數器的控制
7.3 STC11F08XE單片機定時/計數器的工作方式
7.4 STC11F08XE單片機定時/計數器的應用舉例
7.4.1 STC11F08XE單片機定時/計數器的定時應用
7.4.2 STC11F08XE單片機定時/計數器的計數應用
7.4.3 單片機秒錶的設計
7.5 STC11F08XE單片機的可編程時鍾輸出功能
7.5.1 STC11F08XE單片機的可編程時鍾:CLKOUT0、CLKOUT1、CLKOUT2
7.5.2 STC11F08XE單片機可編程時鍾的應用舉例
本章小結
習題7
第8章 STC11F08XE單片機的串列口
8.1 串列通信基礎
8.1.1 串列通信的分類
8.1.2 串列通信的傳輸方向
8.2 STC11F08XE單片機的串列介面
8.2.1 串列口結構
8.2.2 串列口的控制寄存器
8.2.3 串列口的工作方式
8.2.4 串列口的波特率
8.2.5 串列口的應用舉例
8.3 STC11F08XE單片機與PC機的通信
8.3.1 串列通信匯流排標准及其介面
8.3.2 單片機與PC機串列通信的介面設計
8.3.3 單片機與PC機串列通信的程序設計
8.4 STC11F08XE單片機串列口的擴展功能
8.4.1 STC11F08XE單片機串列口數據通道的切換
8.4.2 STC11F08XE單片機的獨立波特率發生器
本章小結
習題8
第9章 STC11F08XE單片機的節能工作模式與看門狗電路
9.1 STC11F08XE單片機的節能工作模式
9.1.1 STC11F08XE單片機的慢速模式
9.1.2 STC11F08XE單片機的空閑(等待)模式與停機(掉電)模式
9.2 STC11F08XE單片機的看門狗定時器
9.2.1 看門狗定時器
9.2.2 STC11F08XE單片機的看門狗定時器
9.2.3 STC11F08XE單片機的看門狗定時器的使用
本章小結
習題9
第10章 STC11F08XE 單片機應用系統設計
10.1 STC11F08XE 單片機常用介面設計
10.1.1 鍵盤介面與應用實例
10.1.2 LED數碼顯示介面與應用實例
10.1.3 LCD顯示介面與應用實例
10.2 串列匯流排介面技術與應用設計
10.2.1 單匯流排數字溫度感測器DS18B20與應用實例
10.2.2 I2C串列匯流排與PCF8563的應用實例
10.3 智能小車的軟/硬體設計
10.3.1 智能小車功能
10.3.2 智能小車的硬體設計
10.3.3 智能小車的軟體設計
10.4 步進電動機應用的軟/硬體設計
10.4.1 步進電動機概述
10.4.2 步進電動機的控制
11.4.3 步進電動機的應用設計
本章小結
習題10
附錄A ASCII碼表
附錄B STC11F08XE單片機指令系統表
附錄C 製作單片機的寄存器定義文件
附錄D ISP的自定義下載
附錄E 常用系列典型型號單片機的功能特性
參考文獻
Ⅳ 練習與思考題
第1章 概 述第1章 概 述 1.1 單片機的概念及單片機的種類 1.2 單片機的類型、特點及用途 1.3 單片機的發展趨勢本章小結練習與思考題 第1章 概 述 1.1 單片機的概念及單片機的種類 1.1.1 單片機及單片機系統單片機是微型計算機發展的一個分支,是一種專門面向控制的微處理器件,故又稱之為微控制器(Micro Controller Unit,MCU)。單片機通常以單一晶元的形式出現,但是它已具有了微型計算機所包含的基本組成結構和特有的控制應用功能,是一種晶元級的微型計算機。另外,由於單片機的體積、結構和功能特點,在實際應用中可以完全融入應用系統之中,故而也稱為嵌入式微控制器 (Embedded Micro-Controller)。 第1章 概 述最基本的單片機系統由單片機晶元和軟體程序共同組建而成,是用戶為了實現某種控制用途的需要而設計的實際裝置。在單片機系統中,單片機晶元內部的中央處理單元(CPU)處於核心地位,CPU通過執行軟體程序調動硬體電路完成控制功能。根據這種工作方式,單片機系統可以劃分為硬體和軟體兩個組成部分。 第1章 概 述 1. 硬體部分單片機系統的硬體部分是包括CPU在內的所有硬體電路,按照硬體電路的功能和配置大致可以分為以下3類 第1章 概 述 1) 基本功能類基本功能類硬體包括:CPU(用於運算、控制)、 RAM(用於數據存儲)、ROM(用於程序存儲)、I/O設備(實現串列、並行輸入/輸出介面)及時鍾電路(建立工作時序)。在微型計算機中,上述部件被分成若干塊晶元,安裝在一塊稱之為主板的印刷線路板上,在程序的指揮下完成計算機的基本運算操作功能。但是在單片機中,除了時鍾電路之外,其餘部分一般均被集成到一塊半導體晶元上,所以被稱為單片機,即單晶元微型計算機。 第1章 概 述 2) 控制功能類控制功能類硬體包括:定時器/計數器(用於時間設定/事件記錄)和中斷裝置(實現實時處理)。使用這類硬體是為了實現單片機的控制功能,即定時控制、順序控制和實時控制等基本控制功能。作為面向嵌入式控制的特色,這類部件通常也集成在單片機晶元內部。 3) 輔助功能類輔助功能類硬體包括:A/D(模/數轉換)和D/A(數/模轉換,通常採用PWM形式)等部件。這類部件根據晶元的配置不同不一定集成在單片機晶元上,需要用戶根據使用要求選擇。 第1章 概 述 2. 軟體部分與微型計算機的運行原理相似,單片機系統的運行也需要軟體系統的支持,但是由於處理任務的不同,其復雜程度相對較低。根據單片機軟體所要實現的功能,可以將軟體劃分為管理程序和應用程序兩類。 1) 管理程序管理程序是單片機系統的監控程序,主要用於控制過程復雜,控制量較大的裝置,例如測控儀器、儀表等。對於僅完成簡單控制任務的單片機系統一般可以相應簡化。 第1章 概 述 2) 應用程序應用程序是針對具體的控制動作而編寫的程序,是實現控制具體功能的程序基礎,通常以子程序模塊的形式出現,便於執行控制動作時調用。 第1章 概 述 1.1.2 單片機程序設計語言及開發環境簡介單片機程序設計語言主要是指在開發系統中使用的語言。在單片機開發系統中可以使用機器語言、匯編語言和高級語言。機器語言採用機器碼,是單片機能夠直接識別的程序語言,匯編語言是以助記符表示機器碼的程序設計語言。機器語言和匯編語言都是高效的計算機語言,實時性較強,但它們都是面向機器的語言,通用性差,編程效率低。 第1章 概 述單片機的開發過程涉及3項內容,即編程、糾錯和模擬。一般採用PC機內安裝的集成開發環境(IDE)軟體進行開發調試。在集成開發環境內可以實現文本編程、編譯糾錯和模擬運行。其中模擬的形式又可以分為兩種,即軟體模擬和硬體模擬。軟體模擬不必連接硬體應用系統,模擬結果在開發環境中模擬的單片機構造中得到體現;硬體模擬需要與用戶控制系統配合,以集成開發環境的輸出替代用戶系統中原有的單片機,模擬過程真實、實時性強。另一種較新的開發形式採用具有ISP(In-System Programming,在系統可編程)功能的單片機,利用下載程序開發單片機系統。 第1章 概 述 1.1.3 單片機的使用環境及產品等級單片機用途廣,使用環境差別大,如何保證單片機控制系統或裝置的可靠性是設計者和使用者最為關注的問題。作為電子產品而言,其可靠性主要取決於半導體晶元的產品等級,根據運行溫度范圍,產品等級大致劃分為3級,下面分別予以介紹。 第1章 概 述 1. 軍用級運行溫度范圍為�6�1-50℃~+125℃,適用於軍用品要求苛刻的應用環境,晶元的價格比較昂貴。例如Intel公司的 MCS-51系列單片機MD80C51FB。型號以MD表示開頭的, M代表軍品,D代表直插封裝。 第1章 概 述 2. 商業級運行溫度范圍為0℃~+70℃,主要限於機房、辦公及住宅環境,適用於民用產品,例如家電、玩具等。商業級產品價格低廉,品種齊全,應用最為廣泛。 3. 工業級早期的單片機產品大多為工業級,運行溫度范圍為�6�1-45℃~+85℃,介於商業級和軍用級之間,適宜在工業生產環境下使用。其特點是可靠性遠高於商業級,但價格遠低於軍用級。MCS-51系列單片機的普通產品均屬於工業級。 第1章 概 述 1.2 單片機的類型、特點及用途 1.2.1 單片機主要類型及其特點 1. 常用單片機的類型及特點 Intel公司的MCS-51系列及其兼容產品是目前最常用的一種單片機類型,其引進歷史較長,學習資料齊全,影響面較廣、應用成熟,已被單片機控制裝置的開發設計人員廣泛接受。本書將以這種單片機產品為主介紹單片機的結構原理、指令系統、編程應用及介面電路等內容。MCS-51系列單片機及其兼容產品的生產廠家很多,以下僅列出具有代表性的 3家公司的產品,其產品的型號及特點如表1-1所示。 第1章 概 述表1-1 常用MCS-51系列單片機一覽表公 司 品 名 特 點 Intel 8031 MCS-51 CMOS 單片8 位微控制器,32 條I/O 引線,2 個定時器/計數器, 5 個中斷源,2 個優先順序,128 B 片內RAM 80C562 基於8051 CMOS 控制器,8 位 A/D,PWM,48 條I/O 引線,3 個定時器/計數器,14 個中斷源,4 個優先順序,無片內ROM,256 B 片內RAM Philips 87C591 基於8051 CMOS控制器,片內CAN(SJA1000 CAN),10 位 ADC,WDT, 32 條I/O 引線,3 個定時器/計數器,15 個中斷源,4 個優先順序,I 2 C 匯流排, 16 KB EPROM,256 B 片內 RAM +256 B 附加AUX RAM 第1章 概 述 2.常用單片機的更新及進步隨著單片機技術的發展,高性能的新型單片機開始出現,其中美國Cygnal公司推出的C8051F系列單片機就是在MCS-51系列單片機基礎之上進行更新開發的一種產品。�6�1C8051F實際上是一種以8051為內核集成的混合信號系統級晶元。熟悉MCS-51系列單片機的工程技術人員可以很容易地掌握C8051F的應用技術並能進行軟體的移植。 第1章 概 述 C8051F系列單片機採用流水線結構,單周期指令運行速度是8051的12倍,全指令集運行速度是原來的9.5倍。 C8051F系列單片機的內部資源非常豐富,例如C8051F020單片機內部除包含8051微控制器內核、RAM、ROM、I/O口、定時器/計數器等MCS-51 系列的配置之外,還具有ADC、 DAC、PCA、SPI和SMBus等部件。這種將單片機的基本組成單元與模擬、數字外設集成在一個晶元上而組成的片上系統(SoC),實質上已超出了以往單片機(MCU)的含義,代表了高性能單片機發展的一個方向。 第1章 概 述 3. 其他類型單片機及特點簡介 1) �6�1PIC系列單片機 PIC系列單片機由美國Microchip公司設計生產,與MCS-51 系列對應的產品有PIC16C系列和PIC17C系列8位單片機,廣泛應用於消費電子產品、汽車電子及工業控制等領域,就產量和市場份額而言在世界單片機領域排名屬於前列。 第1章 概 述 PIC系列單片機有如下特點: (1) 完全哈佛結構。指令和數據空間及傳輸路徑完全分開,提高了數據吞吐率。程序和數據匯流排採用不同的寬度。數據匯流排為8位,指令匯流排根據單片機檔次不同分為12、14、 16位,指令均以單位元組形式表示。 (2) 流水線結構。取指令和執行指令採用流水線形式,執行一條指令時,同時允許取出下一條指令,從而實現了單周期指令。 第1章 概 述 (3) 寄存器組結構。RAM及寄存器,包括I/O口、定時器和程序計數器等都以寄存器方式工作和定址,只需要一個指令周期就可以完成訪問和操作。通常另闢堆棧RAM空間,不佔用片內數據存儲單元。 (4) 精簡指令系統。採用RISC(精簡指令集計算機)結構,與傳統的採用CISC(復雜指令集計算機)結構的單片機相比,其指令數量少,易學易記。此外,精簡指令系統還具有較高的代碼壓縮能力,有利於提高程序執行速度。 第1章 概 述 (5) 種類齊全。不單純追求功能堆積,從實際出發,以多種型號滿足不同層次、不同用途的需求。在規模上既有84 腳封裝,多達66根I/O口線的型號,也有8腳封裝,6根I/O口線的型號。功能較全的高檔次單片機產品還配置了A/D(模/ 數轉換)、CCP(捕捉/比較)或採用PWM(脈寬調制)的D/A轉換單元。 PIC系列單片機功能全、種類多,便於選擇使用,開發者可以根據不同的用途和要求設計出性價比較高的單片機控制裝置。 第1章 概 述 2) �6�1MSP430單片機 MSP430系列單片機是美國德州儀器(TI)公司1996年開始推向市場的一種16位單片機,採用精簡指令集,是一種超低功耗的混合型單片機。MSP430系列單片機的主要特點是,具有極低的功耗、豐富的片內外設和方便靈活的開發手段。 MSP430單片機的主要優點描述如下: (1) 運算處理能力強。MSP430系列是16位單片機,採用了RISC結構,具有豐富的定址方式和簡潔的內核指令以及大量的模擬指令,在8 MHz時鍾晶振的驅動下指令周期僅為125 ns。 第1章 概 述 (2) 超低功耗設計。採用1.8~3.6 V工作電壓,在1 MHz 的時鍾條件下運行時,晶元取用電流在200~400 μA左右。在時鍾關斷模式運行時,最低維持電流只有0.1 μA。具有獨特的時鍾系統設計,它有兩個時鍾,用以產生CPU和各功能單元所需的時鍾,可以在指令控制下接通和關斷時鍾,實現對總體功耗的控制。MSP430系列單片機有5種不同的工作模式。在等待方式下,電流消耗為0.7 μA。在節電方式下,最低可達0.1 μA。當系統處於省電的備用狀態時,用中斷請求將它喚醒的時間只需6 μs。 第1章 概 述 (3) 豐富的片上外圍模塊。集成了較豐富的片內外設,其中包括看門狗(WDT)、模擬比較器A、硬體乘法器、液晶驅動器、10/12位ADC、I 2 C匯流排和直接數據存取(DMA)等。 (4) 方便高效的開發環境。MSP430單片機有OPT、 FLASH和ROM 3種類型,目前主要以FLASH型為主。片內有JTAG(Joint Test Action Group,聯合測試行動小組)調試介面,通過PC機和JTAG調試器獲取片內信息,從而使設計者在調試開發時,無需模擬器和編程器。開發工具簡便,價格也相對低廉,可以實現在線編程。開發語言有匯編語言和C 語言。 第1章 概 述 (5) 運行環境。MSP430系列單片機產品均為工業級,運行環境溫度為-40�6�1~+85℃,適合工業環境下使用。 3) 單片機品種及主流單片機概況單片機品種繁多,各具特色。其中Intel公司推出的MCS-51 系列單片機及與其兼容的Philips、Atmel、Winbond等公司的產品應用非常廣泛。目前單片機入門教材大多以MCS-51系列單片機作為學習基礎,所以被普遍接受,堪稱主流。而 Microchip公司的PIC精簡指令集單片機產品也有著強勁的發展勢頭。就產量而言,在可供二次開發的單片機產品中PIC 單片機居全球之首。 第1章 概 述 1.2.2 常用單片機的應用領域單片機的特點是集成度高、功能強、可靠性高、體積小、功耗低、使用方便及價格低廉。單片機的應用幾乎是無處不在,已經滲透到我們生活中的各個領域。目前單片機已經在工業控制、儀器儀表、家用電器、辦公自動化、醫用設備、信息和通信產品、航空航天、專用設備的智能化管理等領域中得到了廣泛的應用,其應用形式體現如下。 第1章 概 述 1. 在工業控制中的應用工業自動化控制是最早採用單片機控制的領域之一,在測控系統、過程式控制制、機電一體化設備中主要利用單片機實現邏輯控制、數據採集、運算處理、數據通信等用途。單獨使用單片機可以實現一些小規模的控制功能,作為底層檢測、控制單元與上位計算機結合可以組成大規模工業自動化控制系統。特別在機電一體化技術中,單片機的結構特點使其更容易發揮其集機械、微電子和計算機技術於一體的優勢。 第1章 概 述 2. 在智能儀器中的應用內部含有單片機的儀器統稱為智能儀器,也稱為微機化儀器。這類儀器大多採用單片機進行信息處理、控制及通信,與非智能化儀器相比,功能得到了強化,增加了諸如數據存儲、故障診斷、聯網集控等功能。以單片機作為核心組成智能儀表已經是自動化儀表發展的一種趨勢。 第1章 概 述 3. 在家用電器中的應用單片機功能完善、體積小、價格廉、易於嵌入,非常適用於對家用電器的控制。嵌入單片機的家用電器實現了智能化,是傳統型家用電器的更新換代,現已廣泛應用於洗衣機、空調、電視機、視盤機、微波爐、電冰箱、電飯煲以及各種視聽設備等。 第1章 概 述 4. 在信息和通信產品中的應用信息和通信產品的自動化和智能化程度很高,其中許多功能的完成都離不開單片機的參與。這里最具代表性和應用最廣的產品就是移動通信設備,例如手機內的控制晶元就屬於專用型單片機。另外在計算機外部設備中,如鍵盤、列印機中也離不開單片機。新型單片機普遍具備通信介面,可以方便地與計算機進行數據通信,為計算機和網路設備之間提供連接服務創造了條件。 第1章 概 述 5. 在辦公自動化設備中的應用現代辦公自動化設備中大多數嵌入了單片機控制核心。如列印機、復印機、傳真機、繪圖機、考勤機及電話等。通過單片機控制不但可以完成設備的基本功能,還可以實現與計算機之間的數據通信。 6. 在商業營銷設備中的應用在商業營銷系統中單片機已廣泛應用於電子秤、收款機、條形碼閱讀器、IC卡刷卡機、計程車計價器以及倉儲安全監測系統、商場保安系統、空氣調節系統、冷凍保險系統等。 第1章 概 述 7. 在醫用設備領域中的應用單片機在醫療設施及醫用設備中的用途亦相當廣泛,例如在醫用呼吸機、各種分析儀、醫療監護儀、超聲診斷設備及病床呼叫系統中都得到了實際應用。 8. 在汽車電子產品中的應用現代汽車的集中顯示系統、動力監測控制系統、自動駕駛系統、通信系統和運行監視器等裝置中都離不開單片機。特別是採用現場匯流排的汽車控制系統中,以單片機擔當核心的節點通過協調、高效的數據傳送不僅完成了復雜的控制功能,而且簡化了系統結構。 第1章 概 述 1.3 單片機的發展趨勢目前,單片機正朝著高性能和多品種方向發展,將會進一步實現低功耗、小體積、大容量、高性能、低價格和外圍電路內裝化等要求。單片機的發展將主要以滿足在嵌入式應用前提下與控制對象的最佳結合,突顯其智能化控制能力。並在此基礎上尋求應用系統在晶元上的最大化解決方式,即形成了SoC化趨勢。在微電子技術、IC設計、 EDA工具發展的推動下,基於SoC的單片機應用系統將會得到較快的發展。 第1章 概 述本章小結本章簡要介紹了關於單片機及單片機系統的基本概念、結構特點和發展歷程,並且對單片機的應用開發方式及應用環境進行了簡介。通過對常用單片機系列、型號和各生產廠家的產品特點的介紹,使我們對單片機的種類及性能有一個初步的了解,便於在今後的應用中能夠選擇合適的單片機類型,滿足具體用途的需要。另外,本章還從開拓視野的角度列舉了單片機在各個領域的應用,以及單片機今後的發展趨勢。
自己研究吧。。我看得暈掉了- -、、、
Ⅳ 求好心人給一篇電氣自動化專業的論文啊
http://wenku..com/view/b2a55f1eb7360b4c2e3f6457.html
基於51單片機的搶答器設計
目 錄
第一章 搶答器的概述
1.1 系統設計的功能
1.2 搶答器需求分析
1.3 搶答器的工作原理
第二章 單片機的功能簡介
2.1 89系列單片機的概述
2.2 AT89S51的功能
2.2.1 TA89S51特殊功能寄存器
2.2.2 AT89S51單片機的內部結構
第三節 硬體電路的設計
3.1 總電路原理
3.2 時鍾頻率電路的設計
3.3 復位電路的設計
3.3.1 復位電路的可靠性設計
3.3.2 人工復位
3.4 顯示電路的設計
3.5 控制電路的實現
3.6 發聲
3.7 系統復位
第四章 軟體設計
4.1 軟體任務分析
4.2 顯示子程序的設計
4.3 定時器T0、T1中斷服務程序的設計
4.4 搶答器處理程序的設計
4.5 主程序及分析
第五章 元器件及焊接調試
第六章 設計小結
致謝
參考文獻
摘 要
隨著科學技術的發展和普及,各種各樣的競賽越來越多,其中搶答器的作用也就顯而易見。目前很多搶答器基本上採用小規模數字集成電路設計,使用起來不夠理想。因此設計一更易於使用和區分度高的搶答器成了非常迫切的任務。現在單片機已進入各個領域,以其功耗小、智能化而著稱,所以若利用單片機來設計搶答器,便使以上問題得以解決.針對以上情況,本文設計出以AT89S51單片機為核心的八路搶答器。我們採用了數字顯示器直接指示,自動鎖存顯示結果,並自動復位的設計思想,它能根據不同的搶答輸入信號,經過單片機的控制處理並產生不同的與輸入信號相對應的輸出信號,最後通過LED數碼管顯示相應的路數,即使兩組的搶答時間相差幾微秒,也可分辨出是哪組優先按下的按鍵,它充分利用了單片機系統的優點,具有結構簡單、功能強大、可靠性好、實用性強的特點。
本設計是以八路搶答為基本理念。考慮到依需設定限時回答的功能,利用89S51單片機及外圍介面實現的搶答系統,利用單片機的定時器/計數器定時和記數的原理,將軟、硬體有機地結合起來,使得系統能夠正確地進行計時,同時使數碼管能夠正確地顯示時間。用開關做鍵盤輸出,揚聲器發生提示。同時系統能夠實現:在搶答中,只有開始後搶答才有效,如果在開始搶答前搶答為無效;滿時後系統計時自動復位及主控強制復位;按鍵鎖定,在有效狀態下,按鍵無效非法。
Ⅵ 單片機的網路資源是什麼
隨著計算機通信技術、電子信息技術和多媒體技術的飛速發展,Internet網路日益成為人們日常生活中必不可少的工具。信息家電、智能化儀表等需要與Internet網路連接的非PC設備越來越多。就目前來看,在非PC設備中,大約有50%左右的是8位的微處理器。若想實現這些設備與Internet網路的通信,必須擴展8位微處理器的網路功能。本文提出了單片機與Internet網路通信的一種具體實現方案。鑒於8位小型微型單片機系統的廣泛應用,在深入學習了解了高性能的32位單片微處理器與Internet網路的通信應用之後,選擇目前較為流行的八位單片機和乙太網控制晶元構成單片機網路通信系統,並在此基礎上成功的將經過裁剪的TCP/IP協議移植到系統中,在此基礎上設計並實現了嵌入式webserver應用:客戶端通過瀏覽器中的網頁實時操縱單片機應用系統LED小燈的亮滅。 由於8位單片機的內部資源有限,根據其自身特點和實際應用的需要,必須對TCP/IP協議進行適當的裁剪。本系統在設計過程中,選擇了TCP/IP協議各層最具代表性的協議,並對其進行裁剪,將裁減後的協議移植到系統中後,經實驗證明系統運行良好,達到了預期的目的。
目錄
摘要
第一章 緒 論
1.1 單片機與 Internet 網路通信概述
1.2 單片機與 Internet 網路通信的解決方案
1.3 系統在教育領域中的應用展望
1.4 本論文所作的工作
第二章 單片機與 Internet 網路通信的系統實現
2.1 系統的實現原理
2.2 系統的硬體實現
2.3 系統的軟體實現
第三章 RTL8019AS 乙太網介面晶元的驅動設計
3.1 RTL8019AS 的引腳描述
3.2 RTL8019AS 的內部結構和工作原理
3.3 W78E58B 和 RTL8019AS 實現的乙太網介面模塊
3.4 RTL8019AS 網路介面模塊控製程序設計
第四章 TCP/IP 協議的移植
4.1 TCP/IP 協議概述
4.2 TCP/IP 協議在8位單片機上的實現概述
4.3 ARP 協議
4.4 IP 協議
4.5 ICMP 協議
4.6 UDP 協議
4.7 TCP 協議
第五章 WEBSERVER 的實現及應用
5.1 8位單片機內部實現 webserver 概述
5.2 web 頁面的存儲
5.3 訪問單片機內的 web 頁
5.4 HTTP 協議的工作原理
5.5 webserver 的實現
第六章 結論和展望
6.1 全文總結
6.2 突出特點
6.3 工作展望
參考文獻
致謝
Ⅶ 劉雨棣單片機
基本信息
作 者:劉雨棣 傅騫
出 版 社:西安電子科技大學出版 出版日期:2008-07
ISBN:756062054 版 次:1
包 裝:平裝 開 本:16開
頁 數:226 頁 字 數:345000千
印 張:1次
所屬分類:圖書 > 計算機與網路 > 計算機系統結構 > 單片機 > (分類細分與勘誤) 內容介紹
本書以陝西省高職高專精品課程「單片機原理及應用」為背景,充分考慮高職特色及專科層次,突出了應用技術的特點。在講述具體內容時,以MCS-51系列8位單片機為基礎,使學生認識單片機的基本結構及工作原理。當結合到實際應用介紹時,則以目前市場上流行的MCS-51系列單片機兼容產品作為控制核心,以保證內容的新穎性和先進性。目前,單片機產品經多年的發展己在單個晶元上基本實現了完整功能,因此開發與外部功能部件配合的介面己成為開發單片機的主要任務,本書為此分配了適當的篇幅。 為了全面掌握單片機技術,書中將採用「復雜指令集」的MCS-51系列單片機同採用「精簡指令集」的PIC單片機進行對比介紹,以便在實踐中針對不同的用途有更靈活、有效的處置方法。 另外,在本書中有~定數量的應用實例,通過對這些實例的分析、研究可以使學習更貼近於實踐、更方便於應用。 本書適合作為高職高專電類專業的教材,也可供從事嵌入式控制技術工作的工程技術人員作為參考資料。 本書參考學時為64學時。
更多
作者簡介
姓名:劉雨棣 傅騫著
作者簡介:
作品:《單片機原理及介面技術》 目錄
第1章 概述
1.1 單片機的概念及單片機的種類
1.1.1 單片機及單片機系統
1.1.2 單片機程序設計語言及開發環境簡介
1.1 3 單片機的使用環境及產品等級
1.2 單片機的類型、特點及用途
1.2.1 單片機主要類型及其特點
1.2.2 常用單片機的應用領域
1.3 單片機的發展趨勢
本章小結
練習與思考題
第2章 mcs-51單片機晶元的結構及原理
2.1 mcs-51單片機基本結構與封裝
2.1.1 mcs 51單片機的基本結構與內部結構
2.1.2 mcs 51單片機引腳分布及功能
2.2 mcs-51單片機的存儲器
2.2.1 mcs-51單片機的程序存儲器
2.2.2 mcs-51單片機的數據存儲器
2.3 mcs-51單片機i/o口電路
2.3.1 mcs-51單片機i/o口的硬體結構
2.3.2 mcs-51單片機i/o口的使用特點
2.4 mcs 51單片機的時鍾電路與工作時序
2.4.1 單片機時鍾電路
2 4.2 指令執行與時序
2.5 mcs-51單片機工作方式
2.5.1 復位方式與復位電路
2.5.2 程序執行方式及掉電保護
2.5.3 單片機的低功耗運行模式
2.6 其他單片機的對照描述
2.6.1 p1c系列單片機的主要特點
2.6.2 典型pic系列單片機的基本性能
本章小結
第3章 單片機的指令系統及功能對照
3.1 mcs 51單片機的指令系統
3.1.1 mcs 51單片機的指令格式
3.1.2 mcs 51單片機的定址方式
3.2 mcs 51單片機指令功能分類
3.2.1 數據傳送類指令
3.2.2 算術運算類指令
3.2.3 邏輯運算及移位類指令
3.2.4 控制轉移類指令
3.2.5 布爾操作類指令
3.3 精簡指令單片機指令系統簡介
3.3.1 pic系列單片機精簡指令集及其說明
3.3.2 pic指令系統簡介
本章小結
練習與思考題
第4章 mcs-51單片機匯編程序設計
4.1 匯編語言程序設計概述
4.1.1 匯編語言以及匯編語言程序設計特點
4.1.2 mcs-51匯編語言偽指令
4.1.3 匯編
更多
書摘
第1章 概述
1.1 單片機的概念及單片機的種類
1.1.1 單片機及單片機系統
單片機是微型計算機發展的一個分支,是一種專門面向控制的微處理器件,故又稱之為微控制器(micro controller unit,mcu)。單片機通常以單一晶元的形式出現,但是它已具有了微型計算機所包含的基本組成結構和特有的控制應用功能,是一種晶元級的微型計算機。另外,由於單片機的體積、結構和功能特點,在實際應用中可以完全融入應用系統之中,故而也稱為嵌入式微控制器(embedded micro—controller)。
最基本的單片機系統由單片機晶元和軟體程序共同組建而成,是用戶為了實現某種控制用途的需要而設計的實際裝置。在單片機系統中,單片機晶元內部的中央處理單元(cpu)處於核心地位,cpu通過執行軟體程序調動硬體電路完成控制功能。根據這種工作方式,單片機系統可以劃分為硬體和軟體兩個組成部分。
1 硬體部分
單片機系統的硬體部分是包括cpu在內的所有硬體電路,按照硬體電路的功能和配置大致可以分為以下3類。
1)基本功能類
基本功能類硬體包括:cpu(用於運算、控制)、ram(用於數據存儲)、rom(用於程序存儲)、i/o設備(實現串列、並行輸入/輸出介面)及時鍾電路(建立工作時序)。在微型計算機中,上述部件被分成若干塊晶元,安裝在一塊稱之為主板的印刷線路板上,在程序的指揮下完成計算機的基本運算操作功能。但是在單片機中,除了時鍾電路之外,其餘部分一般均被集成到一塊半導體晶元上,所以被稱為單片機,即單晶元微型計算機。
……
Ⅷ 跪求 51單片機+12864液晶+1302時鍾製成的萬年歷c程序
頂層文件 萬年歷.C
#include<reg51.h>
#include "LCD1602.h"
#include "DS1302.h"
#define uchar unsigned char
#define uint unsigned int
sbit speaker=P2^4;
bit key_flag1=0,key_flag2=0;
SYSTEMTIME adjusted;
uchar sec_add=0,min_add=0,hou_add=0,day_add=0,mon_add=0,yea_add=0;
uchar data_alarm[7]={0};
/************鍵盤控制******************************/
int key_scan() //掃描是否有鍵按下
{ int i=0;
uint temp;
P1=0xf0;
temp=P1;
if(temp!=0xf0)
i=1;
else
i=0;
return i;
}
uchar key_value() //確定按鍵的值
{
uint m=0,n=0,temp;
uchar value;
uchar v[4][3]={'2','1','0','5','4','3','8','7','6','b','a','9'} ;
P1=0xfe; temp=P1; if(temp!=0xfe)m=0;
P1=0xfd;temp=P1 ;if(temp!=0xfd)m=1;
P1=0xfb;temp=P1 ;if(temp!=0xfb)m=2;
P1=0xf7;temp=P1 ;if(temp!=0xf7)m=3;
P1=0xef;temp=P1 ;if(temp!=0xef)n=0;
P1=0xdf;temp=P1 ;if(temp!=0xdf)n=1;
P1=0xbf;temp=P1 ;if(temp!=0xbf)n=2;
value=v[m][n];
return value;
}
/***************************設置鬧鈴函數*******************************/
void naoling(void)
{
uchar i=0,l=0,j;
init1602();
while(key_flag2&&i<12)
if(key_scan()){j=key_value();write_data(j);if(i%2==0)data_alarm[l]=(j-'0')*10;else {data_alarm[l]+=(j-'0');l++;}i++;delay(600);}
write_com(0x01);
}
uchar according(void)
{ uchar k;
if(data_alarm[0]==adjusted.Year&&data_alarm[1]==adjusted.Month&&data_alarm[2]==adjusted.Day&&data_alarm[3]==adjusted.Hour&&data_alarm[4]==adjusted.Minute&&data_alarm[5]==adjusted.Second)
k=1;
else k=0;
return k;
}
void speak(void)
{uint i=50;
while(i)
{speaker=0;
delay(1);
speaker=1;
delay(1);
i--;
}
}
void alarm(void)
{uint i=10;
while(i)
{
speak();
delay(10);
i--;
}
}
/**************************修改時間操作********************************/
void reset(void)
{
sec_add=0;
min_add=0;
hou_add=0;
day_add=0;
mon_add=0;
yea_add=0 ;
}
void adjust(void)
{
if(key_scan()&&key_flag1)
switch(key_value())
{case '0':sec_add++;break;
case '1':min_add++;break;
case '2':hou_add++;break;
case '3':day_add++;break;
case '4':mon_add++;break;
case '5':yea_add++;break;
case 'b':reset();break;
default: break;
}
adjusted.Second+=sec_add;
adjusted.Minute+=min_add;
adjusted.Hour+=hou_add;
adjusted.Day+=day_add;
adjusted.Month+=mon_add;
adjusted.Year+=yea_add;
if(adjusted.Second>59) adjusted.Second=adjusted.Second%60;
if(adjusted.Minute>59) adjusted.Minute=adjusted.Minute%60;
if(adjusted.Hour>23) adjusted.Hour=adjusted.Hour%24;
if(adjusted.Day>31) adjusted.Day=adjusted.Day%31;
if(adjusted.Month>12) adjusted.Month=adjusted.Month%12;
if(adjusted.Year>100) adjusted.Year=adjusted.Year%100;
}
/**************************中斷處理函數*********************************/
void changing(void) interrupt 0 using 0 //需要修改時間和日期,或者停止修改
{
if(key_flag1)key_flag1=0;
else key_flag1=1;
}
void alarming(void) interrupt 3 using 0 //需要設置鬧鈴或者停止設置
{
if(key_flag2)key_flag2=0;
else key_flag2=1;
}
/********************************主函數***********************************/
main()
{uint i;
uchar *l;
uchar p1[]="D:",p2[]="T:";
SYSTEMTIME T;
EA=1;
EX0=1;
IT0=1;
EA=1;
EX1=1;
IT1=1;
init1602();
Initial_DS1302() ;
while(1)
{ write_com(0x80);
write_string(p1,2);
write_com(0xc0);
write_string(p2,2);
DS1302_GetTime(&T) ;
adjusted.Second=T.Second;
adjusted.Minute=T.Minute;
adjusted.Hour=T.Hour;
adjusted.Week=T.Week;
adjusted.Day=T.Day;
adjusted.Month=T.Month;
adjusted.Year=T.Year;
for(i=0;i<9;i++)
{
adjusted.DateString[i]=T.DateString[i];
adjusted.TimeString[i]=T.TimeString[i];
}
adjust();
if(key_flag2)naoling();
if(according())alarm();
DateToStr(&adjusted);
TimeToStr(&adjusted);
write_com(0x82);
write_string(adjusted.DateString,8);
write_com(0xc2);
write_string(adjusted.TimeString,8);
delay(10);
}
(二)頭文件1 顯示模塊 LCD1602.H
#ifndef LCD_CHAR_1602_2009_5_9
#define LCD_CHAR_1602_2009_5_9
#define uchar unsigned char
#define uint unsigned int
sbit lcdrs = P2^0;
sbit lcdrw = P2^1;
sbit lcden = P2^2;
void delay(uint z) // 延時
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com) // 寫入指令數據到 lcd
{
lcdrw=0;
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date) // 寫入字元顯示數據到 lcd
{
lcdrw=0;
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init1602() // 初始化設定
{
lcdrw=0;
lcden=0;
write_com(0x3C);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
}
void write_string(uchar *pp,uint n)
{
int i;
for(i=0;i<n;i++)
write_data(pp[i]);
}
#endif
(三)頭文件2 時鍾模塊 DS1302.H
#ifndef _REAL_TIMER_DS1302_2009_5_20_
#define _REAL_TIMER_DS1302_2003_5_20_
sbit DS1302_CLK = P2^6; //實時時鍾時鍾線引腳
sbit DS1302_IO = P2^7; //實時時鍾數據線引腳
sbit DS1302_RST = P2^5; //實時時鍾復位線引腳
sbit ACC0 = ACC^0;
sbit ACC7 = ACC^7;
typedef struct SYSTEM_TIME
{
unsigned char Second;
unsigned char Minute;
unsigned char Hour;
unsigned char Week;
unsigned char Day;
unsigned char Month;
unsigned char Year;
unsigned char DateString[9]; //用這兩個字元串來放置讀取的時間
unsigned char TimeString[9];
}SYSTEMTIME; //定義的時間類型
#define AM(X) X
#define PM(X) (X+12) // 轉成24小時制
#define DS1302_SECOND 0x80
#define DS1302_MINUTE 0x82
#define DS1302_HOUR 0x84
#define DS1302_WEEK 0x8A
#define DS1302_DAY 0x86
#define DS1302_MONTH 0x88
#define DS1302_YEAR 0x8C
#define DS1302_RAM(X) (0xC0+(X)*2) //用於計算 DS1302_RAM 地址的宏
/******內部指令**********/
void DS1302InputByte(unsigned char d) //實時時鍾寫入一位元組(內部函數)
{
unsigned char i;
ACC = d;
for(i=8; i>0; i--)
{
DS1302_IO = ACC0;
DS1302_CLK = 1;
DS1302_CLK = 0;
ACC = ACC >> 1; //因為在前面已經定義了ACC0 = ACC^0;以便再次利用DS1302_IO = ACC0;
}
}
unsigned char DS1302OutputByte(void) //實時時鍾讀取一位元組(內部函數)
{
unsigned char i;
for(i=8; i>0; i--)
{
ACC = ACC >>1;
ACC7 = DS1302_IO;
DS1302_CLK = 1;
DS1302_CLK = 0;
}
return(ACC);
}
/********************************/
void Write1302(unsigned char ucAddr, unsigned char ucDa) //ucAddr: DS1302地址, ucData: 要寫的數據
{
DS1302_RST = 0;
DS1302_CLK = 0;
DS1302_RST = 1;
DS1302InputByte(ucAddr); // 地址,命令
DS1302InputByte(ucDa); // 寫1Byte數據
DS1302_CLK = 1;
DS1302_RST = 0;
}
unsigned char Read1302(unsigned char ucAddr) //讀取DS1302某地址的數據
{
unsigned char ucData;
DS1302_RST = 0;
DS1302_CLK = 0;
DS1302_RST = 1;
DS1302InputByte(ucAddr|0x01); // 地址,命令
ucData = DS1302OutputByte(); // 讀1Byte數據
DS1302_CLK = 1;
DS1302_RST = 0;
return(ucData);
}
void DS1302_SetProtect(bit flag) //是否防寫
{
if(flag)
Write1302(0x8E,0x10);
else
Write1302(0x8E,0x00);
}
void DS1302_SetTime(unsigned char Address, unsigned char Value) // 設置時間函數
{
DS1302_SetProtect(0);
Write1302(Address, ((Value/10)<<4 | (Value%10))); //將十進制數轉換為BCD碼
} //在DS1302中的與日歷、時鍾相關的寄存器存放的數據必須為BCD碼形式
void DS1302_GetTime(SYSTEMTIME *Time)
{
unsigned char ReadValue;
ReadValue = Read1302(DS1302_SECOND);
Time->Second = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //將BCD碼轉換為十進制數
ReadValue = Read1302(DS1302_MINUTE);
Time->Minute = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_HOUR);
Time->Hour = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_DAY);
Time->Day = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_WEEK);
Time->Week = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_MONTH);
Time->Month = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_YEAR);
Time->Year = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
}
unsigned char *DataToBCD(SYSTEMTIME *Time)
{
unsigned char D[8];
D[0]=Time->Second/10<<4+Time->Second%10;
D[1]=Time->Minute/10<<4+Time->Minute%10;
D[2]=Time->Hour/10<<4+Time->Hour%10;
D[3]=Time->Day/10<<4+Time->Day%10;
D[4]=Time->Month/10<<4+Time->Month%10;
D[5]=Time->Week/10<<4+Time->Week%10;
D[6]=Time->Year/10<<4+Time->Year%10;
return D;
}
void DateToStr(SYSTEMTIME *Time)
{
//將十進制數轉換為液晶顯示的ASCII值
Time->DateString[0] = Time->Year/10 + '0';
Time->DateString[1] = Time->Year%10 + '0';
Time->DateString[2] = '-';
Time->DateString[3] = Time->Month/10 + '0';
Time->DateString[4] = Time->Month%10 + '0';
Time->DateString[5] = '-';
Time->DateString[6] = Time->Day/10 + '0';
Time->DateString[7] = Time->Day%10 + '0';
Time->DateString[8] = '\0';
}
void TimeToStr(SYSTEMTIME *Time)
{
//將十進制數轉換為液晶顯示的ASCII值
Time->TimeString[0] = Time->Hour/10 + '0';
Time->TimeString[1] = Time->Hour%10 + '0';
Time->TimeString[2] = ':';
Time->TimeString[3] = Time->Minute/10 + '0';
Time->TimeString[4] = Time->Minute%10 + '0';
Time->TimeString[5] = ':';
Time->TimeString[6] = Time->Second/10 + '0';
Time->TimeString[7] = Time->Second%10 + '0';
Time->DateString[8] = '\0';
}
void Initial_DS1302(void)
{
unsigned char Second;
Second=Read1302(DS1302_SECOND);
if(Second&0x80) //初始化時間
DS1302_SetTime(DS1302_SECOND,0);
}
void DS1302_TimeStop(bit flag) // 是否將時鍾停止
{
unsigned char Data;
Data=Read1302(DS1302_SECOND);
DS1302_SetProtect(0);
if(flag)
Write1302(DS1302_SECOND, Data|0x80);
else
Write1302(DS1302_SECOND, Data&0x7F);
}
#endif