我给你来个程序试试。
- ;====================================================================
- ; 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
复制代码
|