单片机定时器中断实验 程序(汇编语言)不要c语言的

开机后第一秒钟L0,L2亮,第二秒钟L1,L3亮,第三秒L4,L6亮,第四秒钟L5,L7亮,第五秒L0,L2,L4,L6亮,第六秒钟,L1,L3,L5,L7亮,第七秒钟八个二极管全亮,第八秒钟全灭,以后循环下去
晚上实验啊,哪位好心人帮做一下,只有二十分了

下列程序,已经经过实验,可以满足题目要求.
ORG 0000H
SJMP MAIN
ORG 000BH
SJMP T0_INT
MAIN:
MOV TMOD, #01H ;T0定时方式1
MOV TH0, #(65536-50000) / 256 ;定时50ms@12MHz
MOV TL0, #(65536-50000) MOD 256 ;
SETB TR0 ;启动T0
MOV IE, #82H ;开中断
;第一秒钟L0,L2亮,第二秒钟L1,L3亮,第三秒L4,L6亮,第四秒钟L5,L7亮,
;第五秒L0,L2,L4,L6亮,第六秒钟,L1,L3,L5,L7亮,第七秒钟八个二极管全亮,第八秒钟全灭.
MOV 30H, #11111010B
MOV 31H, #11110101B
MOV 32H, #10101111B
MOV 33H, #01011111B
MOV 34H, #10101010B
MOV 35H, #01010101B
MOV 36H, #00000000B
MOV 37H, #11111111B
MOV R0, #30H
MOV R7, #20
M_LOOP:
SJMP M_LOOP ;无限循环
T0_INT:
MOV TL0, #(65536-50000) MOD 256 ;
MOV TH0, #(65536-50000) / 256 ;定时50ms@12MHz
DJNZ R7, T0_END
MOV R7, #20
MOV P1, @R0
INC R0
CJNE R0, #38H, T0_END
MOV R0, #30H
T0_END:
RETI
END ;完
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-18
开机
初始化定时器,定时1s
启动定时器
t1=1,L0,L2输出高
t1=2,L1,L3输出高,
.......
分少啊
C块,汇编就算了
第2个回答  2011-05-19
;假定晶振频率12M
;假定P1口对应接8个LED,且高电平有效
;MCU:8051系列

CONT_DISP EQU 30H ;定义查表的计数变量,用于8个LED灯的显示状态
CONT_INT EQU 31H ;定义中断间隔的计数变量,用于控制20个中断为1秒的时间间隔

ORG 00H
AJMP GO
ORG 0BH
AJMP INT0_1 ;定时器0,工作方式1

GO:
MOV SP,#60H
MOV P1,#00H ;P1口初始全部关闭
MOV CONT_DISP,#8 ;查表取LED点亮状态,注意此处为了减少变量,查表采用从尾到首的顺序,所以初始值为表末位数
MOV TMOD,#01H ;定时器工作方式1
MOV TH0,#0BH
MOV TL0,#3CH ;计数器初始设定,中断间隔为50ms
SETB TR0
SETB ET0
SETB EA ;计数器开始工作
LOOP: ;以下几句为不断为P1口送值,点亮相应的LED
MOV A,CONT_DISP
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
AJMP LOOP
;----------------以下为中断处理程序---------------
INT0_1:
PUSH ACC ;保护现场
MOV TH0,#0BH
MOV TL0,#3CH ;定时器初值重装
DJNZ CONT_INT,RETINT
MOV CONT_INT,#20 ;20个中断判定
DJNZ CONT_DISP,RETINT ;每20个中断,即1秒,查表数减1
MOV CONT_DISP,#8 ;到1再循环
RETINT:
POP ACC
RETI

TAB:
NOP
DB 00H,0FFH,0AAH,55H,0A0H,50H,0AH,05H ;注意此表为从尾倒查式, 上面一句NOP不可少.

END