Transcript 點擊下載此文件
主講:唐慧玲 老師 學習目標 介紹電子元件實物,及其代表符號 及運作原理。 介紹基本電路原理,結合電子元件 實作應用電路。 了結單晶片電腦結構、運作原理、 操作指令及程式寫作原則。 利用單晶片控制元件實作電子控制 應用。 實務講習項目 1. 2. 3. 4. 5. 6. 7. 8. 9. 電路與電子元件 認識電阻 R-C 電路介紹 電晶體介紹 電子閃爍燈實驗 單晶片微控制器 - 8051 單晶片微控制器 I/O 實驗 延時副程式及其應用 程式查表應用 電路與電子元件 1. 常用電子元件 電阻(Resistor) 電容(Capacitor) 二極體(Diode) 電晶體(Transistor) 發光二極體(LED) 開關(Switch) 其它元件 2. 電路上的元件符號 3. 電路的繪製 常用電子元件 電容(Capacitor) 電阻(Resistor) 其它元件 發光二極體(LED) 二極體(Diode) 開關(Switch) 電晶體 (Transistor)(Q) 電路圖的繪製 認識電阻-電阻色碼介紹 顏色 第一環 數值 1 第二環 數值 2 第三環 次方 黑 0 0 100 棕 1 1 101 紅 2 2 102 橙 3 3 103 黃 4 4 104 綠 5 5 105 藍 6 6 106 紫 7 7 107 灰 8 8 108 白 9 9 109 金 10-1 銀 -2 10 第四環 誤差比 2% 5% 10% 認識電阻-練習 歐姆定律 並聯 I + 應用 V 串聯 電壓/電流實驗 R-C 電路介紹 1. 電鍵 Sw 接到 a 點, R,C,電池 e0串聯 iR + q/C = R(dq/dt) + q/C = e0 q(t) = Ce0[1 – exp(-t/RC)] 電容器 C 充電, 時間常數 = RC 2. 充電到qmax, 電鍵Sw 接到b 點, R,C串聯 R(dq/dt) + q/C = 0 q(t) = qmexp(-t/RC) 電容器放電, t = = RC (鬆弛時間) q(t) = qm/e = qm/2.718 q(T1/2) = qm/2 電晶體介紹 NPN 小電流 大電流 大電流 小電流 PNP Vcc Gnd Vcc Gnd 電子閃爍燈實驗 單晶片微控制器 – MCS-51 AT89C51/AT89S51 腳位介紹 正電源 輸出入埠P1 輸出入埠P0 &擴充記憶 系統Reset 擴充記憶/IO 特殊用途 輸出/入埠P3 &特殊用途 震盪輸入 系統接地 輸出入埠P2 &擴充記憶 AT89C51 特性 AT59C51 內部結構圖 記憶體與特殊記憶體 MCS-51 基本線路接法 +5V 輸出/入埠 P0 10uF 可做一般 I/O 用 10K 22p 接地 輸出/入埠 P2 12M 22p 接地 接地 MCS-51 組合語言介紹 指令集 與 定址法 算數運算指令 直接訂址法 邏輯運算指令 立即定址法 布林運算指令 暫存器定址法 資料轉移指令 暫存器間接定址法 程式分支指令 基底暫存器加索引 暫存器間接定址法 算數運算指令 指令 INC A INC Rn INC direct INC @Ri INC DPTR DEC A DEC Rn DEC direct DEC @Ri MUL AB DIV AB DA A 說明 A 累加器內容加 1 暫存器內容加 1 直接位址內容加 1 間接位址內容加 1 資料指標 DPTR 內容加 1 A 累加器內容減 1 暫存器內容減 1 直接位址內容減 1 間接位址內容減 1 A 累加器乘以暫存器 B,相乘結果之高 8 位 元存入 B,低 8 位元存入 A A 累加器除以暫存器 B,相除結果之商存入 A,餘數存入 B A 累加器內容調整成 10 進制 BCD 數 指令 ADD A,Rn ADD A,direct ADD A,@Ri ADD A,#data ADDC A,Rn ADDC A,direct ADDC A,@Ri ADDC A,#data Byte MC SUBB A,Rn 1 1 SUBB A,direct 1 1 SUBB A,@Ri 2 1 SUBB A,#data 1 1 1 1 2 1 1 1 2 1 1 1 1 4 1 4 1 1 說明 將暫存器內容加入 A 累加器 將直接位址內容加入 A 累加器 將間接位址內容加入 A 累加器 將 8 位元常數資料加入 A 累加器 將暫存器與進位 CF 加入 A 累加器 直接位址內容與進位 CF 加入累加器 間接位址內容與進位 CF 加入累加器 將 8 位元常數資料與進位加入累加器 A 累加器內容減暫存器與借位 CF A 累加器內容減直接位址內容與借位 A 累加器內容減間接位址內容與借位 累加器內容減 8 位元常數資料與借位 Byte 1 2 1 2 1 2 1 2 1 2 1 2 MC 1 1 1 1 1 1 1 1 1 1 1 1 邏輯運算指令 指令 XRL A,Rn XRL A,direct XRL A,@Ri XRL A,#data XRL direct,A XRL direct,#data CLR A CPL A RL A RLC A RR A RRC A SWAP A 說明 暫存器 XOR 至 A 累加器內 直接位址內容 XOR 至 A 累加器內 間接位址內容 XOR 至 A 累加器內 8 位元資料 XOR 至 A 累加器內 A 累加器內容 XOR 至直接位址內 8 位元資料 XOR 至直接位址內 清除 A 累加器 A 累加器內容取補數 A 累加器內容向左旋轉 1 位元 A 累加器與進位 CF 一起左旋 1 位元 A 累加器內容向右旋轉 1 位元 A 累加器與進位 CF 一起右旋 1 位元 A 累加器的高低 4 位元互相交換 Byte 1 2 1 2 2 3 1 1 1 1 1 1 1 MC 1 1 1 1 1 2 1 1 1 1 1 1 1 指令 ANL A,Rn ANL A,direct ANL A,@Ri ANL A,#data ANL direct,A ANL direct,#data ORL A,Rn ORL A,direct ORL A,@Ri ORL A,#data ORL direct,A ORL direct,#data 說明 暫存器 AND 至 A 累加器內 直接位址內容 AND 至 A 累加器內 間接位址內容 AND 至 A 累加器內 8 位元資料 AND 至 A 累加器內 A 累加器內容 AND 至直接位址內 8 位元資料 AND 至直接位址內 暫存器 OR 至 A 累加器內 直接位址內容 OR 至 A 累加器內 間接位址內容 OR 至 A 累加器內 8 位元資料 OR 至 A 累加器內 A 累加器內容 OR 至直接位址內 8 位元資料 OR 至直接位址內 Byte 1 2 1 2 2 3 1 2 1 2 2 3 MC 1 1 1 1 1 2 1 1 1 1 1 2 布林運算指令 指令 CLR C CLR bit SETB C SETB bit CPL C CPL bit ANL C,bit ANL C,/bit ORL C,bit ORL C,/bit MOV C,bit MOV bit,C JC rel JNC rel JB bit,rel JNB bit,rel JBC bit,rel 說明 清除進位旗標 CF=0 清除位元位址內容 設定進位旗標 CF=1 設定位元位址內容 將進位旗標 CF 內容取補數 將位元位址內容取補數 將位元位址內容 AND 至 CF 內 將位元位址內容取補數 AND 至 CF 內 將位元位址內容 OR 至 CF 內 將位元位址內容取補數 OR 至 CF 內 將位元位址內容移入進位旗標 CF 內 將進位旗標 CF 移入位元位址內 若 CF=1,則跳至相對位址 rel 若 CF=0,則跳至相對位址 rel 若 (bit)=1,則跳至相對位址 rel 若 (bit)=0,則跳至相對位址 rel 若 (bit)=1,則跳至相對位址 rel,bit=0 Byte 1 2 1 2 1 2 2 2 2 2 2 2 2 2 3 3 3 MC 1 1 1 1 1 1 1 2 2 2 1 2 2 2 2 2 2 資料轉移指令 指令 MOV DPTR,#data16 MOVC A,@A+DPTR MOVC A,@A+PC MOVX A,@Ri MOVX A,@DPTR MOVX @Ri,A MOVX @DPTR,A PUSH direct POP direct XCH A,Rn XCH A,direct XCH A,@Ri XCHD A,@Ri 說明 將 16 位元常數資料移入資料指標內 將程式記憶體內容移入 A 累加器內 將程式記憶體內容移入 A 累加器內 將外部資料記憶體內容移入 A 累加器 將外部資料記憶體內容移入 A 累加器 將 A 累加器內容移入外部資料記憶體 將 A 累加器內容移入外部資料記憶體 將直接位址內容存入堆疊內 自堆疊頂端取出資料存入直接位址內 A 累加器內容與暫存器內容互換 A 累加器內容與直接位址內容互換 A 累加器內容與間接位址內容互換 累加器與間接位址低 4 位元內容互換 Byte 3 1 1 1 1 1 1 2 2 1 2 1 1 MC 2 2 2 2 2 2 2 2 2 1 1 1 1 指令 MOV A,Rn MOV A,direct MOV A,@Ri MOV A,#data MOV Rn,A MOV Rn,direct MOV Rn,#data MOV direct,A MOV direct,Rn MOV direct,direct MOV direct,@Ri MOV direct,#data MOV @Ri,A MOV @Ri,direct MOV @Ri,#data 說明 Byte MC 將暫存器內容移入 A 累加器 1 1 將直接位址內容移入 A 累加器 2 1 暫存器間接位址內容移入 A 累加器 1 1 將 8 位元常數資料移入 A 累加器 2 1 將 A 累加器內容移入暫存器 1 1 將直接位址內容移入暫存器 2 2 將 8 位元常數資料移入暫存器 2 1 將 A 累加器內容移入直接位址內 2 1 將暫存器內容移入直接位址內 2 2 將直接位址內容移入直接位址內 3 2 暫存器間接定址內容移入直接位址內 2 2 將 8 位元常數資料移入直接位址內 3 2 將 A 累加器內容移入間接位址內 1 1 將直接位址內容移入間接位址內 2 2 將 8 位元常數資料移入間接位址內 2 1 程式分支指令 指令 說明 byte CJNE A,direct, 若 A 累加器與直接位址內 3 rel 容不相等,則跳至 rel 位址 範圍-128byte ~ +127byte CJNE A,#data, 若 A≠data,則跳至 rel 位址,範圍-128byte ~ 3 rel +127byte CJNE Rn,#data, 若暫存器內容≠data,則跳至 rel 位址 3 rel 範圍-128byte ~ +127byte CJNE @Ri, 若間接位址內容≠data,則跳至 rel 位址,範 3 #data,rel 圍-128byte ~ +127byte DJNZ Rn,rel 暫存器內容減 1,若不等於 0,則跳 2 至 rel 位址 DJNZ direct,rel 直接位址內容減 1,若不等於 0,則 3 跳至 rel 位址 NOP 無動作 1 MC 2 指令 ACALL addrl1 ACALL addrl6 RET RETI AJMP addrl1 LJMP addrl6 SJMP rel JMP @A+DPTR JZ rel JNZ rel 2 2 2 2 2 1 說明 副程式呼叫 (可定址 2KB 範圍) 副程式呼叫 (可定址 64KB 範圍) 自副程式返回主程式 自中斷副程式返回主程式 絕對跳躍 (2KB 範圍) 遠程跳躍 (64KB 範圍) 相對跳躍 (-128byte ~ +127byte) 間接跳躍 (64KB 範圍) 若 A=0,則跳至 rel 位址 範圍-128byte ~ +127byte 若 A≠0,則跳至 rel 位址 範圍-128byte ~ +127byte byte 2 3 1 1 3 3 2 1 2 MC 2 2 2 2 2 2 2 2 2 2 2 組合語言程式設計介紹-I ; Project : LED Show Program 說明 -- ; 宣告 指定位址 組合語言程式碼 程式結束 ; I/O Delaration LED Reg Data0 Equ Data1 Equ IND Reg ; ORG JMP P1.0 55H 0AAH LED.0 000H START ; System Beginning from Here ORG 020H START: Mov A,#Data0 Mov LED,A Call Delay200ms Mov A,#Data1 Mov LED,A Jmp START: ; END ;Declare P1 as LED Port ;Reset Vector 組合語言程式設計介紹-II 標記區 START: 指令碼 運算元 ORG Mov Mov Call Mov Mov Jmp 020H A,#Data0 LED,A Delay200ms A,#Data1 LED,A START: ; END 程式註解 ; 載入資料0 到 Acc 阻譯程序及晶片燒錄 程式燒錄 編譯流程 編寫程式 Edition 組譯 Assembling 原始碼檔 Source Code 燒錄 目的碼檔 Object Code 鏈結 Linking 2/16進位檔 Hex File 實際應用 單晶片微控制器 I/O 實驗 基本輸出實驗 - LED 亮不亮 +5V LED x 4 220 x 4 LEDs 作為輸出 10uF 10K 22p x 2 按壓開關作為輸入 12Mhz SW x 4 基本輸入實驗 - 開關控制 延時副程式及其應用 開始 延時 LED 亮 延時 LED 滅 延時副程式及其應用-I 延時 共延時多少時間???? 設定R6, R7值 R7減 1 N Delay: R7=0? Dly1: Y R6減 1 R6=0? Y 返回 N Mov Mov Djnz Djnz Ret R6,#100 R7,#200 R7,$ R6,Dly1 ;設定R6值 ;設定R7值 延時副程式及其應用-II 延時 共延時多少時間???? 設定R6值 設定R7值 Delay: Dly1: Dly2: R7減 1 N R7=0? Y R6減 1 R6=0? Y 返回 N Mov Mov Djnz Djnz Ret R6,#100 R7,#200 R7,Dly2 R6,Dly1 ;設定R6值 ;設定R7值 單晶片版LED閃爍燈 +5V 開始 延時(時間) 10uF LED 亮 10K 延時(時間) LED 滅 22p x 2 12Mhz LED x 4 220 x 4 單晶片版LED閃爍燈 ; Project : LED Show Program ; I/O Delaration LED Reg Data0 Equ Data1 Equ IND Reg ; ORG JMP ; ORG START: Mov Mov Call Mov Mov Call Jmp P0 01H 02H LED.0 000H START 020H A,#Data0 LED,A Delay A,#Data1 LED,A Delay START Delay: Dly1: Dly2: Mov Mov Djnz Djnz Ret R6,#100 R7,#200 R7,Dly2 R6,Dly1 ;設定R6值 ;設定R7值 各式劈靂燈實驗 各式劈靂燈實驗 實習測驗 數字式計時 實習測驗 -- 數字式計時 七段顯示器接腳圖 實習測驗 -- 數字式計時 0~9 數字顯示 實習測驗 -- 數字式計時 題目說明 讓 LED七段顯示器依序顯示 0 到 9 數字 每次顯示的切換時間為一秒鐘 顯示到數字9後 下一次顯示又從一開始 顯示六次輪循 應該發費一分鐘整 實習測驗 -- 數字式計時 提示 找出 0 到 9 數字顯示接腳供電組合(0/1) 設計一Delay副程式時間為一秒鐘 切換組合之間呼叫Delay副程式一次 實習測驗 -- 數字式計時 提示 MC .... Mov P0,#00110010B Call Delay 2 .... .... Delay: Dly0: Dly1: Dly2: Mov Mov Mov Djnz Djnz Djnz Ret 總呼叫時間 2 + 3+(3+(3+ZZ*2)*YY )*XX R5,#XX R6,#YY R7,#ZZ R7,Dly2 R6,Dly1 R5,Dly0 ;設定R5值 ;設定R6值 ;設定R7值 1 1 1 2 2 2 2 1+(1+(1+ZZ*2+2)*YY +2)*XX+2 實習測驗 -- 數字式計時 提示 Result:999999 Result:999999 Result:999999 Result:999999 Result:999999 Result:1000003 Result:1000001 XX:23 XX:23 XX:46 XX:46 XX:46 XX:127 XX:167 YY:185 YY:235 YY:88 YY:104 YY:152 YY:17 YY:15 ZZ:116 ZZ:91 ZZ:122 ZZ:103 ZZ:70 ZZ:230 ZZ:198 Result:1000001 Result:1000001 Result:1000001 Result:1000001 Result:1000001 Result:1000001 Result:1000001 Result:1000001 Result:1000001 Result:1000001 Result:1000003 XX:167 XX:167 XX:167 XX:167 XX:167 XX:167 XX:167 XX:167 XX:167 XX:167 XX:254 YY:19 YY:21 YY:35 YY:45 YY:57 YY:63 YY:95 YY:105 YY:133 YY:171 YY:14 ZZ:156 ZZ:141 ZZ:84 ZZ:65 ZZ:51 ZZ:46 ZZ:30 ZZ:27 ZZ:21 ZZ:16 ZZ:139