📄 module.lst
字号:
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 + -