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

📄 module.lst

📁 CAN__组建现场总线系统设计技术(光盘)
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V3.20,  SN-0  MODULE                                                          07/10/02  17:18:45  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 AD7703 module
               *						2002/3/28
               */
   7          
   8          #include "type.h"
   9          #include <reg52.h>
  10          #include <intrins.h>
  11          #include "version.h"
  12          #include "link.h"
  13          #include "sja.h"
  14          #include "ad7703.h"
  15          #include "watchdog.h"
  16          #include "delay.h"
  17          #include "exp.h"
  18          
  19          
  20          /*==================================================================
              		Main
              ==================================================================*/
  23          
  24          /*数据采集是双缓冲的,采集的数据放在ad_val和cool_temp中,
              而外部读取的是在ad_val_bk和cool_temp_bk中。这为保证了数据
              的一致性,并且对数据进行修正成为可能。*/
  27          UINT ad_val;
  28          UINT cool_temp;
  29          UINT ad_val_bk;
  30          UINT cool_temp_bk;
  31          BYTE cool_temperature[2];/*将cool_temp_bk中的值转换成实际值*/
  32          	/*实际室温值=
              	 cool_temperature[1] + 
              	cool_temperature[0]/16.0 */
  35          
  36          static BYTE reset_flag = 0;/*复位信号。非0时系统将复位*/
  37          /*
               *
               */
  40          void data_sample()/*采集AD数据和室温数据*/
  41          {
  42   1      	ad_val = read_ad();
  43   1      
  44   1      	cool_temp = read_ds_data();
  45   1      }
  46          /*将数据拷贝到后备缓冲区中,并且修正以供外部取用*/
  47          void cp_temp()
  48          {
  49   1      	EA=0;
  50   1      
  51   1      	/* copy to buffer */
  52   1      	ad_val_bk = ad_val;
  53   1      	cool_temp_bk=cool_temp;
  54   1      
  55   1      	/*修正*/
C51 COMPILER V3.20,  SN-0  MODULE                                                          07/10/02  17:18:45  PAGE 2   

  56   1      
  57   1      	/*转换*/
  58   1      	cool_temperature[0] = cool_temp_bk ;
  59   1      	cool_temperature[1] = (cool_temp_bk) >> 8& 0x0f;
  60   1      
  61   1      	EA=1;
  62   1      }
  63          
  64          void main()
  65          {
  66   1      	BYTE p0val;
  67   1      	BYTE baud;
  68   1      	/* disable interrupt */
  69   1      	EA=0;
  70   1      
  71   1      	/* P0~P3 port */
  72   1      	ADS2 = 0;
  73   1      	ADS3 = 0;
  74   1      	ADS1 = 0;
  75   1      
  76   1      	/* set interrupt */
  77   1      	IE=0x01;
  78   1      	IP=0x01;
  79   1      	TCON=0x01;/* falling_edge */
  80   1      
  81   1      	/* read address */
  82   1      	HC245G = 0;
  83   1      	HC245DIR = 0;
  84   1      	p0val = P0;
  85   1      	HC245G = 1;
  86   1      
  87   1      	/* reset watch dog and do some read/write */
  88   1      	init_watchdog();	
  89   1      
  90   1      	/* init AD7703 */
  91   1      	init_ad7703();
  92   1      
  93   1      	/* SJA init and send first frame*/
  94   1      	CANCS=1;/* select sja */
  95   1      	switch(p0val&0xc0){
  96   2      	case 0x00:
  97   2      		baud=0xc3;
  98   2      		break;
  99   2      	case 0x40:
 100   2      		baud=0xc9;
 101   2      		break;
 102   2      	case 0x80:
 103   2      		baud=0xd3;
 104   2      		break;
 105   2      	case 0xc0:
 106   2      		baud=0xe7;
 107   2      		break;
 108   2      	}
 109   1      	init_sja(p0val&0x3f,baud);
 110   1      
 111   1      	/* open external interrupt */
 112   1      	EA=1;
 113   1      
 114   1      	/* initial end */
 115   1      
 116   1      	/* normal working cycle */
 117   1      	do{
C51 COMPILER V3.20,  SN-0  MODULE                                                          07/10/02  17:18:45  PAGE 3   

 118   2      		clear_watchdog();
 119   2      
 120   2      		/* TODO: Add your code here */
 121   2      		data_sample();/* update our data */
 122   2      		cp_temp();
 123   2      
 124   2      		if(reset_flag){/*等待复位*/
 125   3      			reset_flag = 0;/*清复位信号*/
 126   3      			while(1){}
 127   3      		}
 128   2      	}while(1);
 129   1      }
 130             
 131          /* 命令帧中断处理函数 */
 132          /* 执行时间<20ms? */
 133          void sja_receive_int() interrupt 0 using 0
 134          {
 135   1      	BYTE i;
 136   1      	BYTE reg;
 137   1      	BYTE can_status; 
 138   1      
 139   1      	EA=0; /*disable all external interrupts*/
 140   1      
 141   1      	reg=read_sja(4);
 142   1      	write_sja(4,0x00);
 143   1      	can_status=receive();
 144   1      	read_sja(3);
 145   1      
 146   1      	if(can_status==0x00)/* is command frame */
 147   1      	{
 148   2      		for(i=0;i<=4;i++){
 149   3      			TXdata[i]=RXdata[i];
 150   3      		}
 151   2      		TXdata[1]+=0x40;
 152   2      		TXdata[3]+=0x40;/*封装返回帧头*/
 153   2      
 154   2      		switch(RXdata[4])
 155   2      		{
 156   3      		case 0x00:/* 复位 */
 157   3      			if(RXdata[3] != 0x1f)
 158   3      				break;
 159   3      			reset_flag = 1;
 160   3      			ctransmit();
 161   3      			break;

⌨️ 快捷键说明

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