?? module.lst
字號:
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 + -