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

📄 voltage.lst

📁 数字电压表实例 功能:单片机通过ADC0804实现简单的数字电压表
💻 LST
字号:
A51 MACRO ASSEMBLER  VOLTAGE                                                              06/23/2007 10:19:55 PAGE     1


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

LOC  OBJ            LINE     SOURCE

                       1     ;----------------------------------
                       2     ;                   数字电压表实例
                       3     ;          功能:单片机通过ADC0804实现简单的数字电压表
                       4     ;-----------------------------------
                       5     
                       6     ;//定义ADC的连接端口
  00B6                 7     ad_wr   equ P3.6             ;芯片选择
  00A0                 8     ad_cs   equ P2.0             ;转换开始
  00B7                 9     ad_rd   equ P3.7             ;RD=LOW,数字信号输出
  0090                10     ad_input_port   equ p1        ;定义数据位
  0059                11     Counter EQU     59H        ;计数器,显示程序通过它得知现正显示哪个数码管
  00A4                12     FIRST   EQU     P2.4      ;第一位数码管的位控制
  00A5                13     SECOND  EQU     P2.5     ;第二位数码管的位控制
  00A6                14     THEER    EQU     P2.6    ; 第三位数码管的位控制
  005A                15     DISPBUF EQU     5AH      ;显示缓冲区为5AH和5BH
                      16     
0000                  17         ORG 0000h
0000 0130             18         AJMP    main
000B                  19         ORG     000BH           ;定时器T0的入口
000B 018E             20         AJMP    DISP             ;显示程序
0030                  21         ORG 0030h
0030                  22     MAIN:
0030 75815F           23         MOV     SP,#5FH         ;设置堆栈
0033 7590FF           24         MOV     P1,#0FFH
0036 7580FF           25         MOV     P0,#0FFH
0039 75A0FF           26         MOV     P2,#0FFH         ;初始化,所显示器,LED灭
003C 758901           27         MOV     TMOD,#00000001B ;定时器T0工作于模式1(16位定时/计数模式)
003F 758CF8           28         MOV     TH0,#HIGH(65536-2000)
0042 758A30           29         MOV     TL0,#LOW(65536-2000)
0045 D28C             30         SETB    TR0               ;开定时器0
0047 D2AF             31         SETB    EA                 ;开总中断
0049 D2A9             32         SETB    ET0                ;开定时器0中断
004B 755900           33         MOV     Counter,#0          ;计数器初始化
004E                  34     LOOP:
004E 120073           35         LCALL adc_demo             ;调用AD子程序
0051 014E             36         AJMP    LOOP
                      37     
                      38     ;―――――――――――――――――――――――――
                      39     ;   启动AD转换
                      40     ;―――――――――――――――――――――――――
0053                  41     Adc_Start:
0053 C2A0             42         CLR ad_cs
0055 00               43         NOP
0056 C2B6             44         CLR ad_wr
0058 00               45         NOP
0059 D2B6             46         SETB   ad_wr
005B 00               47         NOP
005C D2A0             48         SETB   ad_cs
005E 00               49         NOP
005F 22               50         RET
                      51     ;―――――――――――――――――――――――――
                      52     ;   读AD转换
                      53     ;―――――――――――――――――――――――――
0060                  54     Adc_Read:
0060 7590FF           55         MOV AD_INPUT_PORT,#0FFH
0063 C2A0             56         CLR ad_cs
0065 00               57         NOP
0066 C2B7             58         CLR ad_rd
A51 MACRO ASSEMBLER  VOLTAGE                                                              06/23/2007 10:19:55 PAGE     2

0068 00               59         NOP
0069 00               60         NOP
006A E590             61         MOV A,AD_INPUT_PORT
006C 00               62         NOP
006D D2B7             63         SETB   ad_rd
006F 00               64         NOP
0070 D2A0             65         SETB   ad_cs
0072 22               66         RET
                      67     ;―――――――――――――――――――――――
                      68     ;  AD转换读取延时程序,显示读到的数值
                      69     ;―――――――――――――――――――――――
0073                  70     Adc_Demo:
0073 120053           71      LCALL Adc_Start
0076 1200D8           72      LCALL delay1ms
0079 120060           73      LCALL adc_read
007C 75F064           74      MOV B,#100                     ; AD转换出的值除100商为百位数
007F 84               75      DIV AB                         ; 取百位数 余数在B寄存器
0080 F55A             76      MOV DISPBUF,A                  ; 把百位存入百位寄存器DISPBUF
0082 E5F0             77      MOV A,B                        ; 余数再送A
0084 75F00A           78      MOV B,#10                      ; 余数除10商为十位数
0087 84               79      DIV AB                         ; 除法,余数在寄存器B
0088 F55B             80      MOV DISPBUF+1,A                ; A是十位数存第二位显示寄存器
008A 85F05C           81      MOV DISPBUF+2,B                ; B是个位数存第三位显示寄存器
008D 22               82      RET
                      83     
                      84     ;――――――――――――――――――――――――――――
                      85     ; ; 定时器T0的中断响应,通过中断服务程序动态扫描
                      86     ;――――――――――――――――――――――――――――――
008E                  87     DISP:                          
008E C0E0             88         PUSH    ACC                 ; ACC入栈
0090 C0D0             89         PUSH    PSW                 ; PSW入栈
0092 758CF8           90         MOV     TH0,#HIGH(65536-2000); 定时时间为2000个周期,约2170微秒
0095 758A30           91         MOV     TL0,#LOW(65536-2000)
0098 D2A4             92         SETB    FIRST
009A D2A5             93         SETB    SECOND            ; 关显示
009C D2A6             94         SETB    THEER
009E 745A             95         MOV     A,#DISPBUF        ; 显示缓冲区首地址
00A0 2559             96         ADD     A,Counter
00A2 F8               97         MOV     R0,A
00A3 E6               98         MOV     A,@R0             ; 根据计数器的值取相应的显示缓冲区的值
00A4 9000CE           99         MOV     DPTR,#DISPTAB    ; 字形表首地址
00A7 93              100         MOVC    A,@A+DPTR       ; 取字形码
00A8 F580            101         MOV     P0,A               ; 将字形码送P0位(段口)
00AA E559            102         MOV     A,Counter          ; 取计数器的值
00AC 6007            103         JZ      DISPFIRST           ; 如果是0则显示第一位
00AE 14              104         DEC     A
00AF 6008            105         JZ      DISPSECOND      ; 如果是1显示第二位
00B1 C2A6            106         CLR     THEER           ; 否则显示第3位
00B3 01BB            107         AJMP    DISPNEXT
00B5                 108     DISPFIRST:
00B5 C2A4            109         CLR     FIRST            ; 显示第一位
00B7 01BB            110         AJMP    DISPNEXT
00B9                 111     DISPSECOND:
00B9 C2A5            112         CLR     SECOND
00BB                 113     DISPNEXT:
00BB 0559            114         INC     Counter           ; 计数器加1
00BD E559            115         MOV     A,Counter
00BF 14              116         DEC     A               ; 如果计数器计到3,则让它回0
00C0 14              117         DEC     A
00C1 14              118         DEC     A
00C2 6002            119         JZ      RSTCOUNT
00C4 01C9            120         AJMP    DISPEXIT
00C6                 121     RSTCOUNT:
00C6 755900          122         MOV     Counter,#0       ; 计数器的值回0
00C9                 123     DISPEXIT:
00C9 D0D0            124         POP     PSW
A51 MACRO ASSEMBLER  VOLTAGE                                                              06/23/2007 10:19:55 PAGE     3

00CB D0E0            125         POP     ACC
00CD 32              126         RETI
00CE 287EA262        127     DISPTAB:DB 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h ; 字形代码表
00D2 7461217A                
00D6 2060                    
                     128     ;0 1 2 3 4 5 6 7 8 9
00D8                 129     DELAY1ms:                       ; 延时子程序
00D8 7F0A            130        MOV R7,#10
00DA                 131      MM:
00DA 7E32            132        MOV R6,#50
00DC DEFE            133        DJNZ R6,$  ;2us
00DE DFFA            134        DJNZ R7,MM
00E0 22              135        RET
                     136      END
                             
A51 MACRO ASSEMBLER  VOLTAGE                                                              06/23/2007 10:19:55 PAGE     4

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


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

ACC. . . . . . . .  D ADDR   00E0H   A   
ADC_DEMO . . . . .  C ADDR   0073H   A   
ADC_READ . . . . .  C ADDR   0060H   A   
ADC_START. . . . .  C ADDR   0053H   A   
AD_CS. . . . . . .  B ADDR   00A0H.0 A   
AD_INPUT_PORT. . .  D ADDR   0090H   A   
AD_RD. . . . . . .  B ADDR   00B0H.7 A   
AD_WR. . . . . . .  B ADDR   00B0H.6 A   
B. . . . . . . . .  D ADDR   00F0H   A   
COUNTER. . . . . .  N NUMB   0059H   A   
DELAY1MS . . . . .  C ADDR   00D8H   A   
DISP . . . . . . .  C ADDR   008EH   A   
DISPBUF. . . . . .  N NUMB   005AH   A   
DISPEXIT . . . . .  C ADDR   00C9H   A   
DISPFIRST. . . . .  C ADDR   00B5H   A   
DISPNEXT . . . . .  C ADDR   00BBH   A   
DISPSECOND . . . .  C ADDR   00B9H   A   
DISPTAB. . . . . .  C ADDR   00CEH   A   
EA . . . . . . . .  B ADDR   00A8H.7 A   
ET0. . . . . . . .  B ADDR   00A8H.1 A   
FIRST. . . . . . .  B ADDR   00A0H.4 A   
LOOP . . . . . . .  C ADDR   004EH   A   
MAIN . . . . . . .  C ADDR   0030H   A   
MM . . . . . . . .  C ADDR   00DAH   A   
P0 . . . . . . . .  D ADDR   0080H   A   
P1 . . . . . . . .  D ADDR   0090H   A   
P2 . . . . . . . .  D ADDR   00A0H   A   
P3 . . . . . . . .  D ADDR   00B0H   A   
PSW. . . . . . . .  D ADDR   00D0H   A   
RSTCOUNT . . . . .  C ADDR   00C6H   A   
SECOND . . . . . .  B ADDR   00A0H.5 A   
SP . . . . . . . .  D ADDR   0081H   A   
TH0. . . . . . . .  D ADDR   008CH   A   
THEER. . . . . . .  B ADDR   00A0H.6 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 + -