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

📄 module.lst

📁 CAN__组建现场总线系统设计技术(光盘)
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V3.20,  SN-0  MODULE                                                          07/11/02  14:13:20  PAGE 1   


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

stmt level    source

   1          /* module.c
               *
               * main program
               * only for AD7710 module
               *						2002/3/28
               */ 
   7          
   8          #include "type.h"
   9          #include <reg52.h>
  10          #include <intrins.h>
  11          
  12          #include "version.h"
  13          #include "link.h"
  14          #include "sja.h"
  15          #include "ad7710.h"
  16          #include "watchdog.h"
  17          #include "delay.h"
  18          #include "exp.h"
  19          
  20          
  21          
  22          
  23          
  24          
  25          /*==================================================================
              		Main
              ==================================================================*/
  28          
  29          /*数据采集是双缓冲的,采集的数据放在ad_val和cool_temp中,
              而外部读取的是在ad_val_bk和cool_temp_bk中。这为保证了数据
              的一致性,并且对数据进行修正成为可能。*/
  32          UINT ad_val[2];/* 2 channels */
  33          UINT cool_temp;
  34          
  35          UINT ad_val_bk[2];
  36          UINT cool_temp_bk;
  37          
  38          
  39          BYTE cool_temperature[2];/*将cool_temp_bk中的值转换成实际值*/
  40          	/*实际室温值=
              	 cool_temperature[1] + 
              	cool_temperature[0]/16.0 */
  43          
  44          static BYTE reset_flag = 0;/*复位信号。非0时系统将复位*/
  45          
  46          
  47          /*对AD7710的两个通道的设定参数存放在下面的结构中*/
  48          struct ad7710_ch ad7710_channel[2]={{1,7,1,0x07,0xD0},{1,7,1,0x07,0xD0}};
  49          
  50          
  51          /*
               *
               */
  54          void data_sample()/*采集AD数据和室温数据*/
  55          { 
C51 COMPILER V3.20,  SN-0  MODULE                                                          07/11/02  14:13:20  PAGE 2   

  56   1      	/* attention: gain range is 0~7 */
  57   1       
  58   1      	/* self calibration,channel number,scale,unipolar,50Hz
              
              		cutoff = 10 000 000/(512*50) = 0x0186
              	*/ 
  62   1      
  63   1      	/* ---------------channel 0--------------- */
  64   1      	set_mode(0,&ad7710_channel[0]);
  65   1      	/*wait 100 ms for new value available*/
  66   1      
  67   1      	ad_val[0]=read_ad();
  68   1      
  69   1      	/* ---------------channel 1-------------- */
  70   1      	set_mode(1,&ad7710_channel[1]);
  71   1      
  72   1      	/*wait 100 ms for new value available*/
  73   1      
  74   1      	ad_val[1]=read_ad();
  75   1      
  76   1      
  77   1      	/*-------------------------*/
  78   1      	cool_temp = read_ds_data();
  79   1      
  80   1      }
  81          /*将数据拷贝到后备缓冲区中,并且修正以供外部取用*/
  82          void cp_temp()
  83          {
  84   1      	EA=0;
  85   1      	ad_val_bk[0]=ad_val[0];
  86   1      	ad_val_bk[1]=ad_val[1];
  87   1      
  88   1      	cool_temp_bk=cool_temp;
  89   1      
  90   1      	/*修正*/
  91   1      
  92   1      	/*转换*/
  93   1      	cool_temperature[0] = cool_temp_bk;
  94   1      	cool_temperature[1] = (cool_temp_bk >> 8)&0x0f;
  95   1      
  96   1      	EA=1;
  97   1      }
  98          
  99          
 100          void main()
 101          {
 102   1      	BYTE p0val;
 103   1      	BYTE baud;
 104   1      	/* disable interrupt */
 105   1      	EA=0;
 106   1      
 107   1      	/* P0~P3 port */
 108   1      
 109   1      	/* set interrupt */
 110   1      	IE=0x01;
 111   1      	IP=0x01;
 112   1      	TCON=0x01;/* falling_edge */
 113   1      
 114   1      	/* read address */
 115   1      	HC245G = 0;
 116   1      	p0val = P0;
 117   1      	HC245G = 1;
C51 COMPILER V3.20,  SN-0  MODULE                                                          07/11/02  14:13:20  PAGE 3   

 118   1      
 119   1      
 120   1      	/* reset watch dog and do some read/write */
 121   1      	init_watchdog();	
 122   1       
 123   1      	/* SJA init and send first frame*/
 124   1      	CANCS=1;/* select sja */
 125   1      	switch(p0val&0xc0){
 126   2      	case 0x00:
 127   2      		baud=0xc3;
 128   2      		break;
 129   2      	case 0x40:
 130   2      		baud=0xc9;
 131   2      		break;
 132   2      	case 0x80:
 133   2      		baud=0xd3;
 134   2      		break;
 135   2      	case 0xc0:
 136   2      		baud=0xe7;
 137   2      		break;
 138   2      	}
 139   1      	init_sja(p0val&0x3f,baud);
 140   1      
 141   1      	/* init 7710 */
 142   1      
 143   1      
 144   1      	/* open external interrupt */
 145   1      	EA=1;
 146   1      
 147   1      	/* initial end */
 148   1      
 149   1      	/* normal working cycle */
 150   1      	do{
 151   2      		clear_watchdog();
 152   2      
 153   2      		/* TODO: Add your code here */
 154   2      		data_sample();/* update our data */
 155   2      		cp_temp();
 156   2      
 157   2      		if(reset_flag){/*等待复位*/
 158   3      			reset_flag = 0;/*清复位信号*/
 159   3      			while(1){}
 160   3      		}
 161   2      	}while(1);
 162   1      }
 163             
 164          /* 命令帧中断处理函数 */
 165          void sja_receive_int() interrupt 0 using 0
 166          {
 167   1      	BYTE i;
 168   1      	BYTE reg;
 169   1      	BYTE can_status; 
 170   1      
 171   1      	EA=0; /*disable all external interrupts*/
 172   1      
 173   1      	reg=read_sja(4);
 174   1      	write_sja(4,0x00);
 175   1      	can_status=receive();
 176   1      	read_sja(3);
 177   1      
 178   1      	if(can_status==0x00)/* is command frame */
 179   1      	{
C51 COMPILER V3.20,  SN-0  MODULE                                                          07/11/02  14:13:20  PAGE 4   

 180   2      		BYTE ch = RXdata[3];
 181   2      
 182   2      		for(i=0;i<=4;i++){
 183   3      			TXdata[i]=RXdata[i];

⌨️ 快捷键说明

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