求汇编语言转变成成语言

2019-07-16 21:12发布

ORG  0000H      LJMP MAIN       ORG 0003H      LJMP PINT0      ORG 0200HMAIN: MOV  IE,#81H  ;CPU开放中断,/INT0允许中断      SETB  IT0     ;外部中断为边沿触发方式      MOV SP,#30H   ;指针入口地址      MOV R0,#00H      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  ;再次监测输入信号,若有输入信号转入报警子程序      AJMPLPDELAY:MOV R1,0AAH  LD2:MOV R2,0BBH  LD1:NOP      DJNZ R2,LD1      DJNZ R1,LD2      RETALARM:SETB P1.2 ;开始报警使运行正常绿指示灯熄灭,红灯和声报警启动      MOVA,#00H       INC R0  ;报警次数加一      CJNER0,#0AH,LP1      MOVR0,#00HLP1:MOV  A,R0     ;显示报警次数      MOVDPTR,#TAB       MOVCA,@A+DPTR      MOVP2,A        TAB:  DB 3FH,06H,5BH,4FH      DB66H,6DH,7DH,07H      DB7FH,6FH;10S钟定时:      MOV 50H,#14H   ; 1S循环次数20     MOV 51H,#0AH   ; 10S循环次数     MOV TMOD,#01H  ; 定时器T0定时方式1     MOV TL0,#0B0H  ;置50ms定时初值     MOV TH0,#3CH     SETB TR0       ;启动T0  L2:JBC TF0,L1     ;查询记数溢出     SJMP L2   L1:CPL P3.0     CPL P3.1     MOV TL0,#0B0H  ;重新赋值     MOV TH0,#3CH     DJNZ 50H,L2    ;未到1S继续循环     CPL P3.0     CPL P3.1     MOV 50H,#14H     DJNZ 51H,L2   ;未到10S继续循环     SETB P3.0      ;10s到关闭报警     CLR P3.1           CLR P1.2   ;报警结束,正常运行绿指示灯亮     LJMP LP   ;循环,继续工作     END      其中,10秒钟的定时采用定时器T0定时工作在方式1 ,单片机晶振Fosc=12MHz,所以机器周期T=12×t0=12×(1/12MHz)=1us设定时器T0初始值为X,则:(2∧16-X)×1us=50ms 从而可知定时器T0初始值X= 65536-50000=15536=3CB0H,在此用50H、51H单元分别进行1秒和10秒的计数,它们内的赋值分别为14H、0AH,T0的初值置为TL0=0B0H、TH0=3CH。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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。