我給你來個程序試試。
Intrrupt001.png (115.37 KB, 下載次數: 28)
下載附件
2023-9-24 13:33 上傳
- ;====================================================================
- ; Main.asm file generated by New Project wizard
- ; Compiler: ASEM-51 (Proteus)
- ;====================================================================
- $NOMOD51
- $INCLUDE (8051.MCU)
- ;====================================================================
- ; DEFINITIONS
- ;====================================================================
- LED1 BIT P1.0
- LED2 BIT P1.1
- LED3 BIT P1.2
- LED4 BIT P1.3
- ;====================================================================
- ; VARIABLES
- ;====================================================================
- CNT1 DATA 60H ;儲存器的絕對地址。
- ADDR1 DATA 62H
- ADDR2 DATA 64H
- ADDR3 DATA 66H
- ADDR4 DATA 68H
- ;====================================================================
- ; RESET and INTERRUPT VECTORS
- ;====================================================================
- ; Reset Vector
- org 0000h
- jmp Start
- ; Timer 0 Vector
- org 000Bh
- jmp Tim0
- ;====================================================================
- ; CODE SEGMENT
- ;====================================================================
- org 0100h
- Start:
- USING 0
- MOV SP, #40H ;堆棧指針指向內部數據存儲器的堆棧區。
- TIMER0_INIT: ;1毫秒@12.000MHz
- ; ANL AUXR,#7FH ;定時器時鐘12T模式
- ANL TMOD,#0F0H ;設置定時器模式
- ORL TMOD,#01H ;設置定時器模式
- MOV TL0,#018H ;設置定時初始值
- MOV TH0,#0FCH ;設置定時初始值
- CLR TF0 ;清除TF0標志
- SETB TR0 ;定時器0開始計時
- SETB ET0 ;使能定時器0中斷。
- SETB EA ;使能中斷總開關。
- MOV DPTR, #L1 ;16位的地址復制到數據指針DPTR寄存器中。
- MOV ADDR1, DPH ;將高八位的地址,復制到 ADDR1 內部RAM的地址。
- MOV ADDR1+1, DPL ;將低八位的地址,復制到 ADDR1 內部RAM的地址。
- MOV DPTR, #L2 ;16位的地址復制到數據指針DPTR寄存器中。
- MOV ADDR2, DPH ;將高八位的地址,復制到 ADDR2 內部RAM的地址。
- MOV ADDR2+1, DPL ;將低八位的地址,復制到 ADDR2 內部RAM的地址。
- MOV DPTR, #L3 ;16位的地址復制到數據指針DPTR寄存器中。
- MOV ADDR3, DPH ;將高八位的地址,復制到 ADDR3 內部RAM的地址。
- MOV ADDR3+1, DPL ;將低八位的地址,復制到 ADDR3 內部RAM的地址。
- MOV DPTR, #L4 ;16位的地址復制到數據指針DPTR寄存器中。
- MOV ADDR4, DPH ;將高八位的地址,復制到 ADDR4 內部RAM的地址。
- MOV ADDR4+1, DPL ;將低八位的地址,復制到 ADDR4 內部RAM的地址。
- ; Write your code here
- Loop:
- jmp Loop
- L1: ;測試子程序
- CPL LED1
- NOP
- NOP
- SJMP L1
- L2: ;測試子程序
- CPL LED2
- NOP
- NOP
- NOP
- SJMP L2
- L3: ;測試子程序
- CPL LED3
- NOP
- NOP
- NOP
- NOP
- SJMP L3
- L4: ;測試子程序
- CPL LED4
- NOP
- NOP
- NOP
- NOP
- NOP
- SJMP L4
- Tim0:
- MOV TL0,#018H ;設置定時初始值
- MOV TH0,#0FCH ;設置定時初始值
- POP ACC ;之前的調入地址出棧
- POP ACC ;丟掉之前的調入地址
- MOV A, CNT1 ;
- MOV R0, #ADDR1+1 ;
- ADD A, R0 ;計算下一個調入地址。
- MOV R0, A ;
- MOV A, @R0 ;
- PUSH ACC ;裝載低位地址入棧
- MOV A, CNT1 ;
- MOV R0, #ADDR1 ;
- ADD A, R0 ;
- MOV R0, A ;
- MOV A, @R0 ;
- PUSH ACC ;裝載高位地址入棧
-
- INC CNT1 ;計速器遞增
- INC CNT1 ;
- ANL CNT1, #07H ;不要超過7
- RETI ;中斷返回
- ;====================================================================
- END
復制代碼
|