急求单片机一个编程题,汇编语言,在线等

2024-12-02 10:03:36
推荐回答(4个)
回答1:

ORG 0000H
LJMP MAIN;跳转到主函数
LJMP ISREX0;跳转到外中断0
ORG 000BH
LJMP ISRTIMER0;跳转到定时器0
ORG 0030H
MAIN: ;主函数入口
MOV R7,#0A0H;R7作为10S的计时器,定时器中断62.5ms X 160
MOV SP,#60H;设置堆栈
MOV TH0,#0BH;定时器初始化,12MHz@12T下,为62.5ms
MOV TL0,#0DCH
MOV TMOD,#01H;定时器工作于方式1,16位
SETB ET0;允许定时器中断
SETB EX0;允许外中断0开启
SETB IT0;外中断0为下降沿触发
SETB EA ;开总中断
LJMP $;后续事务由两个中断完成
ORG 0050H
ISREX0: ;外中断入口
CPL P0.0 ;马上取反P0.0--P0.0就是LED灯
MOV TH0,#0BH;重置定时器
MOV TL0,#0DCH
RETI ;外中断结束
ISRTIMER0:
MOV TH0,#0BH ;重置定时器
MOV TL0,#0DCH
DJNZ R7,CPLLS ;R7自减1,如果不为是,说明不到10s,中断返回
RETI
CPLLS: ;如果R7为0,说明10s到了
MOV R7,#0A0H ; 把R7重新赋值为160
CPL P0.0 ;取反P0.0
RETI
END

回答2:

;下列程序,最简单了:
ORG 0000H
LJMP MAIN
JMP X0_INT
ORG 000BH
JMP T0_INT
MAIN:
MOV TMOD, #01H ;T0定时方式1
MOV TH0, #3CH ;50ms@12MHz
MOV TL0, #0B0H
SETB TR0 ;启动
SETB IT0 ;INT0下降沿触发
MOV IE, #10000011B;允许中断
MOV R2, #200 ;10s
JMP $
;--------------------------------------------
X0_INT: ;外中断
MOV R2, #1
;--------------------------------------------
T0_INT: ;50ms中断一次
MOV TH0, #3CH ;50ms@12MHz
MOV TL0, #0B0H
DJNZ R2, T0_EXIT ;不到10s转移
MOV R2, #200 ;10s
XRL P1, #255
T0_EXIT:
RETI
;--------------------------------------------
END

回答3:

自己动手,工作不愁!

回答4:

ORG 0000H
LJMP MAIN
ORG 0003H
LJMP EX0INT
ORG 0013H
LJMP EX1INT
ORG 0030H
MAIN:
MOV SP,#5FH
SETB EA
SETB EX0
SETB EX1
SETB IT0
SETB IT1
MOV A,#00H
LOOP:
CPL A
MOV P0,A
LCALL DELAY10S
SJMP LOOP
DELAY10S:
MOV R2,#200
DELAY1:
MOV R3,#100
DELAY2:
MOV R4,#250
DJNZ R4,$
DJNZ R3,DELAY2
DJNZ R2,DELAY1
RET
EX0INT:
CPL A
MOV P0,A
RETI
EX1INT:
CPL A
MOV P0,A
END