CWCCWY 发表于 2014-10-18 17:35:01

求把他弄成hex可执行文件

;系统初始化程序****************************************************
ORG   0000H
                AJMP    MAIN    ;转到系统初始化程序
                ORG   000BH
                AJMP    PITO    ;转到定时器0中断服务程序
                ORG   0100H
          MAIN: MOV   SP,   #60H;确立堆栈区
                MOV   TMOD,   #01H;设定定时器0为工作方式1
                MOV   TL0,    #0DCH;装计数器初值
                MOV   TH0,    #0BH
                CLR   21H.0
                CLR   TR0H    ;TR0置“0”,定时关闭
                SETB    EAH   ;EA置“1”,中断总允许
         SETB    ET0H            ;ET0置“1”,定时器0中断
                                    允许
                MOV   30H,    #10H;循环次数
                MOV   7EH,    #0AH;P.点显示初始化
                MOV   R0,   #79H
                MOV   R1,   #05H
            PP: MOV   @R0,    #0BH
                INC   R0
                DJNZ    R1,   PP
                MOV   R0,   #31H;时、分、秒值存储单元清零
                MOV   R1,   #06H
         Q00: MOV   @R0,    #00H
                INC   R0
                DJNZ    R1,   Q00
;监控程序**********************************************************      
LOOP: LCALL   DIR   ;调显示子程序
                LCALL   KEY   ;调键扫描子程序
         LOOP1: JB      20H.0,KEYA   ;A键是否按下,是跳转到A键功能程序
                JB      20H.1,KEYB   ;B键是否按下,是跳转到B键功能程序
                JB      20H.2,KEYC   ;C键是否按下,是跳转到C键功能程序
JB      20H.3,KEYD   ;D键是否按下,是跳转到D键功能程序
                LCALL   DIR   
                LJMP    LOOP    ;跳转到监控程序
;A键功能子程序****************************************************
          KEYA: CPL   TR0H            ;开启/关闭定时器
                SETB    21H.0
                AJMP    LOOP      ;返回
;B键功能子程序****************************************************
          KEYB: JB      TR0H,    KEYBO    ;定时器是否运行,是跳转
                JNB   21H.0,KEYBOO
                MOV   R0,   #36H   ;时值存储单元地址送R0
                LCALL   DAAD1   ;调加1子程序
                MOV   A,      R3    ;时值加1后的值送累加器A
                XRL   A,      #24H               
JNZ   KEYBO   ;时值是否到24时,否返回
                LCALL   CLR0   ;时值存储单元清零
         KEYBO: MOV   7DH,    35H
                MOV   7EH,    36H
      KEYBOO: LJMP    LOOP   ;返回监控程序
;C键功能子程序****************************************************
          KEYC: JB      8CH,    KEYCO   ;定时器是否运行,否跳转
                JNB   21H.0,KEYCOO
                MOV   R0,   #34H   ;分值存储单元地址送R0
                LCALL   DAAD1   ;调加1子程序
                MOV   A,      R3    ;分值加1后的值送累加器A
                XRL   A,      #60H
                JNZ   KEYCO   ;分值是否到60分,否返回
                LCALL   CLR0   ;分值存储单元清零
         KEYCO: MOV   7CH,    34H
                MOV   7BH,    33H
      KEYCOO: LJMP    LOOP   ;返回监控程序
;D键功能子程序****************************************************
          KEYD: JB      8CH,    KEYDO   ;定时器是否运行,否跳转
                JNB   21H.0,KEYDOO
                MOV   R0,   #32H    ;秒值存储单元地址送R0
                LCALL   DAAD1      ;调加1子程序
                MOV   A,      R3      ;秒值加1后的值送R0
                XRL   A,      #60H
                JNZ   KEYDO    ;秒值是否到60秒,否返回
                LCALL   CLR0    ;秒值存储单元清0
         KEYDO: MOV   79H,    31H
                MOV   7AH,    32H
      KEYDOO: LJMP    LOOP    ;返回监控程序
;中断服务程序******************************************************
          PITO: PUSH   PSW    ;中断服务程序,现场保护            
                PUSH   A
                SETB   RS0    ;选第三组通用寄存器
                SETB   RS1
                MOV       TL0,   #0DCH;计数器重新加载
                MOV       TH0,   #0BH
                MOV       A,   30H;循环次数减1
                DEC       A
                MOV       30H,   A
                JNZ       RETO    ;不满16次,转RET0返回
                MOV       30H,   #10H;满16次开始计时操作
                MOV       R0,    #32H;秒显示单元地址
                ACALL   DAAD1    ;秒加1
                MOV       A,      R3;加1后秒值在R3中
                XRL       A,      #60H;判是否到60秒
                JNZ       RETO    ;不到转RET0返回
                ACALL   CLR0    ;到60秒显示单元清0
                MOV       R0,   #34H;分显示单元地址
                ACALL   DAAD1    ;分加1
                MOV       A,      R3;加1后分值在R3中
                XRL       A,      #60H;判是否到60分
                JNZ       RETO    ;不到转RET0返回
                ACALL   CLR0    ;到60分显示单元清0
                MOV       R0,    #36H;时显示单元地址
                ACALL   DAAD1    ;时加1
                MOV       A,   R3;加1后时值在R3中
                XRL       A,   #24H;判是否到24时
                JNZ       RETO    ;不到转RET0返回
                ACALL   CLR0    ;到24时显示单元清0
          RETO: CLR       RS0    ;返回第0组通用寄存器
                CLR       RS1
                POP       A   ;现场恢复
                POP       PSW
      MOV       79H,   31H;时、分、秒值放缓冲区
                MOV       7AH,   32H
                MOV       7BH,   33H
                MOV       7CH,   34H
                MOV       7DH,   35H
                MOV       7EH,   36H
                RETI      ;中断返回
;加1子程序*******************************************************
         DAAD1: MOV       A,   @R0      ;加1子程序,十位送A
                DEC       R0
                SWAP      A   ;十位数占高4位
                ORL       A,   @R0;个位数占低4位
                ADD       A,   #01H;加1
                DA      A   ;十进制调整
                MOV       R3,    A   ;全值暂存R3中
                ANL       A,   #0FH;屏蔽十位数,取出个位数
                MOV       @R0,   A   ;个位值送显示缓冲单元
                MOV       A,   R3
                INC       R0
                ANL       A,   #0F0H;屏蔽个位数取出十位数
                SWAP      A   ;使十位数占低四位
                MOV       @R0,   A   ;十位数送缓冲单元
                RET       ;返回
          CLR0: CLR      A   ;清缓冲单元子程序
                MOV      @R0,    A   ;十位缓冲单元清“0”
                DEC      R0
                MOV      @R0,    A   ;个位数缓冲单元清“0”
                RET       ;返回
         
;键盘扫描子程序***************************************************
         KEY: LCALL   KEYCHULI   ;调键值处理子程序
                JZ      EXIT    ;没有键按下转到返回
                LCALL   DIR
                LCALL   DIR   ;调显示去抖动
                LCALL   KEYCHULI   ;调键值处理子程序
                JZ      EXIT    ;没有键按下转到返回
                MOV   B,      20H;保存键值
         KEYSF: LCALL   KEYCHULI   ;调键值处理子程序
                JZ      KEY1    ;键释放,转到恢复键值
                LCALL   DIR   ;调显示子程序延时
                AJMP    KEYSF    ;等到键释放
          KEY1: MOV   20H,    B   ;键值送20H单元保存
          EXIT: RET       ;返回
      KEYCHULI: PUSH    PSW   ;保护现场
                CLR   RS1   ;改变寄存器组号
                SETB    RS0
                MOV   P1,   #0FFH;先向P1口写1
                MOV   A,      P1   ;P1口值送累加器A
                CPL   A   ;A值取反
                ANL   A,      #0FH;保存P1口的低4位
                MOV   20H,    A   ;A值送20H保存
                CLR   RS1   ;改变寄存器组号
                CLR   RS0
                POP   PSW   ;恢复现场
                RET
;显示子程序********************************************************
         DIR: PUSH    PSW                ;恢复现场
                SETB    RS1      ;改变寄存器组号
                CLR   RS0
                MOV   R0,   #79H;建立显示缓冲区首地址
                MOV   R3,   #0FBH;设置位控码
         LD0: MOV   P2,   R3   ;送位控码
                MOV   A,      @R0;缓冲区值送累加器A
         DISP1: ADD   A,      #1BH
                MOVC    A,      @A+PC;取段控码并送A中
         DISP2: MOV   P0,   A   ;送段控码
                MOV   R2,   #09H;设置延时循环次数
                ACALL   DEY   ;延时点亮
                INC   R0   ;缓冲区地址加1
                MOV   A,      R3   ;位控码送A
                JNB   ACC.1,HERE;是否到最高位,是转到返回
                JBACC.5,LD2
RL    A
RL      A   ;不到向显示器高位移位
            LD2:RL    A
MOV   R3,   A   ;位控值保存到R4中
                AJMP    LD0   ;继续扫描
          HERE: CLR   RS0   ;改变寄存器组号
                CLR   RS1
                POP   PSW   ;恢复现场
                RET       ;返回
         DBB: DB      0C0H
                DB      0F9H
                DB      0A4H
                DB      0B0H
                DB      99H
                DB      92H
                DB      82H
                DB      0F8H
                DB      80H
                DB      90H
                DB      0CH
                DB      0FFH
      
;延时子程序********************************************************
DEY:PUSH    12H
DEY0:PUSH    12H
DEY1:PUSH    12H
DEY2:DJNZ    R2,    DEY2
POP   12H
DJNZ    R2,    DEY1
POP   12H
DJNZ    R2,    DEY0
POP   12H
DJNZ   R2,   DEY
RET
END





联系qq1527895421

页: [1]
查看完整版本: 求把他弄成hex可执行文件