1 / 40

Keil _51 晶片程式設計

Keil _51 晶片程式設計. China Institute of Technology Edited by Associated Professor Pu-Sheng Tsai. 程式記憶體 (ROM). 存放本文程式的機械碼 (machine code) 存放程式中所需要的表格資料 MOV A,#_ 07H _ (OFFSET) MOV DPTR,#SEG7_TABLE MOVC A ,@A+DPTR MOV DPTR,#0FFE0H MOVX @DPTR,A SEG7_TABLE:

Download Presentation

Keil _51 晶片程式設計

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Keil_51 晶片程式設計 China Institute of Technology Edited by Associated Professor Pu-Sheng Tsai

  2. 程式記憶體 (ROM) • 存放本文程式的機械碼(machine code) • 存放程式中所需要的表格資料 MOV A,#_07H_ (OFFSET) MOV DPTR,#SEG7_TABLE MOVCA,@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

  3. 資料記憶體 (RAM) X X O X O X O X O X

  4. 資料記憶體 (RAM) • 30H ~ 7FH: 一般 RAM 區間 • Addressing: 針對 Memory 之存取方式 • Direct Addressing : MOV 30H, #30H • Indirect Addressing: MOV R0,#30H MOV @R0,#30H RAM : 1DH

  5. 程式模組: 將30H~7FH的資料記憶體依次寫入#AAH資料 MOV A, #0AAH MOV R0 , #30H (Index) MOV R1 , #80 (Counter) L1: MOV @R0, A INC R0 DJNZ R1 , L1 RET

  6. MCS_51 時脈分析 • 振盪週期: 外部振盪器 2MHz ~ 16MHz 一個基頻時脈為一個相位 • 狀態週期: 兩個相位(P1,P2)構成一個狀態 • 機械週期: 六個狀態(S1~S6)構成一個機械週期 • 指令週期: 每執行一條指令所需機械週期 State Cycle, Machine Cycle, Instruction Cycle

  7. DELAY_0.1MS: • Function: delay R4*0.1ms time • Input: R4 delay_01ms: MOV R3,#48 (1) NOP DJNZ R3,$ (2) DJNZ R4,delay_01ms(2) RET(1) (1+1+2*48+2)*R4=100us*R4=0.1ms*R4

  8. DELAY_10MS: • Function: delay R5*10ms time • Input: R5 delay_10ms: MOV R4,#100 (1) delay1: MOV R3,#48 (1) NOP DJNZ R3,$ (2) DJNZ R4,delay1(2) DJNZ R5, delay_10ms RET (1+(1+1+2*48+2)*100+2)*R5 =10ms* R5

  9. FLOOK_TABLE: • Function: forward look table (index->code) • Input: R1……index, DPTR……表格資料 • Output: R2……code Flook_table: MOV A,R1 MOVC A,@A+DPTR MOV R2,A RET

  10. BLOOK_TABLE: • FUNCTION: BACKWARD LOOK TABLE (CODE -> INDEX) • INPUT : R2 -> CODE, • DPTR -> TABLE, • R3 -> TABLE SIZE • OUTPUT : R1 -> INDEX; • BLOOK_TABLE: • MOV R1,#00H • BL1: • MOV A,R1 • MOVC A,@A+DPTR

  11. BLOOK_TABLE(Coun.) • XRL A,R2 • JNZ BL2 • JMP BL3 • BL2: • INC R1 • DJNZ R3,BL1 • MOV R1,#0FFH • BL3: • RET • END

  12. 2.8模組之設計(I) EXTRN CODE(YYY) (呼叫YYY外部模組) PUBLIC XXX(宣告XXX為可供外部呼叫之模組) ROM SEGMENT CODE (共享 ROM空間) RSEG ROM XXX: (模組名稱標記) : CALL YYY : RET (模組程式結束用 RET) END (宣告結束)

  13. 2.8主程式之設計(II) EXTRN CODE(YYY) ;RAM DEFINE LED_BUFFER EQU 30H LED_INDEX EQU 38H • ORG 00H JMP START START: LCALL YYY : JMP $ END

  14. MCS_51 輸入/輸出埠(1) • 雙向性 • 每條 I/O 線均可獨立設定為輸入或輸出 • PORT0(80H): 真正雙向I/O埠, MOV PO,#FFH 具有高阻抗浮接特性, 可共用Bus(?) 擴充外部記憶體時, 除了送出低八位元位 址外,還做為資料匯流排使用 • PORT(90H):擬似雙向I/O埠,作為I/O線使用

  15. MCS_51 輸入/輸出埠(2) • PORT2(A0H): 除了作為一般I/O線外, 擴充外部記憶體時, 可作為高八位元位址線 • PORT3(B0H): 每條I/O線可作多工切換 P3.0:RXD, P3.1:TXD, P3.2: P3.3: , P3.4: T0, P3.5: T1 P3.6: , P3.7:

  16. TEST.ASM: 設計一段程式將資料記憶體30H~7FH內容均設為 #30H~7FH. 每隔 1S由 P1送出七段顯示碼(0~F) • ORG 00H • ACALL INIT • L2: • MOV R6,#16 • MOV R1,#00H • MOV DPTR,#SEG_TABLE • L1: • ACALL FLOOK_TABLE • MOV P2,R2 • MOV R5,#100 • ACALL DELAY_10MS • INC R1 • DJNZ R6,L1 • JMP L2

  17. 2.7 Home Work (I): Library Form • 針對課堂上所設計的 BASIC.ASM 程式,利用Keil 整合環境進行模擬, 並回答以下幾個問題 • 這個程式佔有多大記憶空間? • Seg7_table表格的起始位址為何? • 三個副程式, FLOOK_TABLE, DELAY_01MS, INIT_RAM 起始位址為何? 分別佔有多大記憶空間? • 程式執行完畢後, DPTR暫存器的內容為何?

  18. ANS FOR HW(1) • DELAY_10MS: • FLOOK_TABLE : • INIT_RAM : • Main Prog. :

  19. 2.7 Home Work (II) • 驗證 Text Book中常用模組, 是否正確? 5. ADD_16BIT, 6. SUB_16BIT, 7. MUL_16BIT, 8. DIV_16BIT, 10. HEX_BCD16 11. BCD_HEX16

  20. 步驟: • (A) : 參考 Text Book Page 174~196 • (B) : 任意選擇二個10進位的無號數,透過 BCD_HEX16 模組轉換成二個16進位的無號數。251, 214 => FBH, D6H • (C) : 將兩個16進位的無號數,透過 ADD_16BIT、SUB_16BIT、MUL_16BIT、DIV_16BIT 等運算。 • (D) : 最後將 (C) 所得到的結果,透過 HEX_BCD16 模組轉換為 10 進位的答案,並與手算結果比較是否相同 ? • (E) : 至少選擇兩組數據,針對加、減、乘、除作驗証。

  21. 2.7 Home Work (III) • V1=[10,12,2,13,4,5,2] • V2=[27,6,14,24,13,12,3] • 為兩個 Vector, • 求 V=V1。V2 • 作業信箱: tsaipusheng@gmail.com • 繳交期限: 2007/10/31. PM 12:00 • 主旨: 96 Keil_51 游嘉輝 96133004

  22. ADD_16BIT • (7FH) (7EH) • + (7DH) (7CH) INPUT • ------------------------------------------------- • (7BH) (7AH) OUTPUT • MOV 7FH,#00H • MOV 7EH,#FBH, 16BIT 被加數 • MOV 7DH,#00H • MOV 7CH,#D6H, 16BIT 加數 • CALL ADD_16BIT • (7BH) = 01H, (7AH)= D1H

  23. BCD_HEX • (7DH) (7CH) (7BH) INPUT • (7FH) (7EH) OUTPUT • MOV 7DH,#06H • MOV 7CH,#55H • MOV 7BH,#36H • CALL BCD_HEX • (7FH)=FFH, (7EH)=FFH

  24. 2.7 Home Work (IV) : 程式測試 • 驗證 Text Book中常用模組, 是否正確? 至少舉兩個數值範例作驗證. 模組 1:ADD_16BIT, 模組 2:SUB_16BIT, (7FH)(7EH) (7FH)(7EH) + (7DH)(7CH) - (7DH)(7CH) (7BH)(7AH) (7BH)(7AH)

  25. 2.7 Home Work (IV) : 程式測試 模組 3: MUL_16BIT, (7FH)(7EH) * (7DH)(7CH) (7BH) (7AH)(79H)(78H) 模組 4: DIV_16BIT, (7FH)(7EH) / (7DH)(7CH) = (7BH) (7AH) ….. (79H)(78H)

  26. 2.7 Home Work (IV) : 程式測試 • 模組 五: HEX_BCD16, INPUT : (7FH)(7EH) – HEX CODE OUTPUT: (7DH)(7CH)(7BH) – BCD CODE • 模組 六: BCD_HEX16, INPUT: (7DH)(7CH)(7BH) – BCD CODE OUTPUT : (7FH)(7EH) – HEX CODE

  27. Note: MCS_51 Family • Mask ROM : 8051 (原廠作 mask) • PROM(OPT): 87C51 • EPROM : 8751(電子12V寫入, 紫外線清除) • EEPROM : 8951 (電子12V寫入,電子清除) • Flash ROM : 89S51 (電子5V寫入,電子清除) • ROMless: 8031 (cheap) • Atmel: ISP(In System Programming) 必需具備 Flash ROM, 以 Batch 型式燒錄, 燒錄速度較 EEPROM 快

  28. Note: MCS_51 搬移指令 • MOV : 搬移 RAM 內資料 • MOVC : 搬移 ROM 內資料 • MOVX : 搬移外部記憶體內資料 • 89S51 : 4K, 89S52 : 8K (ROM) • Addressing :0000H ~ 0FFFH (4K) • 0000H ~ 1FFFH (8K) • 0000H ~ FFFFH (64K)

  29. Note: • MCS_51 內所有暫存器均為八位元,除了 DPTR 為 16 位元, 存放表格名稱. • MCS_51 利用 P0 與 P2 作外部程式擴充, 最多可以擴充至 64K, (0000H~FFFFH) • (O) MOV A,#100 (10進位資料) • (X) MOV R1,#100H (16進位資料) • (O) MOV 30H,#10101010B (2進位) • 89S51 : 128 Bytes (RAM, 00H~7FH)

  30. Note: RAM Structure • 00H ~ 1FH : Register (暫存器) Area • 20H ~ 2FH : 可位元定址區 Bit Addressing • 30H ~ 7FH : Memory (記憶體) • 80H ~ FFH : Special Function Register • RS1 RS0 Register Select Name • 0 0 RB0 R0~R7 • 0 1 RB1 R0~R7 • 1 0 RB2 R0~R7 • 1 1 RB3 R0~R7

  31. Note: Instruction Set • setb bit ; bit=1 • clr bit ; bit=0 • RBn Register Bank n • SETB RS1 • CLR RS0 • MOV R6,#45H • JB BIT,LOOP1; BIT=1 JMP LOOP1 • JNB BIT,LOOP2; BIT=0 JMP LOOP2 RAM: 16H

  32. Note: • Indirect Addressing : R0, R1 • MCS_51外部振盪器採用 12MHz, osc. cycle= 1/12M = 1/12 us state cycle=1/6M = 1/6 us machine cycle=1/1M = 1us MUL AB, DIV AB 所需時間均為 = 4us instruction cycle = 4us

  33. Note: • Keil : MODULE : ASM : BASIC • KEY • TLCD • ADC • UART • C • SYSTEM : ASM : BASIC • KEY • TLCD • ADC • C

  34. Note: • MODULE: 模組程式本身無法執行, 祇能宣告成被主程式呼叫之用(彈性) • SYSTEM :系統程式可以被 Compiler and Link 成 *.HEX 檔, 且可以被燒錄至晶片執行 • Delay 26ms (Input Reg. = R4) MAX:25.5ms • MOV R4, #260 • CALL DELAY_01MS

  35. Note: • Delay 1s (Input Reg. = R5) • MAX:2.55s • MOV R5, #100 • CALL DELAY_10MS • 共陽極七段顯示碼 • 0:C0H, 1:F9H, 2:A4H, 3:B0H, 4:99H, 5:92H, 6:82H, 7:F8H, 8:80H, 9:90H

  36. Note: FLOOK_TABLE 用法 MOV R1,#9 MOV DPTR,#SEG7_TABLE CALL FLOOK_TABLE R2=99H SEG7_TABLE: DB 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H,0F8H, 80H, 90H • PUBLIC, EXTRN, END, EQU 為假指令, 在組譯過程中只負責宣告, 無法產生機械碼(machine code)

  37. Note: • ISP-30A 燒錄程式 • ek51v701 : Keil_51 2K 試用版 • Cybernox. Keil. C51. v8.01 正常版

  38. 3 25 76 • + 2 96 45 • 6 22 21 BCD_HEX16 -> ADD_16BIT HEX_BCD16 MOV 7DH,#03H MOV 7CH,#25H MOV 7BH,#76H CALL BCD_HEX16 MOV 79H,7FH MOV 78H,7EH

  39. MOV 7DH,#02H MOV 7CH,#96H MOV 7BH,#45H CALL BCD_HEX16 MOV 7DH,79H MOV 7CH,78H CALL ADD_16BIT MOV 7FH,7BH MOV 7EH,7AH CALL HEX_BCD16 JMP $ ANS: 7DH=06H, 7CH=22H, 7BH=21H

More Related