赞
踩
求把以下程序从汇编语言转换成C语言
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP PINT0
ORG 000BH
LJMP TINT
ORG 0200H
MAIN: MOV IE,#81H ;CPU开放中断,INT0允许中断
SETB IT0 ;外部中断为边沿触发方式
MOV SP,#30H ;指针入口地址
SETB P3.0
CLR P3.1
MOV P1,#0FFH ;使P1口全部置1
MOV P2,#00H ;P2口清零
CLR P1.2
LP: JNB P1.0,LA ;监测输入信号,是否有输入信号
LA: ACALL DELAY ;延时消抖
JNB P1.0,ALARM ;再次监测输入信号,若有输入信号转入报警子程序
AJMP LP
DELAY:MOV R1,0AAH
LD2:MOV R2,0BBH
LD1:NOP
DJNZ R2,LD1
DJNZ R1,LD2
RET
ALARM:SETB P1.2 ;开始报警使运行正常绿指示灯熄灭,红灯和声报警启动
CPL P3.0
;10S钟定时:
MOV 51H,#14H ;10S循环次数
MOV TMOD,#01H ;定时器T0定时 方式1
MOV TL0,#0CEH ;置50ms定时初值
MOV TH0,#0FFH
SETB ET0
SETB EA
SETB TR0 ;启动T0
TINT: CPL P3.1
MOV TL0,#0CEH
MOV TH0,#0FFH ;启动T0
L2:JBC TF0,L1 ;查询记数溢出
SJMP L2
L1: MOV TL0,#0CEH
MOV TH0,#0FFH
SETB P3.0 ;10s到关闭报警
CPL P3.0
CLR P1.2 ;报警结束,正常运行绿指示灯亮
LJMP LP ;循环,继续工作
2. 外部中断INTO服务程序:
PINT0: CLR EX0 ;外部中断0服务程序开始,屏蔽外部中断
PUSH PSW
PUSH ACC
JNB P3.2,LN ;监测是否有中断输入
LN: LCALL DELAY ;延时消抖
JNB P3.2,LN1
AJMP LN2 ;无中断输入,中断返回
LN1: SETB P3.0
CLR P3.1
CLR P1.2 ;使报警结束,绿指示灯亮
POP ACC
POP PSW
SETB EX0 ;开放外部中断0
LCALL LP ;在中断继续检测是否有输入信号
LN2: RETI
END
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。