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

📄 int1.lst

📁 可以熟悉51单片机中断机制 大大方便学习51单片机
💻 LST
字号:
A51 MACRO ASSEMBLER  INT1                                                                 02/14/2008 12:29:54 PAGE     1


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

LOC  OBJ            LINE     SOURCE

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

0052 3103             59                CALL  DELAY
0054 DDFC             60                DJNZ  R5,MAIN2
0056                  61     MAIN3:
0056 209508           62                JB  K2,MAIN5
0059 D28A             63                SETB  IT1          ;INT1为下降沿触发
005B 7D14             64                MOV  R5,#20
005D                  65     MAIN4:
005D 3103             66                CALL  DELAY
005F DDFC             67                DJNZ  R5,MAIN4
0061                  68     MAIN5:
0061 118A             69                CALL  CONVT
0063 11AD             70                CALL  PLAY
0065 80E4             71                JMP   MAIN1
                      72     ;*******************************************************************
0067                  73     INT1_EX1:
0067 C0E0             74                PUSH  ACC
0069 C0D0             75                PUSH  PSW
006B D2D3             76                SETB  RS0
006D C2D4             77                CLR   RS1
006F C2AA             78                CLR  EX1
0071 0530             79                INC  COUNT
0073 7C10             80                MOV  R4,#10H
0075                  81     EX1_DEL:
0075 E530             82                MOV A,COUNT
0077 118A             83                CALL CONVT
0079 11AD             84                CALL  PLAY
007B DCF8             85                DJNZ  R4,EX1_DEL
007D B4FF03           86                CJNE  A,#0FFH,EX1_END
0080 753000           87                MOV  COUNT,#00H
0083                  88     EX1_END:
0083 D2AA             89                SETB  EX1
0085 D0D0             90                POP  PSW
0087 D0E0             91                POP  ACC
0089 32               92                RETI
                      93     ;---------------------------------------------------------
                      94     ;代码变换 (HEX TO BCD)
                      95     ;---------------------------------------------------------
008A                  96     CONVT:
008A E530             97              MOV  A,COUNT
008C 75F064           98              MOV  B,#100
008F 84               99              DIV  AB
0090 F51C            100              MOV  DISSTART+3,A   ;百位存放在DISSTART+2
0092 740A            101              MOV  A,#10
0094 C5F0            102              XCH  A,B
0096 84              103              DIV  AB
0097 F51D            104              MOV  DISSTART+4,A   ;十位存放在DISSTART+1
0099 85F01E          105              MOV  DISSTART+5,B     ;个位存放在DISSTART
                     106     
009C E51C            107              MOV  A,DISSTART+3
009E B4000B          108              CJNE  A,#00H,CONVT_END
00A1 751C0A          109              MOV  DISSTART+3,#0AH    ;高位为0,不显示
00A4 E51D            110              MOV  A,DISSTART+4
00A6 B40003          111              CJNE  A,#00H,CONVT_END
00A9 751D0A          112              MOV  DISSTART+4,#0AH
00AC                 113     CONVT_END:
00AC 22              114              RET
                     115     ;---------------------------------------------------------
00AD                 116     PLAY:                           ;显示子程序开始
00AD 751800          117                     MOV DIS_INDEX,#00  ;初始化显示的数码管是第0位
00B0                 118     DISPLAY_START:                     ;显示一位开始
00B0 11F6            119                     CALL OFF_ALL       ;调用子程序关闭所有数码管的显示
00B2 75A000          120                     MOV DIS_DATA,#00 ;  6个数目管的公共显示数据写0关闭
00B5 E518            121                     MOV A, DIS_INDEX
00B7 B40004          122     DIS0_B:         CJNE A,#0X00,DIS1_B
00BA C285            123                     CLR DIS_1
00BC 8023            124                     JMP MOV_DAT
A51 MACRO ASSEMBLER  INT1                                                                 02/14/2008 12:29:54 PAGE     3

00BE                 125     DIS1_B:
00BE B40104          126                     CJNE A,#0X01,DIS2_B
00C1 C286            127                     CLR DIS_2
00C3 801C            128                     JMP MOV_DAT
00C5                 129     DIS2_B:
00C5 B40204          130                     CJNE A,#0X02,DIS3_B
00C8 C287            131                     CLR DIS_3
00CA 8015            132                     JMP MOV_DAT
00CC                 133     DIS3_B:
00CC B40304          134                     CJNE A,#0X03,DIS4_B
00CF C290            135                     CLR DIS_4
00D1 800E            136                     JMP MOV_DAT
00D3                 137     DIS4_B:
00D3 B40404          138                     CJNE A,#0X04,DIS5_B
00D6 C291            139                     CLR DIS_5
00D8 8007            140                     JMP MOV_DAT
00DA                 141     DIS5_B:
00DA B40518          142                     CJNE A,#0X05,DIS_END
00DD C284            143                     CLR DIS_6
00DF 8000            144                     JMP MOV_DAT         ;以上程序根据现在的显示位数进行条件分支,分别打开相应的
                             显示使能位
00E1                 145     MOV_DAT:        
00E1 E518            146                     MOV A, DIS_INDEX
00E3 7919            147                     MOV R1,#DIS_BUFF
00E5 29              148                     ADD A,R1              
00E6 F8              149                     MOV R0,A
00E7 E6              150                     MOV A,@R0           ;获得目前的显示位所对应自己的缓冲数据
00E8 900110          151                     MOV DPTR,#DIS_TAB
00EB 93              152                     MOVC A,@A+DPTR
00EC F5A0            153                     MOV  DIS_DATA,A     ;将目前的显示数据经过查表获得对应的数码管段码
00EE 0518            154                     INC DIS_INDEX       ;显示位序加一,指向下一位
00F0 E518            155                     MOV A,DIS_INDEX 
00F2 B406BB          156                     CJNE A,#6,DISPLAY_START ;以上两句判断是否循环显示够6位是的话返回到被调用的

⌨️ 快捷键说明

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