!!汇编高手帮帮忙。看个小程序。

abin1982   2007-6-3 01:20 楼主
我做的毕业设计是基于单片机的车用数字仪表设计。只需要测车速和里程。我从网上下载了一份。但是由于学校机房出现故障,还没来得急调试。有哪位大哥能帮帮忙看一下吗,这程序到底能不能运行!?

回复评论 (3)

60H,61H,62H作里程计数单元,6CH,6DH作T1计数扩充单元,
;       68H,69H,6AH,6BH存放自行车每圈时间数,70H,71H,72H,73H
;       作显示BCD码存放数用,11H--15H存放被除数,16H-19H存放除数
;
;
; 定义
        VSDA    EQU     P1.5    ; EEPROM数据传送口
        VSCL    EQU     P1.4    ; EEPROM时钟传送口
        SLA     EQU     50H     ; EEPROM器件寻址字节存放单元
        NUMBYT  EQU     51H     ; EEPROM传送字节数存放单元
        MTD     EQU     30H     ; EEPROM发送数据缓冲单元
        MRD     EQU     40H     ; EEPROM读出数据存放单元
        SLAW    EQU     0A0H    ; EEPROM寻址字节写
        SLAR    EQU     0A1H    ; EEPROM寻址字节读
        DPHH    EQU     62H     ; DPTR计数扩展高8位
        TH1H    EQU     6CH     ; 定时器T1扩展高8位
        TH1HH   EQU     6DH     ; 定时器T1扩展高8-16位
;
;;;;;;;;;;;;;;;;;;;;
;; PROGRAM INPUT  ;;
;;;;;;;;;;;;;;;;;;;;
;
        ORG     0000H                        ;程序执行开始地址
        LJMP    START                        ;跳至START
        ORG     0003H                        ;外中断0中断程序入口
        LJMP    INTEX0                        ;跳至INTEX0中断服务程序
        ORG     000BH                        ;定时器T0中断程序入口
        RETI                                        ;中断返回
        ORG     0013H                        ;外中断1中断入口
        LJMP    INTEX1                        ; 跳至INTEX1中断服务程序
        ORG     001BH                        ; 定时器T1中断程序入口
        LJMP    INTT1                        ; 跳至INTT1中断服务程序
        ORG     0023H                        ;串口中断入口地址
        RETI                                        ;中断返回
        ORG     002BH                        ;定时器T2中断入口地址
        RETI                                        ;中断返回
;
;
点赞  2007-6-3 01:21
;;;;;;;;;;;;;;;;;;;;
;; PROGRAM CLEAR  ;;
;;;;;;;;;;;;;;;;;;;;
;上电初始化程序
CLEARMEN:       MOV     TMOD,#90H       ;T1为16位外部控制定时器
                MOV     SP,#75H         ;堆栈在75H开始
                SETB    PX0             ;外中断0优先级为1
                SETB    IT0             ;外中断0用边沿触发
                SETB    IT1             ;外中断1用边沿触发
                CLR     A               ;清A
                MOV     20H,A           ;清内存中特定单元
                MOV     6CH,A           ;
                MOV     6DH,A           ;
                MOV     70H,A           ;
                MOV     71H,A           ;
                MOV     72H,A           ;
                MOV     73H,A           ;
                MOV     60H,A           ;
                MOV     61H,A           ;
                MOV     62H,A           ;
                MOV     63H,A           ; 清内存中特定单元
                DEC     A                   ;A为#0FFH
                MOV     68H,A           ;内存置数据#0FFH
                MOV     69H,A           ; 内存置数据#0FFH
                MOV     6AH,A           ; 内存置数据#0FFH
                MOV     6BH,A           ; 内存置数据#0FFH
                MOV     P1, A                 ;P1口置1
CLEAR1:         JB      P1.2,KEY1       ;根据P1.2,P1.3,P1.6,P1.7设置状态,
                                                                                ;在21H地址单元赋自行车周长值
                MOV     21H,#0FH        ;22寸自行车周长值
                LJMP    CLEAR2          ;转CLEAR2
KEY1:           JB      P1.3,KEY2       ;
                MOV     21H,#12H        ; 24寸自行车周长值
                LJMP    CLEAR2          ; 转CLEAR2
KEY2:           JB      P1.6,KEY3       ;
                MOV     21H,#14H        ; 26寸自行车周长值
                LJMP    CLEAR2          ; 转CLEAR2
KEY3:           JB      P1.7,ERR        ;四个开关都没合上,转出错处理
                MOV     21H,#19H        ; 28寸自行车周长值
CLEAR2:         SETB    TR1             ;开定时器T1
                SETB    EA              ;开中断允许
                SETB    EX0             ;开外中断0
                SETB    ET1             ;开定时中断T1
                SETB    P3.1            ;关报警器
                LCALL   VIICREAD        ;将EEPROM中原里程数据调入内存
                RET                                  ;子程序返回
ERR:            CPL     P3.1            ;轮周长设置出错,LED灯闪烁堤醒
                LCALL   DL5S            ;延时
                LJMP    CLEAR1          ;重新初始化,等待轮周长设置开关合上
;
点赞  2007-6-3 01:22
;;;;;;;;;;;;;;;;;;;;
;; PROGRAM START  ;;
;;;;;;;;;;;;;;;;;;;;
;
START:          LCALL   CLEARMEN        ;上电初始化
START1:         JB      P3.0,DISPLAYS   ;P3.0=1,显示里程
                LCALL   DISPLAYV        ;显示速度
START2:         SJMP    START1          ;转START1循环
;
;;;;;;;;;;;;;;;;;;;;
;;INTEX0 PROGRAM  ;;
;;;;;;;;;;;;;;;;;;;;
; 里程计数程序,用外中断0实现,计数用60H-62H内存单元。
INTEX0:         PUSH    ACC              ; 累加器堆栈保护
                PUSH    PSW                   ;状态字堆栈保护
               INC      60H                   ;圈加1
               CLR      A                    ;清A
               CJNE     A,60H,INTEX0OUT  ;计数没溢出转INTEX0OUT
               INC      61H              ;溢出进位(61H加1)
               CJNE     A,61H,INTEX0OUT  ; 计数没溢出转INTEX0OUT
               INC      62H                    ; 溢出进位(62H加1)
INTEX0OUT:     LCALL   VIICWRITE         ;里程数据存入EEPROM
               SETB     EX1                     ;开外中断1
               POP      PSW                     ;状态字恢复
               POP      ACC              ;累加器恢复
               RETI                                    ;中断返回
;;;;;;;;;;;;;;;;;;;;
;;INTEX1 PROGRAM  ;;
;;;;;;;;;;;;;;;;;;;;
; 每转1圈时间计数处理程序,每圈时间放在68H-6BH单元中。
INTEX1:         PUSH    ACC             ; 堆栈保护
                PUSH    PSW             ;
                CLR     EX1             ;关外中断1
                JNB     00H,INTEX11     ;溢出标志为0转INTEX11
                MOV     TL1,#0FFH       ;溢出时计时单元赋#0FFH(显示速度为零)
                MOV     TH1,#0FFH       ;
                MOV     6CH,#0FFH       ;
                MOV     6DH,#0FFH       ;
INTEX11:        MOV     68H,TL1       ;将时间计数值移入暂存单元68H-6BH
                MOV     69H,TH1       ;
                MOV     6AH,6CH       ;
                MOV     6BH,6DH       ;
                CLR     A             ;清A
                MOV     TL1,A         ;计时单元置0
                MOV     TH1,A         ;
                MOV     6CH,A         ;
                MOV     6DH,A         ;
                CLR     00H           ;清溢出标志
                POP     PSW                 ;堆栈恢复
                POP     ACC           ;
                RETI                  ;中断返回
;
点赞  2007-6-3 01:22
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复