⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 int0.lst

📁 可以熟悉51单片机中断机制 大大方便学习51单片机
💻 LST
字号:
A51 MACRO ASSEMBLER  INT0                                                                 02/13/2008 19:22:34 PAGE     1


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

LOC  OBJ            LINE     SOURCE

                       1     
                       2     ;*******************************************************************************
                       3     ;- INT0中断计数      3位数码管显示     P3.2接按键,计数                        *
                       4     ;*******************************************************************************
                       5     ;  日期:  2008-2-25 硬件: 数码管P0,数码管控制P2                               *
                       6     ;  版本:  3.0                                                                  *
                       7     ;  作者:  深圳志博电子有限公司     专业8051单片机教学站                        *
                       8     ;  邮箱: zty0012001@163.com                                                       *
                       9     ;  网站: http://www.elecmcu.com     http://www.elecmcu.com    更多例程请登陆网站   *
                      10     ;*******************************************************************************
                      11     ;  硬件:此程序在本公司志博电子实验仪运行通过                           *
                      12     ;*******************************************************************************
                      13     ; 【版权】 Copyright(C)深圳志博电子有限公司 www.elecmcu.com  All Rights Reserved *
                      14     ; 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                  *
                      15     ;*******************************************************************************
  00B2                16                IR   BIT   P3.2        ;红外接收口
  0080                17                LED_DATA  EQU   P0     ;数码管数据口定义
  0030                18                COUNT     EQU   30H
  0085                19              DIS_1 BIT P0.5                 ;第一个数码管显示选择
  0086                20              DIS_2 BIT P0.6                 ;第二个数码管显示选择
  0087                21              DIS_3 BIT P0.7                 ;第三个数码管显示选择
  0090                22              DIS_4 BIT P1.0                 ;第四个数码管显示选择
  0091                23              DIS_5 BIT P1.1                 ;第五个数码管显示选择
  0084                24              DIS_6 BIT P0.4                 ;第六个数码管显示选择
                      25     
  00A0                26              DIS_DATA  DATA P2              ;6位数码管的公共数据口
                      27     
  0018                28              DIS_INDEX DATA 18H             ;显示位序列,存储目前显示的是第几位 
                      29     
  0019                30              DIS_BUFF  DATA 19H             ;显示缓冲区首地址 一共从0X19-0X1E 六个字节
                      31     
                      32     
  0019                33              DISSTART  EQU  19H
                      34     ;*******************************************************************
0000                  35                ORG  0000H
0000 802E             36                JMP  MAIN
0003                  37                ORG  0003H
0003 804C             38                JMP INT0_EX0
0030                  39                ORG  0030H
                      40     ;*******************************************************************
0030                  41     MAIN:
0030 758160           42                MOV  SP,#60H
0033 7580FF           43                MOV  P0,#0FFH
0036 75A0FF           44                MOV  P2,#0FFH
0039 753000           45                MOV  30H,#00H
003C D288             46                SETB  IT0          ;INT1为下降沿触发
003E D2AF             47                SETB  EA
0040 D2A8             48                SETB  EX0
0042 75190A           49                MOV 19H,#0X0A      ;以下三句话把前三位数码管全熄灭(即把显示缓冲区填10)
0045 751A0A           50                MOV 1AH,#0X0A
0048 751B0A           51                MOV 1BH,#0X0A
004B                  52     MAIN1:
004B 1174             53                CALL  CONVT
004D 1197             54                CALL  PLAY
004F 80FA             55                JMP   MAIN1
                      56     ;*******************************************************************
0051                  57     INT0_EX0:
0051 C0E0             58                PUSH  ACC
A51 MACRO ASSEMBLER  INT0                                                                 02/13/2008 19:22:34 PAGE     2

0053 C0D0             59                PUSH  PSW
0055 D2D3             60                SETB  RS0
0057 C2D4             61                CLR   RS1
0059 C2A8             62                CLR  EX0
005B 0530             63                INC  COUNT
005D 7C14             64                MOV  R4,#14H        ;显示20次
005F                  65     EX0_DEL:
005F E530             66                MOV A,COUNT
0061 1174             67                CALL CONVT
0063 1197             68                CALL  PLAY
0065 DCF8             69                DJNZ  R4,EX0_DEL
                      70     
0067 B4FF03           71                CJNE  A,#0FFH,EX0_END
006A 753000           72                MOV  COUNT,#00H
006D                  73     EX0_END:
006D D2A8             74                SETB  EX0
006F D0D0             75                POP  PSW
0071 D0E0             76                POP  ACC
0073 32               77                RETI
                      78     ;---------------------------------------------------------
                      79     ;代码变换 (HEX TO BCD)
                      80     ;---------------------------------------------------------
0074                  81     CONVT:
0074 E530             82              MOV  A,COUNT
0076 75F064           83              MOV  B,#100
0079 84               84              DIV  AB
007A F51C             85              MOV  DISSTART+3,A   ;百位存放在DISSTART+2
007C 740A             86              MOV  A,#10
007E C5F0             87              XCH  A,B
0080 84               88              DIV  AB
0081 F51D             89              MOV  DISSTART+4,A   ;十位存放在DISSTART+1
0083 85F01E           90              MOV  DISSTART+5,B     ;个位存放在DISSTART
                      91     
0086 E51C             92              MOV  A,DISSTART+3
0088 B4000B           93              CJNE  A,#00H,CONVT_END
008B 751C0A           94              MOV  DISSTART+3,#0AH    ;高位为0,不显示
008E E51D             95              MOV  A,DISSTART+4
0090 B40003           96              CJNE  A,#00H,CONVT_END
0093 751D0A           97              MOV  DISSTART+4,#0AH
0096                  98     CONVT_END:
0096 22               99              RET
                     100     ;---------------------------------------------------------
0097                 101     PLAY:                           ;显示子程序开始
0097 751800          102                     MOV DIS_INDEX,#00  ;初始化显示的数码管是第0位
009A                 103     DISPLAY_START:                     ;显示一位开始
009A 11E0            104                     CALL OFF_ALL       ;调用子程序关闭所有数码管的显示
009C 75A000          105                     MOV DIS_DATA,#00 ;  6个数目管的公共显示数据写0关闭
009F E518            106                     MOV A, DIS_INDEX
00A1 B40004          107     DIS0_B:         CJNE A,#0X00,DIS1_B
00A4 C285            108                     CLR DIS_1
00A6 8023            109                     JMP MOV_DAT
00A8                 110     DIS1_B:
00A8 B40104          111                     CJNE A,#0X01,DIS2_B
00AB C286            112                     CLR DIS_2
00AD 801C            113                     JMP MOV_DAT
00AF                 114     DIS2_B:
00AF B40204          115                     CJNE A,#0X02,DIS3_B
00B2 C287            116                     CLR DIS_3
00B4 8015            117                     JMP MOV_DAT
00B6                 118     DIS3_B:
00B6 B40304          119                     CJNE A,#0X03,DIS4_B
00B9 C290            120                     CLR DIS_4
00BB 800E            121                     JMP MOV_DAT
00BD                 122     DIS4_B:
00BD B40404          123                     CJNE A,#0X04,DIS5_B
00C0 C291            124                     CLR DIS_5
A51 MACRO ASSEMBLER  INT0                                                                 02/13/2008 19:22:34 PAGE     3

00C2 8007            125                     JMP MOV_DAT
00C4                 126     DIS5_B:
00C4 B40518          127                     CJNE A,#0X05,DIS_END
00C7 C284            128                     CLR DIS_6
00C9 8000            129                     JMP MOV_DAT         ;以上程序根据现在的显示位数进行条件分支,分别打开相应的
                             显示使能位
00CB                 130     MOV_DAT:        
00CB E518            131                     MOV A, DIS_INDEX
00CD 7919            132                     MOV R1,#DIS_BUFF
00CF 29              133                     ADD A,R1              
00D0 F8              134                     MOV R0,A
00D1 E6              135                     MOV A,@R0           ;获得目前的显示位所对应自己的缓冲数据
00D2 9000FA          136                     MOV DPTR,#DIS_TAB
00D5 93              137                     MOVC A,@A+DPTR
00D6 F5A0            138                     MOV  DIS_DATA,A     ;将目前的显示数据经过查表获得对应的数码管段码
00D8 0518            139                     INC DIS_INDEX       ;显示位序加一,指向下一位
00DA E518            140                     MOV A,DIS_INDEX 
00DC B406BB          141                     CJNE A,#6,DISPLAY_START ;以上两句判断是否循环显示够6位是的话返回到被调用的

⌨️ 快捷键说明

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