📄 main.lst
字号:
A51 MACRO ASSEMBLER MAIN 06/23/2006 14:15:13 PAGE 1
MACRO ASSEMBLER A51 V7.09
OBJECT MODULE PLACED IN main.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE main.A51 SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;*************************************************************************
2 ; main.A51
3 ; TLC5620串行DAC例程:产生正弦波
4 ;*************************************************************************
5
6
7 ;*************************************************************************
8 ;定义I/O端口
9 ;*************************************************************************
0094 10 DAT BIT P1.4 ;串行数据
0095 11 CLK BIT P1.5 ;串行时钟,下降沿有效
0096 12 LDAC BIT P1.6 ;DAC更新锁存控制,下降沿有效
0097 13 LOAD BIT P1.7 ;串行数据装载,下降沿有效
14
15
16 ;*************************************************************************
17 ;复位和中断向量入口
18 ;*************************************************************************
19 ;复位入口
0000 20 ORG 0x0000
0000 020003 21 LJMP PreMain
22
23
24 ;*************************************************************************
25 ;程序段:PreMain
26 ;功能:进入主程序之前的初始化操作
27 ;*************************************************************************
0003 28 PreMain:
0003 75812F 29 MOV SP, #0x2F
0006 02008D 30 LJMP main
31
32
33 ;*************************************************************************
34 ;函数:Dac()
35 ;功能:发送数据至TLC5620串行DAC
36 ;参数:
37 ; addr:DAC通道地址,取值0~3,对应通道A~D
38 ; rng:附加的范围位,rng=0时,Vo不会超过Vref,rng=1时,Vo变为2倍
39 ; dat:8位DAC数据
40 ;公式:
41 ; rng=0时,Vo=Vref*(dat/256)
42 ; rng=1时,Vo=Vref*(dat/256)*2
43 ;*************************************************************************
44 ;void Dac(unsigned char addr, bit rng, unsigned char dat)
45 ;addr = R7
46 ;rng = 0x20.0
47 ;dat = R6
0009 48 Dac:
49 ;{
50 ; unsigned char n;
51 ;//发送通道地址
52 ; n = 2;
0009 7902 53 MOV R1, #2
54 ; do
000B EF 55 MOV A, R7
000C 56 Dac_do1:
57 ; {
58 ; DAT = (bit)(addr & 0x02);
A51 MACRO ASSEMBLER MAIN 06/23/2006 14:15:13 PAGE 2
59 ; addr <<= 1;
000C A2E1 60 MOV C, ACC.1
000E 9294 61 MOV DAT, C
0010 25E0 62 ADD A, ACC
63 ; CLK = 0;
64 ; CLK = 1;
0012 C295 65 CLR CLK
0014 D295 66 SETB CLK
67 ; } while ( --n != 0 );
0016 D9F4 68 DJNZ R1, Dac_do1
69 ;//发送RNG位
70 ; DAT = rng;
71 ; CLK = 0;
72 ; CLK = 1;
0018 A200 73 MOV C, 0x20.0
001A 9294 74 MOV DAT, C
001C C295 75 CLR CLK
001E D295 76 SETB CLK
77 ;//发送8位DAC数据
78 ; n = 8;
0020 7908 79 MOV R1, #8
0022 EE 80 MOV A, R6
81 ; do
0023 82 Dac_do2:
83 ; {
84 ; DAT = (bit)(dat & 0x80);
85 ; dat <<= 1;
0023 A2E7 86 MOV C, ACC.7
0025 9294 87 MOV DAT, C
0027 25E0 88 ADD A, ACC
89 ; CLK = 0;
90 ; CLK = 1;
0029 C295 91 CLR CLK
002B D295 92 SETB CLK
93 ; } while ( --n != 0 );
002D D9F4 94 DJNZ R1, Dac_do2
95 ;//装载数据
96 ; LOAD = 0;
97 ; LOAD = 1;
002F C297 98 CLR LOAD
0031 D297 99 SETB LOAD
100 ;//数据锁存到DAC转换器
101 ; LDAC = 0;
102 ; LDAC = 1;
0033 C296 103 CLR LDAC
0035 D296 104 SETB LDAC
105 ;}
0037 22 106 RET
107
108
109 ;*************************************************************************
110 ;函数:Delay()
111 ;功能:延时1ms~256ms
112 ;参数:
113 ; t>0时,延时(t)ms
114 ; t=0时,延时256ms
115 ;*************************************************************************
116 ;void Delay(unsigned char t)
117 ;t = R7
0038 118 Delay:
119 ;{
120 ; do
0038 121 Delay_do:
122 ; {
123 ; TH0 = 0xFC;
124 ; TL0 = 0x66;
A51 MACRO ASSEMBLER MAIN 06/23/2006 14:15:13 PAGE 3
125 ; TR0 = 1;
126 ; while ( !TF0 );
127 ; TR0 = 0;
128 ; TF0 = 0;
0038 758CFC 129 MOV TH0, #0xFC
003B 758A66 130 MOV TL0, #0x66
003E D28C 131 SETB TR0
0040 308DFD 132 JNB TF0, $
0043 C28C 133 CLR TR0
0045 C28D 134 CLR TF0
135 ; } while ( --t != 0 );
0047 DFEF 136 DJNZ R7, Delay_do
137 ;}
0049 22 138 RET
139
140
141 ;*************************************************************************
142 ;函数:SinWave()
143 ;功能:利用TLC5620串行DAC在通道B产生正弦波
144 ;说明:请用示波器观察SmartSOPC实验箱D5区的DACB通道
145 ;*************************************************************************
146 ;void SinWave()
004A 147 SinWave:
148 ;{
149 ; code unsigned char SinTab[] =
150 ; {
151 ; 128,147,167,185,202,218,231,241,249,253,
152 ; 255,253,249,241,231,218,202,185,167,147,
153 ; 127,108,88,70,53,37,24,14,6,2,
154 ; 0,2,6,14,24,37,53,70,88,108
155 ; };
156 ; unsigned char n;
157 ; 分配:n = R2
158 ; for (;;)
004A 159 SinWave_for1:
160 ; {
161 ; for ( n=0; n<40; n++ )
004A 7A00 162 MOV R2, #0
004C 163 SinWave_for2:
164 ; {
165 ; Dac(1,0,SinTab[n]);
004C EA 166 MOV A, R2
004D 900065 167 MOV DPTR, #SinTab
0050 93 168 MOVC A, @A+DPTR
0051 FE 169 MOV R6, A
0052 C200 170 CLR 0x20.0
0054 7F01 171 MOV R7, #1
0056 120009 172 LCALL Dac
173 ; Delay(5);
0059 7F05 174 MOV R7, #5
005B 120038 175 LCALL Delay
176 ; }
005E 0A 177 INC R2
005F BA28EA 178 CJNE R2, #40, SinWave_for2
179 ; }
0062 80E6 180 SJMP SinWave_for1
181 ;}
0064 22 182 RET
0065 183 SinTab:
0065 8093A7B9 184 DB 128,147,167,185,202,218,231,241,249,253
0069 CADAE7F1
006D F9FD
006F FFFDF9F1 185 DB 255,253,249,241,231,218,202,185,167,147
0073 E7DACAB9
0077 A793
0079 7F6C5846 186 DB 127,108,88,70,53,37,24,14,6,2
A51 MACRO ASSEMBLER MAIN 06/23/2006 14:15:13 PAGE 4
007D 3525180E
0081 0602
0083 0002060E 187 DB 0,2,6,14,24,37,53,70,88,108
0087 18253546
008B 586C
188
189
190 ;*************************************************************************
191 ;函数:void main()
192 ;功能:主函数
193 ;*************************************************************************
194 ;void main()
008D 195 main:
196 ;{
197 ; TMOD &= 0xF0;
198 ; TMOD |= 0x01;
008D 5389F0 199 ANL TMOD, #0xF0
0090 438901 200 ORL TMOD, #0x01
201 ; DAT = 1;
202 ; CLK = 1;
203 ; LDAC = 1;
204 ; LOAD = 1;
0093 D294 205 SETB DAT
0095 D295 206 SETB CLK
0097 D296 207 SETB LDAC
0099 D297 208 SETB LOAD
209 ; SinWave();
009B 12004A 210 LCALL SinWave
211 ; for (;;);
009E 80FE 212 SJMP $
213 ;}
214
215
216 ;*************************************************************************
217 ;程序结束
218 ;*************************************************************************
219 END
A51 MACRO ASSEMBLER MAIN 06/23/2006 14:15:13 PAGE 5
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
CLK. . . . . . . . B ADDR 0090H.5 A
DAC. . . . . . . . C ADDR 0009H A
DAC_DO1. . . . . . C ADDR 000CH A
DAC_DO2. . . . . . C ADDR 0023H A
DAT. . . . . . . . B ADDR 0090H.4 A
DELAY. . . . . . . C ADDR 0038H A
DELAY_DO . . . . . C ADDR 0038H A
LDAC . . . . . . . B ADDR 0090H.6 A
LOAD . . . . . . . B ADDR 0090H.7 A
MAIN . . . . . . . C ADDR 008DH A
P1 . . . . . . . . D ADDR 0090H A
PREMAIN. . . . . . C ADDR 0003H A
SINTAB . . . . . . C ADDR 0065H A
SINWAVE. . . . . . C ADDR 004AH A
SINWAVE_FOR1 . . . C ADDR 004AH A
SINWAVE_FOR2 . . . C ADDR 004CH A
SP . . . . . . . . D ADDR 0081H A
TF0. . . . . . . . B ADDR 0088H.5 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 + -