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

📄 main.lst

📁 基于TLC5617的DA转换proc
💻 LST
字号:
C51 COMPILER V7.06   MAIN                                                                  10/29/2006 14:33:43 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <stdio.h>
   2          #include <absacc.h>
   3          #include <intrins.h>
   4          #include <./Atmel/at89x52.h>
   5          #include "source.h"
   6          unsigned int Mv_To_Dat(unsigned int mv){
   7   1              #define Vref_2times   5 
   8   1              unsigned int dat;
   9   1              dat=mv*(1024/5);
  10   1              dat &=0x3ff;//10 bits is vaild.
  11   1              return dat;
  12   1      }
  13          void Spi_Write(unsigned int dat){
  14   1              unsigned char i;
  15   1              TLC_NCS=0;
  16   1              TLC_CLK_SET;
  17   1              for(i=0;i<16;i++){
  18   2                      TLC_DIN=((dat&0x8000)>0)?1:0;
  19   2                      TLC_CLK_PULSE;
  20   2                      dat<<=1;
  21   2              }
  22   1              TLC_CLK_SET;
  23   1              TLC_NCS=1;
  24   1      }
  25          #define SLOW_MODE         0X4000
  26          #define FAST_MODE         0X0000
  27          #define NORMAL_POWER_MODE 0X0000
  28          #define SAVE_POWER_MODE   0X2000
  29          void WriteA_RefreshB( unsigned int mv){/*通道A和B的模拟电压同时更新*/
  30   1              unsigned int dat;
  31   1              dat=Mv_To_Dat(mv);
  32   1              dat <<=2;
  33   1              dat |=FAST_MODE|NORMAL_POWER_MODE|0x8000;
  34   1              Spi_Write(dat);
  35   1      
  36   1      }
  37          void WriteB_DoubleBuf( unsigned int mv){/*写通道B和双缓冲寄存器*/
  38   1              unsigned int dat;
  39   1              dat=Mv_To_Dat(mv);
  40   1              dat <<=2;
  41   1              dat |=FAST_MODE|NORMAL_POWER_MODE|0x0000;
  42   1              Spi_Write(dat); 
  43   1      }
  44          void Write_DoubleBuf( unsigned int mv){/*仅写双缓冲寄存器*/
  45   1              unsigned int dat;
  46   1              dat=Mv_To_Dat(mv);
  47   1              dat <<=2;
  48   1              dat |=FAST_MODE|NORMAL_POWER_MODE|0x0001;
  49   1              Spi_Write(dat);
  50   1      }
  51          void Refresh_Two_Volt(unsigned int chla_mv,unsigned int chlb_mv){/*同时更新通道A和通道B的模拟电压值*/
  52   1              Write_DoubleBuf(chlb_mv);/*先写双缓冲寄存器的值,其对应的是通道B的电压*/
  53   1              WriteA_RefreshB(chla_mv);/*写通道A的电压,同时把双缓冲的电压值更新到B通道*/
  54   1                                                                                                               /*这就达到了同时更新两路电压的目的*/
  55   1      }
C51 COMPILER V7.06   MAIN                                                                  10/29/2006 14:33:43 PAGE 2   

  56          void Refresh_ChlA_Volt(unsigned int mv){/*只更新A的模拟电压*/
  57   1                      WriteA_RefreshB(mv);/*因为双缓冲寄存器的值没有改*/
  58   1                                          /*所以这是只更新通道A的模拟电压*/
  59   1      }
  60          void Refresh_ChlB_Volt(unsigned int mv){/*只更新B的模拟电压*/
  61   1                      WriteB_DoubleBuf(mv);/*此命令更新通道B的模拟电压值*/
  62   1                                           /*同时写双缓冲的值,这样就可以在更新其他通道时使用双缓冲寄存器中的值了,不会改变通

⌨️ 快捷键说明

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