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

📄 djskz.lst

📁 at89s51控制的可调倒计时程序
💻 LST
字号:
A51 MACRO ASSEMBLER  DJSKZ                                                                03/20/2008 16:11:40 PAGE     1


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

LOC  OBJ            LINE     SOURCE

                       1     ;**************************************************
                       2     ;djskz.asm
                       3     ;可设定倒计时控制
                       4     ;数码管在按键的控制下可以显示所有设置的小时时间秒数(0~99)
                       5     ;当外部中断信号 来临 的时候以该数字位初值进行倒计时计数,并控制继电器
                       6     ;great by       2008-3-15 lus2008
                       7     
                       8     ;**************************************************     
                       9             ;定义变量
  0030                10     DisplayBuffer           equ     30h     ;显示数据缓冲器为30h-31h
  0033                11     Modedis                 equ     33h     ;显示数据存放
  0034                12     OneSecondCounter        equ     34h     ;1s中断次数
  0035                13     Danqians                equ     35h     ;存储上一次的数据
  0001                14     Daojs                   equ     20h.1   ;中断来临标志位
  00B4                15     Addkey                  bit     P3.4    ;设置加按键
  00B3                16     Deckey                  bit     P3.3    ;设置减按键
  00B0                17     RelayOut                equ     P3.0    ;定义输出引脚,扬声器控制
  00B5                18     RelayOut1               equ     P3.5    ;定义输出引脚,继电器1控制
                      19     
                      20             ;程序开始
0000                  21             org     00h
0000 0120             22             ajmp    Main
0003                  23             org     03h
0003 01AD             24             ajmp    Intsig
000B                  25             org     0bh
000B 01BB             26             ajmp    Inttimer
0020                  27             org     20h
0020                  28     Main:
                      29             ;中断初始化
0020 758150           30             mov     sp,#50h
0023 75A883           31             mov     ie,#10000011b   ;启动中断总开关ea和外部中断0开关ex0,et0
0026 D288             32             setb    it0             ;采用脉冲负降沿启动中断
                      33             ;定时器初始化
0028 758901           34             mov     tmod,#00000001b ;       ;使用定时器0,方式1
002B 758CE3           35             mov     th0,#0E3h               ; 8ms                 
002E 758A33           36             mov     tl0,#33h
                      37     
0031 C201             38             clr     Daojs           ;将标志位清0
0033 75347D           39             mov     OneSecondCounter,#125   ;1s钟中断次数
                      40     ;*****************************************************************
                      41     ;主程序开始
                      42     ;*****************************************************************
                      43             ;按键选择,数码管显示的数据的设置
0036 753302           44             mov     Modedis,#02
0039 E533             45     Loop2:  mov     a,Modedis
003B 120073           46             lcall   Disshu          ;将数据放入缓冲区
003E 20B417           47     Loop5:  jb      Addkey,Next2
0041 120102           48             lcall   Delayd
0044 20B411           49             jb      Addkey,Next2
0047 E533             50             mov     a,Modedis
0049 2401             51             add     a,#1
004B B46302           52             cjne    a,#99,Loop
004E 7400             53             mov     a,#0
0050 30B4FD           54     Loop:   jnb     Addkey,$
0053 F533             55             mov     Modedis,a
0055 120073           56             lcall   Disshu          ;将数据放入缓冲区
0058 20B316           57     Next2:  jb      Deckey,Next
005B 120102           58             lcall   Delayd
A51 MACRO ASSEMBLER  DJSKZ                                                                03/20/2008 16:11:40 PAGE     2

005E 20B310           59             jb      Deckey,Next
0061 E533             60             mov     a,Modedis
0063 14               61             dec     a
0064 B40002           62             cjne    a,#00h,Loop1
0067 7462             63             mov     a,#98   
0069 30B3FD           64     Loop1:  jnb     Deckey,$
006C F533             65             mov     Modedis,a
006E 120073           66             lcall   Disshu          ;将数据放入缓冲区
0071 0139             67     Next:   ajmp    Loop2
                      68     
                      69     ;
                      70     
                      71     ;*****************************************************************
                      72     ;数据存储,扫描显示
                      73     ;*****************************************************************
                      74             ;将数据存储到缓存里
0073 7930             75     Disshu: mov     r1,#DisplayBuffer
0075 E533             76             mov     a,Modedis       ;将存储区里的数据分位放入缓冲区
0077 75F00A           77             mov     b,#10
007A 84               78             div     ab
007B A7F0             79             mov     @r1,b
007D 09               80             inc     r1
007E F7               81             mov     @r1,a
007F 1182             82             call    Candis  ;显示缓冲区里的数据
0081 22               83             ret
                      84             ;将缓冲区里的数据显示到数码管上
0082 7930             85     Candis: mov     r1,#DisplayBuffer
0084 7CDF             86             mov     r4,#11011111b   ;选择右边第一个数码管,其次选择第二个
0086 EC               87     Again:  mov     a,r4
0087 F5A0             88             mov     p2,a
0089 E7               89             mov     a,@r1
008A 9000A0           90             mov     dptr,#tab
008D 93               91             movc    a,@a+dptr
008E F580             92             mov     p0,a            ;显示第一个数据
0090 09               93             inc     r1
0091 EC               94             mov     a,r4
0092 30E307           95             jnb     acc.3,Nextd
0095 03               96             rr      a
0096 FC               97             mov     r4,a
0097 12010B           98             lcall   Delays          ;2ms间隔显示时间
009A 0186             99             ajmp    Again
009C 75A0FF          100     Nextd:  mov     p2,#0ffh        
009F 22              101             ret
00A0 C0F9A4B0        102     tab:    DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,7FH,0B7H,0FFH
00A4 999282F8                
00A8 80907FB7                
00AC FF                      
                     103     ;共阳段码表          "0""1""2" "3""4""5""6""7" "8""9"".""=""不亮"
                     104     
                     105     ;
                     106     
                     107     ;*****************************************************************
                     108     ;中断服务子程序
                     109     ;*****************************************************************
                     110             ;中断服务子程序
00AD C0E0            111     Intsig: push    acc
00AF C0D0            112             push    psw
00B1 D28C            113             setb    tr0
                     114     ;       mov     a,
00B3 853335          115             mov     Danqians,Modedis
00B6 D0D0            116             pop     psw
00B8 D0E0            117             pop     acc
00BA 32              118             reti
                     119             ;定时器中断服务程序
00BB                 120     Inttimer:
00BB 758CE3          121             mov     th0,#0E3h                       ;重新加载定时参数
A51 MACRO ASSEMBLER  DJSKZ                                                                03/20/2008 16:11:40 PAGE     3

00BE 758A33          122             mov     tl0,#33h
00C1 C0E0            123             push    acc
00C3 C0D0            124             push    psw                             ; 保护累加器及程序状态字的内容
00C5 D53409          125             djnz    OneSecondCounter,NotoneSecond   ;中断了125次了吗?即够1秒了吗?
00C8 75347D          126             mov     OneSecondCounter,#125           ;如够1秒则重新设置"OneSecondCounter"计数器
00CB 1200D9          127             lcall   Jiano                           ;调用减1秒的子程序
00CE 120073          128             lcall   Disshu                          ;将数据放入缓冲区
00D1                 129     NotoneSecond:
00D1 120082          130             lcall   Candis                          ;调用扫描显示子程序
00D4 D0D0            131             pop     psw
00D6 D0E0            132             pop     acc                             ;恢复累加器及程序状态字的内容
00D8 32              133             reti                                    ;中断返回
                     134     
                     135     ;
                     136     
                     137     ;*****************************************************************
                     138     ;其他子程序
                     139     ;*****************************************************************
                     140              ;将当前显示的值减1子程序
00D9 E533            141     Jiano:  mov     a,Modedis       ;取得当前值
00DB 14              142             dec     a
00DC F533            143             mov     Modedis,a
00DE B40003          144             cjne    a,#00h,Next5
00E1 1200E5          145             lcall   Alrmk           ;倒计时间到
00E4 22              146     Next5:  ret
                     147     
                     148     ;
                     149     
                     150             ;倒计时间到服务程序
00E5 C28C            151     Alrmk:  clr     tr0             ;关闭定时器
00E7 853533          152             mov     Modedis,Danqians        ;该地方,不能用a寄存器来转接?????
00EA 120073          153             lcall   Disshu          ;将数据放入缓冲区
                     154     
00ED C2B0            155             clr     RelayOut        ;启动继电器1
00EF C2B5            156             clr     RelayOut1       ;启动扬声器
00F1 7A32            157             mov     r2,#50
00F3 853533          158     lop:    mov     Modedis,Danqians        ;使用动态显示程序达到延时间效果
00F6 120073          159             lcall   Disshu          ;将数据放入缓冲区
00F9 DAF8            160             djnz    r2,lop
00FB D2B0            161             setb    RelayOut        ;启动继电器1
00FD D2B5            162             setb    RelayOut1       ;启动扬声器
00FF C28C            163             clr     tr0
0101 22              164             ret
                     165     
                     166     ;
                     167     
                     168             ;防止抖动延时   20ms
0102 7F08            169     Delayd: mov     r7,#8
0104 7E7A            170     D1:     mov     r6,#122
0106 DEFE            171             djnz    r6,$
0108 DFFA            172             djnz    r7,D1
010A 22              173             ret
                     174     
                     175             ;数码管显示间隔延时     16ms
010B 7F04            176     Delays: mov     r7,#4
010D 7EF5            177     D2:     mov     r6,#245
010F DEFE            178             djnz    r6,$
0111 DFFA            179             djnz    r7,D2
0113 22              180             ret
                     181     
                     182             end
A51 MACRO ASSEMBLER  DJSKZ                                                                03/20/2008 16:11:40 PAGE     4

SYMBOL TABLE LISTING
------ ----- -------


N A M E             T Y P E  V A L U E   ATTRIBUTES

ACC. . . . . . . .  D ADDR   00E0H   A   
ADDKEY . . . . . .  B ADDR   00B0H.4 A   
AGAIN. . . . . . .  C ADDR   0086H   A   
ALRMK. . . . . . .  C ADDR   00E5H   A   
B. . . . . . . . .  D ADDR   00F0H   A   
CANDIS . . . . . .  C ADDR   0082H   A   
D1 . . . . . . . .  C ADDR   0104H   A   
D2 . . . . . . . .  C ADDR   010DH   A   
DANQIANS . . . . .  N NUMB   0035H   A   
DAOJS. . . . . . .  B ADDR   0020H.1 A   
DECKEY . . . . . .  B ADDR   00B0H.3 A   
DELAYD . . . . . .  C ADDR   0102H   A   
DELAYS . . . . . .  C ADDR   010BH   A   
DISPLAYBUFFER. . .  N NUMB   0030H   A   
DISSHU . . . . . .  C ADDR   0073H   A   
IE . . . . . . . .  D ADDR   00A8H   A   
INTSIG . . . . . .  C ADDR   00ADH   A   
INTTIMER . . . . .  C ADDR   00BBH   A   
IT0. . . . . . . .  B ADDR   0088H.0 A   
JIANO. . . . . . .  C ADDR   00D9H   A   
LOOP . . . . . . .  C ADDR   0050H   A   
LOOP1. . . . . . .  C ADDR   0069H   A   
LOOP2. . . . . . .  C ADDR   0039H   A   
LOOP5. . . . . . .  C ADDR   003EH   A   
LOP. . . . . . . .  C ADDR   00F3H   A   
MAIN . . . . . . .  C ADDR   0020H   A   
MODEDIS. . . . . .  N NUMB   0033H   A   
NEXT . . . . . . .  C ADDR   0071H   A   
NEXT2. . . . . . .  C ADDR   0058H   A   
NEXT5. . . . . . .  C ADDR   00E4H   A   
NEXTD. . . . . . .  C ADDR   009CH   A   
NOTONESECOND . . .  C ADDR   00D1H   A   
ONESECONDCOUNTER .  N NUMB   0034H   A   
P0 . . . . . . . .  D ADDR   0080H   A   
P2 . . . . . . . .  D ADDR   00A0H   A   
P3 . . . . . . . .  D ADDR   00B0H   A   
PSW. . . . . . . .  D ADDR   00D0H   A   
RELAYOUT . . . . .  B ADDR   00B0H.0 A   
RELAYOUT1. . . . .  B ADDR   00B0H.5 A   
SP . . . . . . . .  D ADDR   0081H   A   
TAB. . . . . . . .  C ADDR   00A0H   A   
TH0. . . . . . . .  D ADDR   008CH   A   
TL0. . . . . . . .  D ADDR   008AH   A   
TMOD . . . . . . .  D ADDR   0089H   A   
TR0. . . . . . . .  B ADDR   0088H.4 A   


REGISTER BANK(S) USED: 0 

ASSEMBLY COMPLETE.  0 WARNING(S), 0 ERROR(S)

⌨️ 快捷键说明

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