打印
[硬件设计]

C51+8155数字钟

[复制链接]
1067|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
3des|  楼主 | 2016-1-7 09:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
尝试许久,仿真就是没反应,不知哪里有错?
小弟通常用C,汇编不会编,不会编汇编,不知用C语言怎么编下列程序?
看不清可另下电路附件
       ORG 0000H
        AJMP MAIN
        ORG 000BH
        AJMP CLOCK
        ORG  0030H
MAIN:   MOV   SP,#50H ;设置堆栈区
            MOV   DPTR,#PORT ; 8155初始化
             MOV   A,#03H
             MOVX  @DPTR,A
             CLR    F1 ;清0闹钟标志位
             CLR    F0 ;允许计时显示
             MOV   AHOUR,#0FFH ;闹钟值寄存区初值
             MOV   AMIN,#0FFH
             MOV   ASEC,#0FFH
             MOV   R7,#10H ;显示缓冲区、计时缓冲区清0
             MOV   R0,#DISP0
             CLR  A
LOOP:   MOV  @R0, A
            INC   R0
           DJNZ  R7,LOOP
         MOV  TMOD,#01H ;定时器T0初始化
         MOV  TL0, #0B0H
         MOV  TH0, #3CH
         SETB  TR0 ; 启动定时器0
         SETB  EA ; 开中断
         SETB  ET0
BEGIN:  ACALL  ALARM ;调用定时器比较
            ACALL  KEYSCAN ;调用键盘扫描
            CJNE  A,#0AH,NEXT1;是C/R键否?
            CLR  TR0 ;暂停计时
            MOV  R1, #HOUR ;地址指针指向计时缓冲区首地址
            AJMP MOD
NEXT1:  CJNE   A,#0BH ,BEGIN;是ALM键否?
             JB      F1,NEXT2      ;闹钟正在闹响否?
            MOV    R1,#AHOUR   ;地址指针指向闹钟值寄存区首地址
MOD:    SETB   F0             ;禁止显示计时时间
            ACALL  MODIFY        ;调用时间设置/闹钟定时程序
            SETB   TR0 ; 重新开始计时
            CLR     F0 ; 恢复显示计时时间
            AJMP   BEGIN
NEXT2:  SETB   P1.0 ;闹钟正在闹响,停闹
             CLR    F1  ;清0闹钟标志
             AJMP  BEGIN
/*定时器T0中断服务子程序*/
CLOCK: PUSH    PSW
           PUSH     ACC  ;保护现场
           MOV  TL0,#0B7H
           MOV  TH0,33CH  ;重装初值,时间校正
           INC   MSEC
           MOV   A,MSEC
           CJNE  A,#0AH,DONE
           MOV  MSEC,#00H
           MOV  A,SEC
           ADD   A,#01H
           DA     A       ;二-十进制转换
           MOV   SEC,A
           CJNE   A,#60H,DONE
           MOV   SEC,#00H
           MOV   A,MIN
           ADD   A,#01H
           DA     A
           MOV   MIN,A
           CJNE  A,#60H,DONE
           MOV   MIN,#00H
           MOV   A,HOUR
           ADD   A,#01H
          DA     A
          MOV   HOUR,A
          CJNE   A,#24H,DONE
          MOV    HOUR,#00H
DONE:  POP    ACC
            POP    PSW
            RETI
/*键盘设置子程序*/
KEYIN:  PUSH   PSW         ;保护现场
             PUSH   ACC
             SETB   RS1
             MOV    R0,#DISP0  ;R0指向显示缓冲区首地址
             MOV    R7,#06H    ;设置键盘输入次数
L1:       CLR      RS1
           ACALL   KEYSCAN ;调用键盘扫描程序取按下键号
           SETB    RS1
           CJNE    A,#0AH,L2 ;键入数合法性检测(是否大于9)
L2:      JNC     L1   ; 大于9,重新输入
          MOV   @R0,A ;键号送显示缓冲区
          INC     R0
           DJNZ   R7,L1 ;6位时间输入完否?未完继续
           CLR     RS1 ;恢复现场
           POP    ACC
           POP     PSW
           RET
/*定时比较模块*/
ALARM:  MOV   A,ASEC
              CJNE   A,SEC,BACK ; 秒钟单元相同则继续比较,否则返回
              MOV    A,AMIN
              CJNE   A,MIN,BACK ;分钟单元相同则继续比较,否则返回
              MOV    A,AHOUR
              CJNE   A,HOUR,BACK ;小时单元相同定时时间到
              CLR     P1.0 ;启动闹钟鸣叫
              SETB    F1  ;置位闹钟标志
BACK:     RET  













多功能数字钟设计.PDF

109.38 KB

电路图

相关帖子

沙发
3des|  楼主 | 2016-1-7 09:26 | 只看该作者
已知PORT地址为8000H
PORTA为8001H
PORTB为8002H
PORTC为8003H
DISP0地址为30H 初始化值为00H
AHOUR,MIN,SEC,MESC的地址为3CH~3FH,初始化值为00H

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝