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

📄 ad7710.lst

📁 基于CAN总线通讯的AD7710数摸转换芯片的摸拟量的采集程序
💻 LST
字号:
C51 COMPILER V3.20,  SN-0  AD7710                                                          07/11/02  14:13:06  PAGE 1   


DOS C51 COMPILER V3.20, COMPILATION OF MODULE AD7710
OBJECT MODULE PLACED IN AD7710.OBJ
COMPILER INVOKED BY: D:\QTH8052F\BIN\C51.EXE AD7710.C OBJECTEXTEND DB SB

stmt level    source

   1          /*
               * ad7710.c
               *
               * AD数据采集
               *
               * 
               *
               *
               *						陈真勇(SA01010010)
               *						w3wind@sina.com or
               *						zychen@ustc.edu.cn
               *						中国科学技术大学自动化系
               *						2002/6/12
               */
  15          
  16          #include "link.h"
  17          #include "type.h"
  18          #include "delay.h"
  19          #include "watchdog.h"
  20          #include <intrins.h>
  21          #include "ad7710.h"
  22          
  23          /* external-clocking mode. clock in frequency is 10MHz */
  24          /* note: 在写完控制字后,程序将等待DRDY变低。
              如果此时出现故障导致DRDY无法变
              低,则看门狗也救不了。*/
  27          
  28          
  29          BYTE ctrl_byte[3];/*存放控制字,局部变量*/
  30          UINT data_word;/*存放数据,局部变量*/
  31          
  32          UINT read_ad()
  33          {
  34   1      	BYTE i;
  35   1      	UINT mask=0x8000;
  36   1      	data_word=0;
  37   1      	/* wait drdy low */
  38   1      	while(ADDRDY){;}
  39   1      
  40   1      	EA = 0;
  41   1      
  42   1      	/* make A0 high */
  43   1      	ADA0=1;
  44   1      
  45   1      	/* wait t22. at least 0.2 us */
  46   1      	_nop_();
  47   1      	/* bring rfs low */
  48   1      	ADRFS=0;
  49   1      
  50   1      	/* make 16 falling_edge of sclk and read 16 bits data from sdata */
  51   1      	for(i=0;i<16;i++){
  52   2      		ADSCLK=0;
  53   2      		if(ADSDATA){
  54   3      			data_word |= mask;
  55   3      		}
C51 COMPILER V3.20,  SN-0  AD7710                                                          07/11/02  14:13:06  PAGE 2   

  56   2      		ADSCLK=1;
  57   2      		mask >>= 1;
  58   2      	}
  59   1      	/* make rfs high */
  60   1      	ADRFS=1;
  61   1      	ADA0=1;
  62   1      
  63   1      	EA = 1;
  64   1      	
  65   1      	return data_word;
  66   1      }
  67          /* both p1 and p2 only use bit11 to bit0 */
  68          void write_ctrl_reg() using 0
  69          {
  70   1      	BYTE i,j,mask;
  71   1      
  72   1      	EA = 0;
  73   1      
  74   1      	ADRFS=1;	/* disable RFS */
  75   1      	/* be sure that sclk is low */
  76   1      	ADSCLK=1;
  77   1      
  78   1      	/* make A0 low */
  79   1      	ADA0=0;
  80   1      	/* wait t32 . 0 at least*/
  81   1      	_nop_();
  82   1      	/* make tfs low */
  83   1      	ADTFS=0;
  84   1      
  85   1      	for(i=0;i<3;i++){
  86   2      		mask=0x80;
  87   2      		for(j=0;j<8;j++){
  88   3      			/* send a bit to sdata */
  89   3      			ADSDATA=(ctrl_byte[i]&mask)?1:0;
  90   3      
  91   3      			ADSCLK=0;
  92   3      			/* make sclk high for t26 */
  93   3      			mask >>= 1;	
  94   3      			/* make sclk low for t27 */
  95   3      			ADSCLK=1;
  96   3      
  97   3      		}
  98   2      	}
  99   1      	
 100   1      	/* wait t34 */
 101   1      	
 102   1      	/* make tfs high */
 103   1      	ADTFS=1;
 104   1      
 105   1      	EA = 1;
 106   1      
 107   1      	/* wait until DRDY to be low */
 108   1      	do{
 109   2      		delay(50);
 110   2      		clear_watchdog();
 111   2      	}while(ADDRDY);
 112   1      }
 113          
 114          /* whenever there is a change in the ambient operating temperature or
              supply voltage, a calibration routine should be initiated. it should also 
              be initiated if there is a change in the selected gain,filter notch or
              bipolar/unipolar input range. */
C51 COMPILER V3.20,  SN-0  AD7710                                                          07/11/02  14:13:06  PAGE 3   

 118          /* control register
              	MD2 MD1 MD0 G2   G1 G0 CH PD   WL IO BO B/U
              	0   0   1   #    #  #  #  0    0  0  0  #
              	FS11 .............................. FS0
              	0                                     0
              */
 124          /* set channel gain
               * ch is 0 or 1
               * gain is 0~7,stand for 2^gain
               */
 128          void set_mode(BYTE ch,struct ad7710_ch *param)
 129          {
 130   1      	ctrl_byte[0]=(param->cal_mode<<5) + (param->scale<<2) + (ch?2:0);
 131   1      	ctrl_byte[1]=(param->unipolar?0x10:0x00) + param->hi_cutoff;
 132   1      	ctrl_byte[2]=param->low_cutoff;		/* changed by zychen */
 133   1      
 134   1      	write_ctrl_reg();
 135   1      }
 136          
 137          #if 0
              
              /*似乎读取另一个通道值之前一定要进行校正,不然读到的值不对。
              既然如此,就在每次读数据之前触发校正,因此就不需要下面这个函
              数了。
              */
              
              void init_7710(struct ad7710_ch *ch0,struct ad7710_ch *ch1)
              {
              	/* 校正 */
              	set_mode(0,ch0);
              	set_mode(1,ch1);
              
              	/* 转入正常工作状态 */
              	ch0->cal_mode = 0;/*normal mode*/
              	ch1->cal_mode = 0;
              
              	set_mode(0,ch0);
              	set_mode(1,ch1);
              }
              #endif
C51 COMPILER V3.20,  SN-0  AD7710                                                          07/11/02  14:13:06  PAGE 4   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


CANLAMP. . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0096H  1
P1 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0090H  1
P2 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00A0H  1
P3 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00B0H  1
T0 . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B4H  1
AC . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D6H  1
T1 . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B5H  1
T2 . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0090H  1
EA . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00AFH  1
DQ . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0097H  1
T2IE . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00CDH  1
RD . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B7H  1
ES . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00ACH  1
RI . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0098H  1
INT0 . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B2H  1
CY . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D7H  1
BGEN . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00CBH  1
TI . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0099H  1
INT1 . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B3H  1
T2IP . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00CEH  1
PS . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00BCH  1
T2EX . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0091H  1
OV . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D2H  1
C_T2 . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00C9H  1
WR . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B6H  1
_?delay. . . . . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
WDCS . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0090H  1
ADSCLK . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B1H  1
_set_mode. . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     -----  -----
  ch . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
  param. . . . . . . . . . . . . . . .  * REG *  DATA   PTR      0001H  3
WDSI . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0091H  1
ADDRDY . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B3H  1
data_word. . . . . . . . . . . . . . .  PUBLIC   DATA   U_INT    0000H  2
X25045SCK. . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0092H  1
IE0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0089H  1
IE1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008BH  1
clear_watchdog . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
ad7710_ch. . . . . . . . . . . . . . .  * TAG *  -----  STRUCT   -----  6
  cal_mode . . . . . . . . . . . . . .  MEMBER   -----  U_CHAR   0000H  1
  scale. . . . . . . . . . . . . . . .  MEMBER   -----  U_INT    0001H  2
  unipolar . . . . . . . . . . . . . .  MEMBER   -----  U_CHAR   0003H  1
  hi_cutoff. . . . . . . . . . . . . .  MEMBER   -----  U_CHAR   0004H  1
  low_cutoff . . . . . . . . . . . . .  MEMBER   -----  U_CHAR   0005H  1
read_ad. . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     -----  -----
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0003H  1
  mask . . . . . . . . . . . . . . . .  * REG *  DATA   U_INT    0004H  2
CP_RL2 . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00C8H  1
ET0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00A9H  1
ET1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00ABH  1
TF0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008DH  1
ET2. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00ADH  1
TF1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008FH  1
TF2. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00CFH  1
RB8. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009AH  1
EX0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00A8H  1
IT0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0088H  1
C51 COMPILER V3.20,  SN-0  AD7710                                                          07/11/02  14:13:06  PAGE 5   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


ctrl_byte. . . . . . . . . . . . . . .  PUBLIC   DATA   ARRAY    0002H  3
TB8. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009BH  1
EX1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00AAH  1
IT1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008AH  1
P. . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D0H  1
SM0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009FH  1
SM1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009EH  1
SM2. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009DH  1
PT0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B9H  1
PT1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00BBH  1
RS0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D3H  1
PT2. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00BDH  1
TR0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008CH  1
RS1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D4H  1
TR1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008EH  1
TR2. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00CAH  1
PX0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B8H  1
PX1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00BAH  1
REN. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009CH  1
write_ctrl_reg . . . . . . . . . . . .  PUBLIC   CODE   PROC     -----  -----
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
  j. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0005H  1
  mask . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0006H  1
CANCS. . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00A7H  1
HC245G . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00A6H  1
RXD. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B0H  1
X25045CS . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0090H  1
TXD. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B1H  1
ADRFS. . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0095H  1
T2RSE. . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00CCH  1
ADTFS. . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B4H  1
ADSDATA. . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B0H  1
F0 . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D5H  1
X25045SI . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0091H  1
ADA0 . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0094H  1
X25045SO . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0093H  1
WDSCK. . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0092H  1


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    213    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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