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

📄 main.lst

📁 TLC5620串行DAC 用51实现。调试通过
💻 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 + -