📄 dac0832.lst
字号:
A51 MACRO ASSEMBLER DAC0832 09/13/2007 03:37:31 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN DAC0832.OBJ
ASSEMBLER INVOKED BY: C:\tools\Keil\C51\BIN\A51.EXE DAC0832.ASM SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;实验名称:串口发送一个要输出的电压(00--FF)
2 ; 功能:模数转换输出一个当前串口发出的电压
3 ;输出的电压为V=5*KK/255。其中KK为串口接收到的二进制数
4 ; 作者:http://www.mcuprog.com
5 ; 05-02-01
6 ;***********************************************************
7 ;***********************************************************
00A2 8 E BIT P2.2 ;LCD口线的定义
00A1 9 RW BIT P2.1
00A0 10 RS BIT P2.0
0080 11 LCDPORT EQU P0
12
13 ;DAC0832的引脚
00B4 14 DAC_WR BIT P3.4
00B3 15 DAC_CS BIT P3.3
16
002E 17 CMD_BYTE EQU 2EH
002F 18 DAT_BYTE EQU 2FH
0030 19 DABL EQU 30H ;当前DA的变量(00到255间),从串口接收
0031 20 LEDBAI EQU 31H ;显示的百
0032 21 LEDSHI EQU 32H ;显示的十
0033 22 LEDGE EQU 33H ;显示的个
0035 23 KEYTIME EQU 35H
24
25
0000 26 KEYBIT BIT 00H ;
0001 27 RS232OKBIT BIT 01H ;串口接收到数据
0000 28 ORG 0000H
0000 0130 29 AJMP MAIN
000B 30 ORG 000BH
000B 2100 31 AJMP TIME0_1
0023 32 ORG 0023H
0023 C298 33 RS232: CLR RI
0025 E599 34 MOV A,SBUF
0027 F530 35 MOV DABL,A
0029 D201 36 SETB RS232OKBIT
002B 32 37 RETI
38
39 ;以下为主程序的开始
0030 40 ORG 0030H
0030 752000 41 MAIN: MOV 20H,#00H
0033 120180 42 LCALL INITLCD
0036 753014 43 MOV DABL,#20
0039 753504 44 MOV KEYTIME,#04H
003C 752E80 45 MOV CMD_BYTE,#80H
003F 12015C 46 LCALL WRITE_CMD
0042 1201AB 47 LCALL DELAY0
0045 752F44 48 MOV DAT_BYTE,#"D"
0048 12016E 49 LCALL WRITE_DAT
004B 752F41 50 MOV DAT_BYTE,#"A"
004E 12016E 51 LCALL WRITE_DAT
0051 752F43 52 MOV DAT_BYTE,#"C"
0054 12016E 53 LCALL WRITE_DAT
0057 752F3A 54 MOV DAT_BYTE,#":"
005A 12016E 55 LCALL WRITE_DAT
005D 758CEE 56 MOV TH0,#0EEH ;16位的定时器,定时5MS
0060 758A00 57 MOV TL0,#00H
0063 758921 58 MOV TMOD,#21H
A51 MACRO ASSEMBLER DAC0832 09/13/2007 03:37:31 PAGE 2
0066 758DFD 59 MOV TH1,#0FDH ;波特率9600
0069 758BFD 60 MOV TL1,#0FDH
006C 759850 61 MOV SCON,#50H
006F D28E 62 SETB TR1
0071 D29C 63 SETB REN
0073 D28C 64 SETB TR0
0075 75A892 65 MOV IE,#92H ;定时器0中断
0078 D201 66 SETB RS232OKBIT
007A 80FE 67 SJMP $
68
0100 69 ORG 0100H
0100 758CEE 70 TIME0_1: MOV TH0,#0EEH
0103 758A00 71 MOV TL0,#00H
0106 D53512 72 DJNZ KEYTIME,TIME0_RE
0109 753504 73 MOV KEYTIME,#04H
010C 7590DF 74 MOV P1,#0DFH
010F 12011C 75 LCALL KEYSCAN
0112 12014D 76 LCALL DAC0832
0115 1201CA 77 LCALL JSDPBL
0118 1201B1 78 LCALL DISPDPBL
011B 32 79 TIME0_RE: RETI
80
81 ;按键扫描
011C 7590FF 82 KEYSCAN: MOV P1,#0FFH
011F 209011 83 NEXT_UP: JB P1.0,NEXT_DN ;+键
0122 200024 84 JB KEYBIT,SCAN_RE
0125 D200 85 SETB KEYBIT
0127 0530 86 INC DABL
0129 E530 87 MOV A,DABL
012B B4C91B 88 CJNE A,#201,SCAN_RE ;大于200反回20
012E 75300A 89 MOV DABL,#10
0131 2149 90 AJMP SCAN_RE
0133 209111 91 NEXT_DN: JB P1.1,NEXT_NC ;-键
0136 200010 92 JB KEYBIT,SCAN_RE
0139 D200 93 SETB KEYBIT
013B 1530 94 DEC DABL
013D E530 95 MOV A,DABL
013F B41307 96 CJNE A,#19,SCAN_RE ;小于20反回200
0142 7530C8 97 MOV DABL,#200
0145 2149 98 AJMP SCAN_RE
0147 C200 99 NEXT_NC: CLR KEYBIT ;清标志用于等待下一次按键
0149 7590FF 100 SCAN_RE: MOV P1,#0FFH
014C 22 101 RET
102
103
104 ;以下为AD转换程序
014D C2B3 105 DAC0832 : CLR DAC_CS
014F E530 106 MOV A,DABL
0151 F580 107 MOV P0,A
0153 C2B4 108 CLR DAC_WR
0155 00 109 NOP
0156 00 110 NOP
0157 D2B4 111 SETB DAC_WR
0159 D2B3 112 SETB DAC_CS
015B 22 113 RET
114
115 ;LCD1602要用到的一些子程序
116 ;写命令(入口参数CMD_BYTE)
015C C2A0 117 WRITE_CMD: CLR RS
015E C2A1 118 CLR RW
0160 E52E 119 MOV A,CMD_BYTE
0162 F580 120 MOV LCDPORT,A
0164 D2A2 121 SETB E
0166 00 122 NOP
0167 00 123 NOP
0168 C2A2 124 CLR E
A51 MACRO ASSEMBLER DAC0832 09/13/2007 03:37:31 PAGE 3
016A 1201AB 125 LCALL DELAY0
016D 22 126 RET
127
128 ;写显示数据(入口参数DAT_BYTE)
016E D2A0 129 WRITE_DAT: SETB RS
0170 C2A1 130 CLR RW
0172 E52F 131 MOV A,DAT_BYTE
0174 F580 132 MOV LCDPORT,A
0176 D2A2 133 SETB E
0178 00 134 NOP
0179 00 135 NOP
017A C2A2 136 CLR E
017C 1201AB 137 LCALL DELAY0
017F 22 138 RET
139
140 ;LCD显示初始化
0180 752E30 141 INITLCD: MOV CMD_BYTE,#30H
0183 12015C 142 LCALL WRITE_CMD
0186 752E30 143 MOV CMD_BYTE,#30H
0189 12015C 144 LCALL WRITE_CMD
018C 752E30 145 MOV CMD_BYTE,#30H
018F 12015C 146 LCALL WRITE_CMD
0192 752E38 147 MOV CMD_BYTE,#38H ;设定工作方式
0195 12015C 148 LCALL WRITE_CMD
0198 752E0C 149 MOV CMD_BYTE,#0CH ;显示状态设置
019B 12015C 150 LCALL WRITE_CMD
019E 752E01 151 MOV CMD_BYTE,#01H ;清屏
01A1 12015C 152 LCALL WRITE_CMD
01A4 752E06 153 MOV CMD_BYTE,#06H ;输入方式设置
01A7 12015C 154 LCALL WRITE_CMD
01AA 22 155 RET
156 ;延时子程序
01AB 7DA0 157 DELAY0: MOV R5,#0A0H
01AD 00 158 DELAY1: NOP
01AE DDFD 159 DJNZ R5,DELAY1
01B0 22 160 RET
161
162 ;显示变量
01B1 752E85 163 DISPDPBL: MOV CMD_BYTE,#85H
01B4 12015C 164 LCALL WRITE_CMD
01B7 85312F 165 MOV DAT_BYTE,LEDBAI
01BA 12016E 166 LCALL WRITE_DAT
01BD 85322F 167 MOV DAT_BYTE,LEDSHI
01C0 12016E 168 LCALL WRITE_DAT
01C3 85332F 169 MOV DAT_BYTE,LEDGE
01C6 12016E 170 LCALL WRITE_DAT
01C9 22 171 RET
172
173 ;计算显示的值
01CA E530 174 JSDPBL: MOV A,DABL
01CC 75F064 175 MOV B,#64H
01CF 84 176 DIV AB
01D0 4430 177 ORL A,#30H
01D2 F531 178 MOV LEDBAI,A
01D4 E5F0 179 MOV A,B
01D6 75F00A 180 MOV B,#0AH
01D9 84 181 DIV AB
01DA 4430 182 ORL A,#30H
01DC F532 183 MOV LEDSHI,A
01DE E5F0 184 MOV A,B
01E0 4430 185 ORL A,#30H
01E2 F533 186 MOV LEDGE,A
01E4 22 187 RET
188 END
A51 MACRO ASSEMBLER DAC0832 09/13/2007 03:37:31 PAGE 4
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
B. . . . . . . . . D ADDR 00F0H A
CMD_BYTE . . . . . N NUMB 002EH A
DABL . . . . . . . N NUMB 0030H A
DAC0832. . . . . . C ADDR 014DH A
DAC_CS . . . . . . B ADDR 00B0H.3 A
DAC_WR . . . . . . B ADDR 00B0H.4 A
DAT_BYTE . . . . . N NUMB 002FH A
DELAY0 . . . . . . C ADDR 01ABH A
DELAY1 . . . . . . C ADDR 01ADH A
DISPDPBL . . . . . C ADDR 01B1H A
E. . . . . . . . . B ADDR 00A0H.2 A
IE . . . . . . . . D ADDR 00A8H A
INITLCD. . . . . . C ADDR 0180H A
JSDPBL . . . . . . C ADDR 01CAH A
KEYBIT . . . . . . B ADDR 0020H.0 A
KEYSCAN. . . . . . C ADDR 011CH A
KEYTIME. . . . . . N NUMB 0035H A
LCDPORT. . . . . . D ADDR 0080H A
LEDBAI . . . . . . N NUMB 0031H A
LEDGE. . . . . . . N NUMB 0033H A
LEDSHI . . . . . . N NUMB 0032H A
MAIN . . . . . . . C ADDR 0030H A
NEXT_DN. . . . . . C ADDR 0133H A
NEXT_NC. . . . . . C ADDR 0147H A
NEXT_UP. . . . . . C ADDR 011FH A
P0 . . . . . . . . D ADDR 0080H A
P1 . . . . . . . . D ADDR 0090H A
P2 . . . . . . . . D ADDR 00A0H A
P3 . . . . . . . . D ADDR 00B0H A
REN. . . . . . . . B ADDR 0098H.4 A
RI . . . . . . . . B ADDR 0098H.0 A
RS . . . . . . . . B ADDR 00A0H.0 A
RS232. . . . . . . C ADDR 0023H A
RS232OKBIT . . . . B ADDR 0020H.1 A
RW . . . . . . . . B ADDR 00A0H.1 A
SBUF . . . . . . . D ADDR 0099H A
SCAN_RE. . . . . . C ADDR 0149H A
SCON . . . . . . . D ADDR 0098H A
TH0. . . . . . . . D ADDR 008CH A
TH1. . . . . . . . D ADDR 008DH A
TIME0_1. . . . . . C ADDR 0100H A
TIME0_RE . . . . . C ADDR 011BH A
TL0. . . . . . . . D ADDR 008AH A
TL1. . . . . . . . D ADDR 008BH A
TMOD . . . . . . . D ADDR 0089H A
TR0. . . . . . . . B ADDR 0088H.4 A
TR1. . . . . . . . B ADDR 0088H.6 A
WRITE_CMD. . . . . C ADDR 015CH A
WRITE_DAT. . . . . C ADDR 016EH A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -