int01.lst

来自「可以熟悉51单片机中断机制 大大方便学习51单片机」· LST 代码 · 共 214 行

LST
214
字号
A51 MACRO ASSEMBLER  INT01                                                                02/13/2008 20:11:40 PAGE     1


MACRO ASSEMBLER A51 V7.10
OBJECT MODULE PLACED IN INT01.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE INT01.ASM SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1     ;*******************************************************************************
                       2     ; INT1+0中断计数 6位数码管显示,6位数码管显示,                                            
                             *
                       3     ;低三位数码管为显示外部中断INT0的计数值                                        *
                       4     ;高三位数码管为显示外部中断INT1的计数值 硬件: 数码管P0,数码管控制P2           *
                       5     ;P3.3接按键,高3位的计数触发, P3.2低三位的计数触发                             *
                       6     ;*******************************************************************************
                       7     ;  日期:  2008-2-25 硬件: 数码管P0,数码管控制P2                                       *
                       8     ;       P1.4 按键,P1.5按键,为触发方式选择,P3.3接按键,为计数键                  *
                       9     ;  作者:  深圳志博电子有限公司     专业8051单片机教学站                        *
                      10     ;  邮箱: zty0012001@163.com                                                       *
                      11     ;  网站: http://www.elecmcu.com     http://www.elecmcu.com    更多例程请登陆网站   *
                      12     ;*******************************************************************************
                      13     ;  硬件:此程序在本公司志博电子实验仪运行通过                           *
                      14     ;*******************************************************************************
                      15     ; 【版权】 Copyright(C)深圳志博电子有限公司 www.elecmcu.com  All Rights Reserved *
                      16     ; 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                  *
                      17     ;*******************************************************************************/
  00B3                18                K5   BIT  P3.3
  00B2                19                IR   BIT  P3.2
  0080                20                LED_DATA  EQU   P0     ;数码管数据口定义
  0040                21                COUNT0    EQU   40H
  0041                22                COUNT1    EQU   41H
                      23     
  0085                24              DIS_1 BIT P0.5                 ;第一个数码管显示选择
  0086                25              DIS_2 BIT P0.6                 ;第二个数码管显示选择
  0087                26              DIS_3 BIT P0.7                 ;第三个数码管显示选择
  0090                27              DIS_4 BIT P1.0                 ;第四个数码管显示选择
  0091                28              DIS_5 BIT P1.1                 ;第五个数码管显示选择
  0084                29              DIS_6 BIT P0.4                 ;第六个数码管显示选择
                      30     
  00A0                31              DIS_DATA  DATA P2              ;6位数码管的公共数据口
                      32     
  0048                33              DIS_INDEX DATA 48H             ;显示位序列,存储目前显示的是第几位 
                      34     
  0049                35              DIS_BUFF  DATA 49H             ;显示缓冲区首地址 一共从0X19-0X1E 六个字节
                      36     
                      37     
  0049                38              DISSTART  EQU  49H
                      39     ;*******************************************************************
0000                  40                ORG  0000H
0000 802E             41                JMP  MAIN
0003                  42                ORG  0003H
0003 8054             43                JMP INT0_EX0
0013                  44                ORG  0013H
0013 8067             45                JMP INT1_EX1
0030                  46                ORG  0030H
                      47     ;*********************************************************
                      48     ; 主程序
                      49     ;*********************************************************
0030                  50     MAIN:
0030 758160           51                MOV  SP,#60H
0033 7580FF           52                MOV  P0,#0FFH
0036 75A0FF           53                MOV  P2,#0FFH
0039 753000           54                MOV  30H,#00H       ;计数单元清零
003C 753100           55                MOV  31H,#00H
003F 7840             56                MOV  R0,#40H
0041                  57     CLR1:
A51 MACRO ASSEMBLER  INT01                                                                02/13/2008 20:11:40 PAGE     2

0041 7600             58                MOV  @R0,#00H       ;清显存单元
0043 08               59                INC  R0
0044 B84FFA           60                CJNE  R0,#4FH,CLR1
0047 C288             61                CLR   IT0           ;INT0为电平触发
0049 C28A             62                CLR   IT1           ;INT1为电平触发
004B D2B8             63                SETB  PX0
004D D2AF             64                SETB  EA
004F D2A8             65                SETB  EX0
0051 D2AA             66                SETB  EX1
0053                  67     MAIN1:
0053 119F             68                CALL  CONVT
0055 11E4             69                CALL  PLAY
0057 80FA             70                JMP   MAIN1
                      71     ;*********************************************************
                      72     ; INT0 外部中断服务子程序
                      73     ;*********************************************************
0059                  74     INT0_EX0:
0059 C0E0             75                PUSH  ACC
005B C0D0             76                PUSH  PSW
005D D2D3             77                SETB  RS0
005F C2D4             78                CLR   RS1
0061 C2A8             79                CLR  EX0
0063 0540             80                INC  COUNT0
0065 7C0A             81                MOV  R4,#10
0067                  82     EX0_DEL:
0067 E540             83                MOV A,COUNT0         ;显示INT0计数
0069 119F             84                CALL CONVT
006B 11E4             85                CALL  PLAY
006D DCF8             86                DJNZ  R4,EX0_DEL
006F B4FF03           87                CJNE  A,#0FFH,EX0_END
0072 754000           88                MOV  COUNT0,#00H
0075                  89     EX0_END:
0075 D2A8             90                SETB  EX0
0077 D0D0             91                POP  PSW
0079 D0E0             92                POP  ACC
007B 32               93                RETI
                      94     ;*********************************************************
                      95     ; INT1 外部中断服务子程序
                      96     ;*********************************************************
007C                  97     INT1_EX1:
007C C0E0             98                PUSH  ACC
007E C0D0             99                PUSH  PSW
0080 D2D3            100                SETB  RS0
0082 D2D4            101                SETB  RS1
0084 C2AA            102                CLR  EX1
0086 0541            103                INC  COUNT1
0088 7C0A            104                MOV  R4,#10
008A                 105     EX1_DEL:
008A E541            106                MOV A,COUNT1        ;显示INT1计数
008C 119F            107                CALL CONVT
008E 11E4            108                CALL  PLAY
0090 DCF8            109                DJNZ  R4,EX1_DEL
0092 B4FF03          110                CJNE  A,#0FFH,EX1_END
0095 754100          111                MOV  COUNT1,#00H
0098                 112     EX1_END:
0098 D2AA            113                SETB  EX1
009A D0D0            114                POP  PSW
009C D0E0            115                POP  ACC
009E 32              116                RETI
                     117     ;*********************************************************
                     118     ;数据转换 (HEX TO BCD)
                     119     ;*********************************************************
009F                 120     CONVT:
009F E540            121              MOV  A,COUNT0       ;INT0 计数值处理
00A1 75F064          122              MOV  B,#100
00A4 84              123              DIV  AB
A51 MACRO ASSEMBLER  INT01                                                                02/13/2008 20:11:40 PAGE     3

00A5 F549            124              MOV  DISSTART,A   ;百位存放在DISSTART+2
00A7 740A            125              MOV  A,#10
00A9 C5F0            126              XCH  A,B
00AB 84              127              DIV  AB
00AC F54A            128              MOV  DISSTART+1,A   ;十位存放在DISSTART+1
00AE 85F04B          129              MOV  DISSTART+2,B     ;个位存放在DISSTART
00B1 E549            130              MOV  A,DISSTART
00B3 B4000B          131              CJNE  A,#00H,CONVT1
00B6 75490A          132              MOV  DISSTART,#0AH    ;高位为0,不显示
00B9 E54A            133              MOV  A,DISSTART+1
00BB B40003          134              CJNE  A,#00H,CONVT1
00BE 754A0A          135              MOV  DISSTART+1,#0AH
00C1                 136     CONVT1:
00C1 E541            137              MOV  A,COUNT1         ;INT1 计数值处理
00C3 75F064          138              MOV  B,#100
00C6 84              139              DIV  AB
00C7 F54C            140              MOV  DISSTART+3,A     ;百位存放在DISSTART+7
00C9 740A            141              MOV  A,#10
00CB C5F0            142              XCH  A,B
00CD 84              143              DIV  AB
00CE F54D            144              MOV  DISSTART+4,A     ;十位存放在DISSTART+6
00D0 85F04E          145              MOV  DISSTART+5,B     ;个位存放在DISSTART+5
00D3 E54C            146              MOV  A,DISSTART+3
00D5 B4000B          147              CJNE  A,#00H,CONVT_END
00D8 754C0A          148              MOV  DISSTART+3,#0AH    ;高位为0,不显示
00DB E54D            149              MOV  A,DISSTART+4
00DD B40003          150              CJNE  A,#00H,CONVT_END
00E0 754D0A          151              MOV  DISSTART+4,#0AH
00E3                 152     CONVT_END:
00E3 22              153              RET
                     154     ;*********************************************************
                     155     ; 数码管显示子程序
                     156     ;*********************************************************
00E4                 157     PLAY:                           ;显示子程序开始
00E4 754800          158                     MOV DIS_INDEX,#00  ;初始化显示的数码管是第0位
00E7                 159     DISPLAY_START:                     ;显示一位开始
00E7 312D            160                     CALL OFF_ALL       ;调用子程序关闭所有数码管的显示
00E9 75A000          161                     MOV DIS_DATA,#00 ;  6个数目管的公共显示数据写0关闭
00EC E548            162                     MOV A, DIS_INDEX
00EE B40004          163     DIS0_B:         CJNE A,#0X00,DIS1_B
00F1 C285            164                     CLR DIS_1
00F3 8023            165                     JMP MOV_DAT
00F5                 166     DIS1_B:
00F5 B40104          167                     CJNE A,#0X01,DIS2_B
00F8 C286            168                     CLR DIS_2
00FA 801C            169                     JMP MOV_DAT
00FC                 170     DIS2_B:
00FC B40204          171                     CJNE A,#0X02,DIS3_B
00FF C287            172                     CLR DIS_3
0101 8015            173                     JMP MOV_DAT
0103                 174     DIS3_B:
0103 B40304          175                     CJNE A,#0X03,DIS4_B
0106 C290            176                     CLR DIS_4
0108 800E            177                     JMP MOV_DAT
010A                 178     DIS4_B:
010A B40404          179                     CJNE A,#0X04,DIS5_B
010D C291            180                     CLR DIS_5
010F 8007            181                     JMP MOV_DAT
0111                 182     DIS5_B:
0111 B40518          183                     CJNE A,#0X05,DIS_END
0114 C284            184                     CLR DIS_6
0116 8000            185                     JMP MOV_DAT         ;以上程序根据现在的显示位数进行条件分支,分别打开相应的
                             显示使能位
0118                 186     MOV_DAT:        
0118 E548            187                     MOV A, DIS_INDEX
011A 7949            188                     MOV R1,#DIS_BUFF
A51 MACRO ASSEMBLER  INT01                                                                02/13/2008 20:11:40 PAGE     4

011C 29              189                     ADD A,R1              
011D F8              190                     MOV R0,A
011E E6              191                     MOV A,@R0           ;获得目前的显示位所对应自己的缓冲数据
011F 900147          192                     MOV DPTR,#DIS_TAB
0122 93              193                     MOVC A,@A+DPTR
0123 F5A0            194                     MOV  DIS_DATA,A     ;将目前的显示数据经过查表获得对应的数码管段码
0125 0548            195                     INC DIS_INDEX       ;显示位序加一,指向下一位
0127 E548            196                     MOV A,DIS_INDEX 
0129 B406BB          197                     CJNE A,#6,DISPLAY_START ;以上两句判断是否循环显示够6位是的话返回到被调用的

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?