微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 小白求大神们帮忙看下为何程序没错但是仿真出错

小白求大神们帮忙看下为何程序没错但是仿真出错

时间:10-02 整理:3721RD 点击:
以下是音乐提示定时器的源程序,我把程序下载到开发板上但是却不能用,求大神们帮忙看看 ORG 0000H
        AJMP MAIN
             ORG 000BH
        LJMP TIMER0_INT
             ORG 001BH
             LJMP TIMER1_INT
        ORG 0030H
SAVE: DB 00H , 00H , 00H , 00H ,00H , 00H  ;预留空间备用
MAIN:    CLR F0                   ;清零用户标志位
        MOV 33H , #5H              ;默认5分钟倒计时
        S1 BIT P2.0     ;标号位地址 便于编程、阅读和接线
        S2 BIT P2.1           ;P1口 显示输出
        S3 BIT P2.2     ; S?为矩阵键盘列
        S4 BIT P2.3
        H1 BIT P2.4     ; H?为矩阵键盘行
        H2 BIT P2.5
        H3 BIT P2.6
        H4 BIT P2.7
        W1 BIT P0.0     ; W?为矩阵 7段数码管 位选
        W2 BIT P0.1
        W3 BIT P0.2
        W4 BIT P0.3
        SETB W1
        SETB W2
        SETB W3
        SETB W4
              BELL BIT P3.7
MAIN1:  LCALL CHECK_KEYDOWN   ;键盘扫描子程序
               LCALL TIME_COUNTDOWN_VALUE ;倒计时初值子程序
             AJMP MAIN1
;*********************************************************
;子程序 集
;键盘扫描子程序
CHECK_KEYDOWN:
              LCALL SHOW      ;显示子程序
NOKEY0:  MOV P2 , #0FFH    ;扫描第一行
        CLR H1
        LCALL KEYDOWN   ;扫描键盘按下子程序
        JZ    NOKEY1
        LCALL SHOW
        MOV P2 , #0FFH
        CLR H1
        LCALL KEYDOWN
        JZ    NOKEY1
        MOV  31H , #00H
        LJMP NOKEY4
NOKEY1:  MOV P2 , #0FFH     ;扫描第二行
        CLR H2
        LCALL KEYDOWN
        JZ    NOKEY2
        LCALL SHOW
        MOV P2 , #0FFH
        CLR H2
        LCALL KEYDOWN
        JZ    NOKEY2
        MOV 31H , #04H
        LJMP NOKEY4
NOKEY2:  MOV P2 , #0FFH  ;扫描第三行
        CLR H3
        LCALL KEYDOWN
        JZ    NOKEY3
        LCALL SHOW
        MOV P2 , #0FFH
        CLR H3
        LCALL KEYDOWN
        JZ    NOKEY3
        MOV 31H , #08H
        LJMP NOKEY4
NOKEY3: MOV P2 , #0FFH  ;扫描第四行
        CLR H4
        LCALL KEYDOWN
        JZ    NOKEY4
        LCALL SHOW
        MOV P2 , #0FFH
        CLR H4
        LCALL KEYDOWN
        JZ    NOKEY4
        MOV 31H , #0CH
NOKEY4: JB F0 , MUSIC     ;用户标志位 为 1 则 播放音乐
        JZ  CHECK_KEYDOWN
        LCALL CHECK    ;键盘 列扫描 子程序
        ADD  A , 31H    ;至此可以知道0-F中的哪个键被按
;下键值存A中保存
RET
;*********************************************************
;扫描键盘按下子程序
KEYDOWN:    MOV A,P2          ;检查是否有键被按下
            ANL A,#0FH              ;有键按下A不为0
            XRL A,#0FH
RET
;*********************************************************
;键盘 列扫描 子程序
CHECK:  CJNE A , #01H , ZERO ;第一列被按下?
             MOV  A , #00H
        LJMP OVER
ZERO:          CJNE A , #02H , ONE  ;第二列被按下?
        MOV  A , #01H
        LJMP OVER
ONE:            CJNE A , #04H , TWO  ;第三列被按下?
             MOV  A , #02H
        LJMP OVER
TWO:          CJNE A , #08H , OVER  ;第四列被按下?
        MOV  A , #03H
OVER:   RET
;*********************************************************
;倒计时初值子程序
TIME_COUNTDOWN_VALUE:
LED0:        CJNE A , #00H , LED1     ;30H中存放倒计时时间值
           MOV 30H , #5
           LJMP LED4
LED1:        CJNE A , #01H , LED2
           MOV 30H , #10
           LJMP LED4
LED2:        CJNE A , #02H , LED3
           MOV 30H , #20
           LJMP LED4
LED3:        CJNE A , #03H , LED4
           MOV 30H , #60
LED4:        MOV A , 30H
           LCALL TIME_SHOW          ;倒计时初值处理子程序
           LCALL INTTIMER0
RET
;*********************************************************
;倒计时初值处理子程序
TIME_SHOW:
           MOV B , #10   ;32H存放显示倒计时值分钟的高位
           div AB        ;33H存放显示倒计时值分钟的低位
        MOV 32H , A
           MOV 33H , B
RET
;*********************************************************
;音乐播放子程序
MUSIC:        MOV TMOD , #10H
             SETB EA
              SETB ET1
             MOV DPTR , #MUSICTABLE
MUSIC_VALUE:
            CLR A
            MOVC A , @A+DPTR
            MOV R1 , A
            INC DPTR
            CLR A
            MOVC A , @A+DPTR
            MOV R0 , A
            ORL A , R1
            JZ MUSIC_STOP
            MOV A , R0
            ANL A , R1
            CJNE A , #0FFH , MUSIC_TIME_START
            SJMP MUSIC
;*********************************************************
;定时器1初始化
MUSIC_TIME_START:
           MOV TH1 , R1
           MOV TL1 , R0
            SETB TR1
           SJMP MUSIC_T_LONG
MUSIC_STOP:
           CLR TR1
MUSIC_T_LONG:
           CLR A
           INC DPTR
           MOVC A , @A+DPTR
           MOV R7 , A
TIME_VALUE:
           ACALL MUSIC_TIME_DELAY        ;
           DJNZ R7 , TIME_VALUE        ;R7 控制节拍延时次数
           INC DPTR
        LJMP MUSIC_VALUE
;*********************************************************
;定时器1中断服务程序
TIMER1_INT:
           MOV TH1 , R1         
           MOV TL1 , R0
           CPL BELL             ;晶振发声
RETI
;*********************************************************
;节拍延迟子程序
MUSIC_TIME_DELAY:        ; 节拍 延时  187ms
           MOV R6 , #02
D2:          MOV R5 , #187
D3:           MOV R4 , #248
           DJNZ R4 , $
        DJNZ R5 , D3
           DJNZ R6 , D2
RET
;*********************************************************
;倒计时处理子程序  六十进制处理
TIME_COUNTDOWN:         
           MOV A , 35H
        CJNE A , #-1 , COUNTDOWN1
           MOV 35H , #9
           DEC 34H
COUNTDOWN1:
                MOV A , 34H
                CJNE A , #-1 , COUNTDOWN2
                MOV 34H , #5
                DEC 33H
COUNTDOWN2:
                MOV A , 33H
                CJNE A , #-1 , COUNTDOWN3
                MOV 33H , #9
                DEC 32H
COUNTDOWN3:        RET
;*********************************************************
;7段显示管显示子程序
SHOW:   LCALL TIME_COUNTDOWN
        CLR W1         ;显示第一个字符
        MOV A , 32H
        LCALL SHOW1
        SETB W1
        CLR W2         ;显示第二个字符
        MOV A , 33H
        LCALL SHOW1
        SETB W2
        CLR W3         ;显示第三个字符
        MOV A , 34H
        LCALL SHOW1
        SETB W3
        CLR W4         ;显示第四个字符
        MOV A , 35H
        LCALL SHOW1
        SETB W4
RET
;*********************************************************
;字符显示子程序
SHOW1:  MOV DPTR , #TABLE     ;送显示的字符
        MOVC A , @A+DPTR
        MOV P1 , A
        JB W2 , DELAY
        CLR P1.7
DELAY:               ;延时 1ms 误差 -0.651041666667us
        MOV R6 , #66H
DL0:    MOV R5 , #03H
        DJNZ R5 , $
        DJNZ R6 , DL0
        SETB P1.7
RET
;*********************************************************
;定时器0 初始化子程序
INTTIMER0:           ;基础定时一分钟,改R4的值即可改变
;定时时间 如(R4=5为定时五分钟)
      MOV R4 , 30H    ;30H单元存放初值
      MOV R3 , #60    ;定时一分钟
                 MOV R2 , #100   ;定时一秒钟
                 MOV TMOD , #01H
                 MOV TH0 , #0DCH;利用基础定时的一秒钟显示倒计时效果
           MOV TL0 , #00H  ;
                SETB EA
                SETB ET0
                SETB TR0
RET
;*********************************************************
;定时器0 中断服务程序
TIMER0_INT:
                MOV TH0 , #0DCH
                MOV TL0 , #00H
                CJNE R2 , #1 , L1
                DEC 35H
                MOV R2 , #100
     CJNE R3 , #1 , L2
                MOV R3 , #60
                DJNZ R4 , RTN
     SETB F0         ;用户标志位 置 1
     CLR  TR0
          AJMP RTN
L2:                DEC R3
                AJMP RTN
L1:   DEC R2
RTN:  RETI
;*********************************************************
;待显示字符集
TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH
;音乐音符数据
MUSICTABLE:        DB        0FDH , 80H , 03H , 0FDH , 80H , 01H
                                        DB         0FDH , 0C6H , 04H , 0FDH , 80H , 01H
                                        DB         0FEH , 2AH , 04H , 0FEH , 02H , 04H
                                        DB        00H , 00H , 04H
                                        DB        0FDH , 80H , 03H , 0FDH , 80H , 01H
                                        DB         0FDH , 0C6H , 04H , 0FDH , 80H , 04H
                                        DB         0FEH , 5CH , 04H , 0FEH , 2AH , 04H
                                        DB         00H , 00H , 04H
                                        DB         0FDH , 80H , 03H , 0FDH , 80H , 01H
                                        DB        0FEH , 0C0H , 04H , 0FEH , 84H , 04H
                                        DB        0FEH , 2AH , 04H , 0FEH , 02H , 04H
                                        DB        0FDH , 0C6H , 04H
                                        DB        0FEH , 98H , 03H , 0FEH , 98H , 01H
                                        DB         0FEH , 84H , 04H , 0FEH , 2AH , 04H
                                        DB         0FEH , 5CH , 04H , 0FEH , 2AH , 04H
                                        DB         00H , 00H , 04H
                                        DB        0FFH , 0FFH                 ;        结束码
END


已退回4积分

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top