《AVR單片機C語言輕鬆學》
《AVR單片機C語言輕鬆學》
GITHUB:
https://github.com/jash-git/Jash-good-idea-20220101-001/tree/main/HW/Arduino
扉頁; 1
版權; 2
前言; 3
目錄; 5
第1章 ATmega16單片機基礎; 11
1.1 AVR系列單片機; 11
1.2 ATmega16單片機的特點、硬體結構和封裝; 11
1.3 ATmega16單片機的內核; 14
1.3.1 算數邏輯單位ALU; 15
1.3.2 狀態寄存器SREG; 15
1.3.3 通用寄存器; 15
1.3.4 堆疊; 16
1.3.5 中斷和重定處理模組; 17
1.4 ATmega16單片機的記憶體體系; 18
1.4.1 程式記憶體; 18
1.4.2 資料記憶體; 18
1.4.3 E2PROM記憶體; 19
1.5 ATmega16單片機的系統時鐘; 20
1.5.1 ATmega16的系統時鐘組成; 20
1.5.2 ATmega16的時鐘源選擇; 21
1.5.3 晶體振盪器; 21
1.5.4 低頻晶體振盪器; 22
1.5.5 外部RC振盪器; 22
1.5.6 片內RC振盪器; 23
1.5.7 外部時鐘源; 24
1.6 ATmega16單片機的電源管理; 25
1.7 ATmega16單片機的復位; 27
1.7.1 ATmega16的復位源; 27
1.7.2 上電復位; 28
1.7.3 外部復位; 29
1.7.4 掉電檢測復位; 29
1.7.5 看門狗復位; 29
1.7.6 ATmega16的復位控制寄存器; 30
1.7.7 片內基準電壓; 30
1.8 ATmega16單片機的中斷系統; 31
第2章 ATmega16單片機的指令和C語言; 33
2.1 ATmega16單片機的指令系統; 33
2.1.1 ATmega16單片機的指令集; 33
2.1.2 ATmega16單片機的定址方式; 37
2.2 ATmega16單片機C語言的資料類型、運算子號和運算式; 38
2.2.1 常量和變數; 38
2.2.2 算數運算、賦值、邏輯運算以及關係運算;
38
2.2.3 自增減、複合和逗號運算; 39
2.2.4 位運算; 40
2.2.5 運算的優先順序; 40
2.3 ATmega16單片機C語言的結構; 41
2.4 ATmega16單片機C語言的函數; 42
2.4.1 函數的定義、參數和返回值; 42
2.4.2 函數的調用; 42
2.4.3 區域變數和全域變數; 42
2.5 ATmega16單片機C語言的陣列和指標; 43
2.6 ATmega16單片機C語言的自構造類型; 44
2.6.1 結構體; 44
2.6.2 聯合體; 45
2.6.3 枚舉; 46
第3章 ATmega16單片機的ICC AVR軟體發展環境; 47
3.1 ATmega16單片機的軟體發展環境; 47
3.2 安裝ICC AVR; 47
3.3 ICC AVR的工作介面; 49
3.4 ICC AVR的功能表列和快捷列; 50
3.4.1 ICC AVR的功能表列; 50
3.4.2 ICC AVR的快捷列; 54
3.5 ICC AVR的擴展關鍵字; 55
3.5.1 中斷關鍵字; 55
3.5.2 非揮發寄存器關鍵字; 56
3.5.3 資料段關鍵字; 56
3.6 ICC AVR的文件; 56
3.6.1 ICC AVR的常用檔案類型; 56
3.6.2 ICC AVR的庫函數檔; 57
3.6.3
ICC AVR的開機檔案; 57
3.7 “Hello World!”——ICC AVR的應用實例; 58
第4章 ATmega16單片機的硬體開發和Proteus硬體模擬環境; 62
4.1 ATmega16單片機的硬體系統開發流程和開發工具; 62
4.1.1 ATmega16單片機的硬體系統開發流程; 62
4.1.2 ATmega16單片機的硬體開發工具; 63
4.2 Proteus應用基礎; 64
4.2.1
Proteus的介面和支援的檔; 64
4.2.2 Proteus的菜單; 66
4.2.3 Proteus的快捷列和工具箱; 77
4.3 Proteus的使用流程; 80
4.4 Proteus中的ATmega16及其使用; 80
4.5 Proteus和ICC AVR聯合使用; 82
第5章 ATmega16單片機的I/O引腳和外部中斷; 88
5.1 ATmega16外部引腳基礎使用方法; 88
5.1.1 ATmega16的I/O引腳的結構; 88
5.1.2 ATmega16的I/O引腳配置; 89
5.1.3 ATmega16的I/O引腳電平讀取; 91
5.1.4 ATmega16的I/O引腳低功耗處理; 92
5.2 ATmega16外部引腳的第二功能; 92
5.3 ATmega16的外部中斷; 96
5.3.1 MCU控制寄存器(MCUCR); 96
5.3.2 MCU控制與狀態寄存器(MCUCSR); 97
5.3.3 通用中斷控制寄存器(GICR); 97
5.3.4 通用中斷標誌寄存器(GIFR); 98
5.4 ATmega16的I/O引腳和中斷的應用實例; 98
5.4.1 I/O引腳輸出高低脈衝電平實例; 98
5.4.2 I/O引腳驅動發光二極體(LED)實例; 102
5.4.3 I/O引腳驅動單位數碼管實例; 108
5.4.4 I/O引腳驅動獨立按鍵實例; 114
5.4.5 I/O引腳驅動行列鍵盤實例; 120
5.4.6 外部中斷控制I/O引腳輸出實例 ; 125
第6章 ATmega16單片機的定時計數器; 129
6.1 定時計數器T/C0; 129
6.1.1 T/C0的相關寄存器; 129
6.1.2 T/C0的工作模式; 133
6.2 定時計數器T/C1; 137
6.2.1 T/C1的相關寄存器; 137
6.2.2 T/C1的工作模式; 142
6.3 定時計數器T/C2; 147
6.3.1 T/C2的相關寄存器; 148
6.3.2 T/C2的工作模式; 151
6.4 ATmega16的定時計數器的應用實例; 154
6.4.1 T/C0控制I/O引腳輸出方波; 154
6.4.2 T/C1控制I/O引腳輸出PWM; 157
6.4.3 外部晶體秒定時; 159
第7章 ATmega16單片機的串口; 163
7.1 ATmega16串口的結構; 163
7.2 ATmega16串口的寄存器; 164
7.2.1 串口資料寄存器(UDR); 164
7.2.2 串口控制和狀態寄存器A(UCSRA); 164
7.2.3 串口控制和狀態寄存器B(UCSRB); 165
7.2.4 串口控制和狀態寄存器C(UCSRC); 166
7.2.5 串口串列傳輸速率寄存器(UBRRL和UBRRH); 167
7.3 ATmega16串口的使用方法; 170
7.3.1 選擇ATmega16串口的時鐘源; 170
7.3.2 選擇ATmega16串口的資料框架格式; 172
7.3.3 ATmega16串口的資料收發; 173
7.3.4 ATmega16串口的多機通信; 175
7.4 ATmega16串口的應用實例; 176
7.4.1 ATmega16串口資料發送; 176
7.4.2 和PC進行串列通信; 182
第8章 ATmega16單片機的TWI和SPI匯流排界面; 188
8.1 TWI匯流排基礎; 188
8.1.1 TWI匯流排的資料交互過程; 188
8.1.2 TWI匯流排的位址; 190
8.2 TWI匯流排模組相關寄存器; 191
8.2.1 位元速率控制寄存器(TWBR); 191
8.2.2 TWI控制寄存器(TWCR); 191
8.2.3 TWI狀態寄存器(TWSR); 192
8.2.4 TWI資料寄存器(TWDR); 193
8.2.5 TWI從機位址寄存器(TWAR); 193
8.3 TWI匯流排模組的使用; 193
8.4 TWI匯流排模組的資料傳輸方式; 195
8.4.1 主機發送模式(MT); 195
8.4.2 主機接收模式(MR); 196
8.4.3 從機發送模式(ST); 197
8.4.4 從機接收模式(SR); 198
8.5 TWI匯流排的仲裁; 199
8.6 SPI匯流排基礎; 199
8.7 SPI匯流排模組相關寄存器; 201
8.7.1 SPI控制寄存器SPCR; 201
8.7.2 SPI狀態寄存器SPSR; 202
8.7.3 SPI資料寄存器SPDR; 203
8.8 SPI匯流排界面的工作模式; 203
8.9 TWI和SPI匯流排模組應用實例; 205
8.9.1 ATmega16雙機使用TWI匯流排模組進行通信; 205
8.9.2 ATmega16雙機使用SPI匯流排模組進行通信; 213
第9章 ATmega16單片機的比較器和ADC模組; 221
9.1 ATmega16單片機的比較器 ; 221
9.1.1 模擬比較器基礎; 221
9.1.2 模擬比較器的寄存器; 221
9.1.3 模擬比較器的輸入通道; 223
9.2 ATmega16單片機的ADC模組; 223
9.2.1 ADC模組基礎; 224
9.2.2 ADC模組的寄存器; 225
9.2.3 ADC模組的轉換過程; 229
9.2.4 ADC模組的輸入通道和參考電源; 231
9.2.5 ADC模組的轉換結果和精度定義; 232
9.3 ATmega16比較器的應用實例; 234
9.3.1 雙通道類比信號比較應用實例; 234
9.3.2 多通道類比信號比較應用實例; 237
9.4 ATmega16 ADC模組的應用實例; 241
9.4.1 單通道類比信號採集實例; 241
9.4.2 多通道類比信號採集實例; 244
9.4.3 增益放大類比信號採集實例; 247
9.4.4 差分類比信號比較採集實例; 251
第10章 ATmega16的其他內部資源; 255
10.1 看門狗(WDT); 255
10.1.1 看門狗基礎; 255
10.1.2 看門狗的寄存器; 255
10.1.3 看門狗的啟動和關閉; 256
10.2 內部E2PROM; 256
10.2.1 E2PROM的操作; 257
10.2.2 E2PROM的寄存器; 258
10.2.3 E2PROM的操作函數; 259
10.3 內置看門狗和E2PROM應用實例; 260
10.3.1 內置看門狗模組測試應用實例; 260
10.3.2 E2PROM讀寫應用實例; 264
第11章 ATmega16的應用系統; 268
11.1 單I/O引腳擴展多按鍵; 268
11.1.1 應用系統背景; 268
11.1.2 設計思路; 268
11.1.3 硬體系統設計; 269
11.1.4 軟體系統設計; 271
11.1.5 應用系統的模擬和總結; 273
11.2 簡易電子琴; 275
11.2.1 應用系統背景; 275
11.2.2 設計思路; 276
11.2.3 硬體系統設計; 277
11.2.4 軟體系統設計; 281
11.2.5 應用系統的模擬和總結; 287
11.3 商場燈光控制; 289
11.3.1 應用系統背景; 289
11.3.2 設計思路; 289
11.3.3 硬體系統設計; 289
11.3.4 軟體系統設計; 298
11.3.5 應用系統的模擬和總結; 308