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

📄 02_adc0832.lst

📁 用AT89S52和DAC0832模数转换器实现了数字电压表的功能
💻 LST
📖 第 1 页 / 共 2 页
字号:
                     144     ;---------------------------------------------------
00C1                 145     LCDP2:                    
00C1 C0E0            146               PUSH  ACC        ;入栈保护A
00C3 E5F0            147               MOV  A,B         ;设置显示地址
00C5 24C0            148               ADD  A,#0C0H     ;设置LCD的第二行地址
00C7 11A2            149               CALL  WCOM       ;写入命令
00C9 D0E0            150               POP  ACC         ;由堆栈取出A
00CB 11AF            151               CALL  WDATA      ;写入数据
00CD 22              152               RET
                     153     ;=================================================
                     154     ;ASCII 转换并在第二行显示数字子程序
                     155     ;=================================================
00CE                 156     LCD_CONV:
00CE EC              157               MOV  A,R4          ;加载数据
00CF 75200A          158               MOV  LCD_X,#10     ;设置位置
00D2 11E3            159               CALL  SHOW_DIG2A   ;显示数据
00D4 0520            160               INC  LCD_X         ;设置位置
00D6 742E            161               MOV  A,#'.'        
00D8 8520F0          162               MOV  B,LCD_X           
00DB 11C1            163               CALL  LCDP2        ;显示小数点
00DD ED              164               MOV  A,R5          ;加载数据
00DE 0520            165               INC  LCD_X         ;设置位置
00E0 11F1            166               CALL  SHOW_DIG2B   ;显示数据
00E2 22              167               RET
A51 MACRO ASSEMBLER  02_ADC0832                                                           02/14/2009 11:03:48 PAGE     4

                     168     ;---------------------------------------
                     169     ;整数部分转换为ASCII码,送显示
                     170     ;只显示一位数
                     171     ;---------------------------------------
00E3                 172     SHOW_DIG2A:
00E3 75F010          173               MOV  B,#16
00E6 84              174               DIV  AB
00E7 E5F0            175               MOV  A,B        ;只取整数部分的个位
00E9 2430            176               ADD  A,#30H     ;转换为ASCII码
00EB 8520F0          177               MOV  B,LCD_X    ;地址变量送B
00EE 11C1            178               CALL  LCDP2     ;送显示
00F0 22              179               RET
                     180     ;---------------------------------------
                     181     ;小数部分转换为ASCII码,送显示
                     182     ;显示两位数
                     183     ;---------------------------------------
00F1                 184     SHOW_DIG2B:
00F1 75F010          185               MOV  B,#16
00F4 84              186               DIV  AB
00F5 2430            187               ADD  A,#30H     ;转换为ASCII码
00F7 C0F0            188               PUSH  B
00F9 8520F0          189               MOV  B,LCD_X    ;地址变量送B
00FC 11C1            190               CALL  LCDP2     ;送显示
00FE D0F0            191               POP  B
0100 E5F0            192               MOV  A,B
0102 2430            193               ADD  A,#30H     ;转换为ASCII码
0104 0520            194               INC  LCD_X
0106 8520F0          195               MOV  B,LCD_X    ;地址变量送B
0109 11C1            196               CALL  LCDP2     ;送显示
010B 22              197               RET
                     198     ;=========================================================
                     199     ;AD0832 初始化与AD转换子程序
                     200     ;(A)=AD转换值
                     201     ;=========================================================
010C                 202     AD_CONV:                       
010C D295            203                 SETB AD_CS          ;一个转换周期开始
010E C296            204                 CLR  AD_CLK
0110 C295            205                 CLR  AD_CS          ;CS置0,片选有效
0112 D297            206                 SETB AD_DAT         ;DI置1,起始位
0114 00              207                 NOP
0115 D296            208                 SETB AD_CLK         ;第一个脉冲
0117 C297            209                 CLR  AD_DAT         ;在负跳变之前加一个DI反转操作
0119 C296            210                 CLR  AD_CLK
011B D297            211                 SETB AD_DAT         ;DI置1,设为单通道
011D 00              212                 NOP
011E D296            213                 SETB AD_CLK         ;第二个脉冲
0120 C297            214                 CLR  AD_DAT
0122 C296            215                 CLR  AD_CLK
0124 C297            216                 CLR  AD_DAT         ;DI置0,选择通道0
0126 00              217                 NOP
0127 D296            218                 SETB AD_CLK         ;第三个脉冲
0129 D297            219                 SETB AD_DAT
012B C296            220                 CLR  AD_CLK
012D 00              221                 NOP
012E D296            222                 SETB AD_CLK         ; 第四个脉冲
0130 7908            223                 MOV  R1,#08H        ;计数器初值,读取8位数据,
0132 C296            224     AD_READ:    CLR  AD_CLK         ;下降沿
0134 A297            225                 MOV  C,AD_DAT       ;读取DO端数据
0136 33              226                 RLC A               ;C移入A,高位在前
0137 D296            227                 SETB AD_CLK         ;下一个脉冲
0139 D9F7            228                 DJNZ R1,AD_READ     ;没读完继续
013B D295            229                 SETB  AD_CS
013D 22              230                 RET
                     231     ;====================================================
                     232     ;AD转换值处理子程序
                     233     ;入口:(A) =AD转换值
A51 MACRO ASSEMBLER  02_ADC0832                                                           02/14/2009 11:03:48 PAGE     5

                     234     ;出口:处理后的数据 (R4)=高位,(R5)=低位
                     235     ;====================================================
013E                 236     AD_CHULI:
013E C3              237                 CLR  C
013F 7D00            238                 MOV  R5,#00H    ;十进制转换的低位寄存器
0141 7C00            239                 MOV  R4,#00H    ;十进制转换的高位寄存器
0143 7B08            240                 MOV  R3,#08H    ;十进制调整的次数
0145                 241     AD_CHULI1:
0145 33              242                 RLC  A
0146 FA              243                 MOV  R2,A           ;送 R2 保存
0147 ED              244                 MOV  A,R5           ;(R5)乘2加C
0148 3D              245                 ADDC  A,R5
0149 D4              246                 DA  A               ;做十进制调整
014A FD              247                 MOV  R5,A           ;结果存回R5
014B EC              248                 MOV  A,R4           ;(R4)乘2加C
014C 3C              249                 ADDC  A,R4
014D FC              250                 MOV  R4,A           ;结果存回R4
014E EA              251                 MOV  A,R2
014F DBF4            252                 DJNZ  R3,AD_CHULI1  ;是否转换完?
0151 ED              253                 MOV  A,R5           ;(R5)乘2
0152 2D              254                 ADD  A,R5
0153 D4              255                 DA  A
0154 FD              256                 MOV  R5,A           ;结果存回R5
0155 EC              257                 MOV  A,R4
0156 3C              258                 ADDC  A,R4          ;(R4)乘2加C
0157 D4              259                 DA   A
0158 FC              260                 MOV  R4,A           ;结果存回R4
0159 22              261                 RET
                     262     ;---------------------------------------------------
                     263                 END             ;结束
A51 MACRO ASSEMBLER  02_ADC0832                                                           02/14/2009 11:03:48 PAGE     6

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


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

ACC. . . . . . . .  D ADDR   00E0H   A   
AD_CHULI . . . . .  C ADDR   013EH   A   
AD_CHULI1. . . . .  C ADDR   0145H   A   
AD_CLK . . . . . .  B ADDR   0090H.6 A   
AD_CONV. . . . . .  C ADDR   010CH   A   
AD_CS. . . . . . .  B ADDR   0090H.5 A   
AD_DAT . . . . . .  B ADDR   0090H.7 A   
AD_READ. . . . . .  C ADDR   0132H   A   
B. . . . . . . . .  D ADDR   00F0H   A   
CL1. . . . . . . .  C ADDR   009BH   A   
CLR_LINE . . . . .  C ADDR   0099H   A   
DEL1 . . . . . . .  C ADDR   006DH   A   
DELAY0 . . . . . .  C ADDR   00BCH   A   
DELAY1 . . . . . .  C ADDR   006BH   A   
FILL . . . . . . .  C ADDR   008DH   A   
INFO1. . . . . . .  C ADDR   002AH   A   
INFO2. . . . . . .  C ADDR   003BH   A   
INIT_LCD . . . . .  C ADDR   004CH   A   
LC1. . . . . . . .  C ADDR   0093H   A   
LCDP2. . . . . . .  C ADDR   00C1H   A   
LCD_CONV . . . . .  C ADDR   00CEH   A   
LCD_EN . . . . . .  B ADDR   00A0H.7 A   
LCD_RS . . . . . .  B ADDR   00A0H.5 A   
LCD_RW . . . . . .  B ADDR   00A0H.6 A   
LCD_SHOW . . . . .  C ADDR   0074H   A   
LCD_X. . . . . . .  N NUMB   0020H   A   
LINE1. . . . . . .  C ADDR   0077H   A   
LINE2. . . . . . .  C ADDR   0083H   A   
P0 . . . . . . . .  D ADDR   0080H   A   
P1 . . . . . . . .  D ADDR   0090H   A   
P2 . . . . . . . .  D ADDR   00A0H   A   
SET_LCD. . . . . .  C ADDR   0015H   A   
SHOW_DIG2A . . . .  C ADDR   00E3H   A   
SHOW_DIG2B . . . .  C ADDR   00F1H   A   
SP . . . . . . . .  D ADDR   0081H   A   
START. . . . . . .  C ADDR   0002H   A   
START1 . . . . . .  C ADDR   000DH   A   
WCOM . . . . . . .  C ADDR   00A2H   A   
WDATA. . . . . . .  C ADDR   00AFH   A   


REGISTER BANK(S) USED: 0 

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

⌨️ 快捷键说明

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