300 likes | 414 Views
CH 2 I/O 埠輸入與輸出. 中華科技大學電子工程學系 2012/09/28. RAM. A P0, P1 P2, P3 DPTR. R0,R1,R2,R3,R4,R5,R6,R7. MOV. 指令集. ( ) MOV A,#98H ( ) MOV A,#ABH ( ) MOV A,#98 ( ) MOV A,#10011000B ( ) MOV A,#100H ( ) MOV A,#255
E N D
CH 2 I/O 埠輸入與輸出 中華科技大學電子工程學系 2012/09/28
RAM A P0, P1 P2, P3 DPTR R0,R1,R2,R3,R4,R5,R6,R7 MOV
指令集 ( ) MOV A,#98H ( ) MOV A,#ABH ( ) MOV A,#98 ( ) MOV A,#10011000B ( ) MOV A,#100H ( ) MOV A,#255 ( ) MOV A,#30H ( ) MOV A,30H ( ) MOV 7FH,#7FH( ) MOV R3,R6 ( ) SETB 30.5H ( ) CLR 2F.7H ( ) CLR A ( ) SETB A ( ) JB 23.5H,L1 ( ) JB 33H,L1 ( ) JNB 27,3H,L2 ( ) JNB 53H,L2 ( ) MOV DPTR,#65536( ) MOV DPTR,#256 ( ) 8051所有暫存器都是八位元
Immediate • Addressing (2) Direct Addressing
直接定址與間接定址(Addressing) • 程式架構: 將30H~7FH的資料記憶體依次寫入#AAH資料 MOV A, MOV R0 , MOV R1 , MOV , INC R1 , L1 RET • MOV 30H,#0AAH MOV 31H,#0AAH :
程式記憶體 (ROM) • 存放本文程式的機械碼(machine code) • 存放程式中所需要的表格資料 MOV A,#07H (OFFSET) MOV DPTR,#SEG7_TABLE MOVC A,@A+DPTR MOV DPTR,#0FFE0H MOVX @DPTR,A SEG7_TABLE: DB: C0H,F9H,A4H,B0H,99H,92H,82H,F8H, DB: 80H,90H,88H,83H,C6H,A1H,86H,8EH 註 : 8051 指令集中三大搬移指令 MOV MOVC MOVX ROM
MCS_51 時脈分析 • 振盪週期: 外部振盪器 2MHz ~ 16MHz 一個基頻時脈為一個相位 • 狀態週期: 兩個相位(P1,P2)構成一個狀態 • 機械週期: 六個狀態(S1~S6)構成一個機械週期 • 指令週期: 每執行一條指令所需機械週期 State Cycle, Machine Cycle, Instruction Cycle 12MHz 1us
模組程式之設計 EXTRN CODE(YYY) (呼叫YYY外部模組) PUBLIC XXX(宣告XXX為可供外部呼叫之模組) ROM SEGMENT CODE (共享 ROM空間) RSEG ROM XXX: (模組名稱標記) : CALL YYY : RET (模組程式結束用 RET) END (宣告結束)
(1) DELAY_01MS PUBLIC DELAY_01MS ROM SEGMENT CODE RSEG ROM DELAY_01MS: MOV R3,# NOP DJNZ R3,$ DJNZ R4,DELAY_01MS RET END (1+1+2*48+2)*R4=100us*R4=0.1ms*R4
(2) DELAY_10MS PUBLIC DELAY_10MS ROM SEGMENT CODE RSEG ROM DELAY_10MS: MOV R4,# DELAY1: MOV R3,# NOP DJNZ R3,$ DJNZ R4,DELAY1 DJNZ R5,DELAY_10MS RET END
(3) FLOOK_TABLE PUBLIC FLOOK_TABLE ROM SEGMENT CODE RSEG ROM FLOOK_TABLE: MOV A,R1 MOVC A,@A+DPTR MOV R2,A RET END
(4) BLOOK_TABLE PUBLIC BLOOK_TABLE ROM SEGMENT CODE RSEG ROM BLOOK_TABLE: MOV R1,#00H BL1: MOV A,R1 MOVC A,@A+DPTR XRL A,R2 JNZ BL2 JMP BL3 BL2: INC R1 DJNZ R3,BL1 MOV R1,#0FFH BL3: RET END
系統程式之設計 EXTRN CODE(YYY) ;RAM DEFINE LED_BUFFER EQU 30H LED_INDEX EQU 38H • ORG 00H JMP START START: LCALL YYY : JMP $ END
實作練習(一) • 控制一個七段顯示器 LED ,由 0 ~ F 輪流顯示, • 每次顯示時間延遲 1 秒。 • DELAY_10MS • FLOOK_TABLE • 撰寫系統主程式 LED_1 • ISP 線上燒錄並且進行測試
P3 P2 硬體線路
程式架構 - 迴圈 for (index=0;index<count;index++) { Statement; }
查表程式架構 ;================================================ ;BASIC_1 : SEVEN SEGMENT DISPLAY FROM 0 TO F ;101/9/4 by tps COUNTER : 16 (R2) ; INDEX : 00 (R1) ;================================================ EXTRN CODE(FLOOK_TABLE) EXTRN CODE(DELAY_10MS) ORG 00H JMP START START: CLR P3.0 SETB P3.1 SETB P3.2 SETB P3.3
LOOP_2: MOV R1,#00;INDEX MOV R2,#16 ;COUNTER MOV DPTR,#SEG7_TABLE LOOP_1: CALL FLOOK_TABLE MOV P1,R2 MOV R5,#100 CALL DELAY_10MS INC R1 DJNZ R2,LOOP_1 JMP LOOP_2 SEG7_TABLE: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H DB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH END
實作練習(二) • 控制一個排 LED ,進行各種霹靂燈的顯示, • 每次顯示時間延遲 1 秒。 • DELAY_10MS • FLOOK_TABLE • 撰寫系統主程式 LED_2 • ISP 線上燒錄並且進行測試 • LED 接在 P1 上
霹靂燈顯示順序 全亮閃爍三次
霹靂燈顯示順序 Repeat
LED驅動方式 8051 8051 IOL=16mA IOH=400uA ON
實作練習(三) • 偵測指撥開關 DIPSW ,將相對應的訊號顯示在 • LED 上。 • DIPSW (P0 作輸入) • LED (P1作輸出) • 撰寫系統主程式 LED_3 • ISP 線上燒錄並且進行測試 ON DIP
實作練習(四) 密碼鎖設計 • 利用指撥開關 DIPSW 設定八個密碼,分別為 • 4CH, B5H, 89H, 66H, 1EH, 9AH, 15H, 73H • LED 燈將分別點亮 DS0 ~ DS8,其他的碼都是無效碼,所有LED燈都不顯示。 • DIPSW (P0 作輸入) • LED (P1作輸出) • 撰寫系統主程式 LED_4 • ISP 線上燒錄並且進行測試
程式架構 :Switch …. Case MOV A,R1 XOR A,#4CH JNZ LOOP_1 statement 1 MOV A,R1 XOR A,#0B5H JNZ LOOP_2 statement 2 MOV A,R1 XOR A,#89H JNZ LOOP_3 statement 3 LOOP_1: LOOP_2:
查表法程式架構 ;================================================ ;BASIC_4 : A Combination Lock Design ;101/9/4 by tps; ;================================================ EXTRN CODE(FLOOK_TABLE) EXTRN CODE(BLOOK_TABLE) ORG 00H JMP START START: MOV A,P0 MOV R2,A MOV DPTR,#DIP_TABLE MOV R3,#8 CALL BLOOK_TABLE
查表法程式架構 MOV A,R1 XRL A,#0FFH JNZ LOOP_1 MOV P1,#0FFH JMP START LOOP_1: MOV DPTR,#LED_CODE CALL FLOOK_TABLE MOV P1,R2 JMP START LED_CODE: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH DIP_CODE: DB 04CH,0B5H,089H,066H,01EH,09AH,015H,073H END
實作練習(五) 數學運算 Test Mathematic Module 376 (0178) + 174 (AE)= 376 - 174 = 376 x 174 = 65424 376 / 174 = 2.1609… 376 / 174 = 2…28 STEP 1: BCD_HEX (十進制 -> 16進制) STEP 2: Mathematic Operation STEP 3: HEX_BCD (16進制 ->十進制) STEP 4: Display Results on LCD Module