找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1408|回复: 0
打印 上一主题 下一主题
收起左侧

单片机汇编语言红绿灯模拟 数码管显示不全怎么解决?

[复制链接]
跳转到指定楼层
楼主

这是个红绿灯模拟里面的中断程序。我把它的主程序设为空程序了。没了绿色字体的部分,中断程序作为主程序运行时正常,但作为中断总是数码管显示残缺。本来四个数码管显示器,有三个显示就不错了。是不是因为没有什么中断现场保护??不懂

DAT  SEGMENT;


TABLE DB  00H,67H, 7FH, 07H, 7DH, 6DH, 66H, 4FH, 5BH,06H,3FH;9876543210

DAT  ENDS  

STACK SEGMENT  'STACK'

  STA     DB  1000 DUP(?)

       PP     EQU LENGTH STA

STACK ENDS



CODE  SEGMENT ;PUBLIC 'CODE'

      ASSUME CS:CODE, DS:DAT ,SS:STACK

     



START:

       MOV AX,DAT

       MOV DS,AX



       MOV AX,STACK

           MOV SS,AX



       MOV AX, PP

       MOV  SP, AX       ;设置SP值

      

       PUSH  DS

      

       MOV AX,0

           MOV DS,AX

              

           MOV AX,CODE

     MOV CL,4

     SHL AX,CL

     ADD AX,OFFSET IRQ0



     MOV SI,80H

     MOV [SI],AX

     MOV AX,0

     MOV [SI+2],AX

   POP  DS




       MOV DX,8020H     ; 8259地址

  MOV AL,00010011B  ; 单片8259, 上升沿中断, 要写ICW4

  OUT DX,AL

         

  MOV DX,8022H

  MOV AL,20H    ; 中断号为20H

  OUT DX,AL


  MOV AL,01H    ; 工作在8086/88 方式

  OUT DX,AL


  IN AL,DX

  AND AL,0FEH

  OUT DX,AL

      

  MOV DX,8006H  ;8255控制

  MOV AL,80H    ;模式设置

  OUT DX,AL

MOV DX,8016H

OUT DX,AL

   

     MOV BL,0

LP:   STI   ;开中断

       NOP

       JMP  LP

   



IRQ0:

CLI

MOV AL,80H

MOV DX,8006H

OUT DX,AL

MOV DX,8016H

OUT DX,AL;两个芯片方式字设置



SSET1:LEADI,TABLE+7;读取3的地址

SSET2:MOV BP,DI;读取3的地址

SSET3:LEADI,TABLE+5;读取5的地址

SSET4:LEABX,TABLE+6;读取4的地址

SSET5:LEA SI,TABLE+10;读取0的地址





TTW:

   MOV AL,[BP]

MOV DX,8012H

   OUT DX,AL;高位初始化为3

MOV AL,[DI]

   MOV DX,8002H

   OUT DX,AL;高位初始化为5



L1W:MOV AL,[BX]

   MOV DX,8004H

   OUT DX,AL

   CMP AL,3FH;判断移位

   JE KK1W

B1W:MOV AL,[SI]

   MOV DX,8014H

   OUT DX,AL

   CMP AL,3FH;判断移位

   JE KK2W

B2W:INC BX;

   INC SI



MOV DX,60000

LOPW:NOP

    NOP

    NOP

    DEC DX

JNZ LOPW

MOV AL,[SI]

CMP AL,3FH

JE CHANGEW;交换循环判断1

    JMPTTW



KK1W:INC DI

MOV AL,[DI]

CMP AL,3FH

JE SS1W

PP1W:LEA BX,TABLE

JMP B1W



KK2W:INC BP

MOV AL,[BP]

CMP AL,3FH

JE SS2W;低位为0时调整低位起始值地址和高位地址

PP2W:LEA SI,TABLE

JMP B2W



SS1W:LEA DI,TABLE

JMP PP1W

SS2W:LEA BP,TABLE

    JMPPP2W;只有个位数值时高位不显示0



       MOVDX,8020H;   

       MOVAL,20H

       OUTDX,AL

       STI

       IRET

CHANGEW:

CMP BP,0000H

JMP TTW

     

CODE   ENDS

       END START

这是个红绿灯模拟里面的中断程序。我把它的主程序设为空程序了。没了绿色字体的部分,中断程序作为主程序运行时正常,但作为中断总是数码管显示残缺。本来四个数码管显示器,有三个显示就不错了。是不是因为没有什么中断现场保护??不懂

3030.PNG (11.94 KB, 下载次数: 40)

3030.PNG
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表