今天學習了中斷,任務是利用中斷進行數制轉換,并利用數碼管顯示轉換前后數字、原理圖放下面
PS:本次進制轉換為16進制轉換為10進制,只是例子
照例先說我的思路:
1. 我在主程序先對P1置零(為了讓十六進制數從0開始)
2. 然后對P1進行加1的操作,并循環以及延時(為了容易看清是否轉換)
3. 配置中斷,開啟外部中斷0,設置觸發方式為電平觸發,開啟中斷總控制(這里的配置務必跟著自己的電路圖來,這里是我電路圖對對應的配置)
4. 編寫中斷子程序,里面對P1做除法,除以0x64H即0x100D配(由于是兩位十六進制最多百位數,所以除以100)為了得到百位數,并將商移到P2(這里剛 好高位為0,不影響)作百位數,并對剩下來的余數進行除10得到新的商,字節內交換后,將交換后新商加上新的余數移入P0,得到十位數和個位數。
5. 退出中斷返回
DIV AB 結果:A/B的商放入A,余數放入B
原理圖:
11.png (42.55 KB, 下載次數: 41)
下載附件
2021-4-29 22:40 上傳
代碼如下:- ORG 00H
- LJMP 30H ;turn to main
- ORG 03H
- LJMP 0200H
-
-
- ORG 30H
- MAIN: MOV P1, #00H ;hex
- MOV P0, #00H ;low2_dec
- MOV P2, #00H ;high1_dec
- SETB EX0 ;open it
- SETB IT0
- SETB EA ;open total switch
- HERE: INC P1
- MOV R7, #0FFH
- DJNZ R7, $
- SJMP HERE
- ORG 0200H
- EXCHANGE:
- MOV B, #64H ;div with 100 for P2-high1_dec
- MOV A, P1
- DIV AB
- MOV P2, A
- MOV A, B ;save remainder;
- MOV B, #0AH ;div with 10 for P0-low2_dec
- DIV AB
- SWAP A
- ADD A, B
- MOV P0, A
- RETI
- END
復制代碼
|