📄 scom.lst
字号:
C51 COMPILER V7.20 SCOM 06/20/2005 16:55:59 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE SCOM
OBJECT MODULE PLACED IN Scom.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Scom.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2 //Scom test
3 //MCU communication and PC
4 //2003/04/13
5 //
6 //synchronization or in-phase
7 //
8 //
9 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10 #include <AT89X52.H>
11 #include <INTRINS.h>
12 #include <STDIO.H>
13 #include <AbsAcc.h>
14 #include <string.h>
15 #include "CHARGER.H"
16
17 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
18 void init_serial(void)
19 {
20 1 SCON = 0X50;
21 1 /*Timer 2 is being used to generate baud rates.*/
22 1 RCAP2L = 0XE8;
23 1 RCAP2H = 0XFF;
24 1 T2CON = 0X34;
25 1 ES = 1; /*IE.4 */
26 1 RI = 0; /*SCON.0*/
27 1 }
28 //communication control charactor
29 static unsigned char data comcontrol=0;
30 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
31 void Wmodem(char *s)
32 {
33 1 if(comcontrol!=0)return;
34 1 ES=0;
35 1 for(;*s;)
36 1 {
37 2 unsigned int data i;
38 2 SBUF=*s++;
39 2 while(!_testbit_(TI))if(i++>10000)break;
40 2 i=0;
41 2 }
42 1 ES=1;
43 1 }
44 static unsigned char xdata rfrm[16] _at_ 0xDB90;//frame[0xAA][com][0xXX][0xXX]
45 static unsigned char xdata sfrm[16] _at_ 0xDBA0;//frame[0xAA][com][0xXX][0xXX]
46 static unsigned char xdata buf[60] _at_ 0xDBB0;//frame[0xAA][com][0xXX][0xXX]static unsigned char data cou
-nt;
47 static unsigned int xdata *tmp;
48
49 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
50 //Ready Maxim Data in buf
51 code unsigned char all[2]={21,13};
52 #define ALL_HIS all[0]
53 #define ALL_SET all[1]
54 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C51 COMPILER V7.20 SCOM 06/20/2005 16:55:59 PAGE 2
55 #define COM_READ_HIS 0x066
56 #define COM_COM_OK 0x099
57 #define COM_READ_SET 0x044
58 #define COM_WRITE_SET 0x033
59 #define COM_WRITE_OK= 0xEEEE;//
60 void onCommunication(void) interrupt SIO_VECTOR
61 {
62 1 static int data dcount=0;//Send frame counter
63 1 static int data rcount=0;//Recive data frame counter
64 1 static unsigned char data scount=0;//Send frame char counter
65 1 static unsigned char data count=0;//Recive frame char counter
66 1 static unsigned char data oCe=0;
67 1 static unsigned char data allcount=0;
68 1 char i;
69 1 tmp=0xDBB0;//
70 1
71 1 if(RI)
72 1 {
73 2 unsigned char data ocode;
74 2 //Recive Frame
75 2 ocode=SBUF; RI=0;
76 2 if(oCe==0)
77 2 {
78 3 rfrm[count++]=ocode;oCe=1;
79 3 if(rfrm[0] == 0xAA||rfrm[0] == 0x55);//Search the head of Frame
80 3 else {oCe=0;count=0;}//synchronization
81 3 return;
82 3 }
83 2
84 2 if(rfrm[count-1]==~ocode)//IScheck
85 2 {
86 3 oCe=0;
87 3 if(count!=3) return;
88 3 }
89 2 else{oCe=0;count=0;return;}
90 2 RESET_DOG;
91 2 oCe=0; count=0;//an Frame End
92 2 //Command Execite
93 2 if(rfrm[0]==0xAA)
94 2 {//explan command
95 3 //start send
96 3 tmp=0xDBB0;
97 3 comcontrol=22;
98 3 switch(rfrm[1])//UINT MAP(HIGHBYTE,LOWBYTE)
99 3 {
100 4 case COM_READ_HIS://Requear historydata
101 4 {link p; p=&today; allcount=ALL_HIS;
102 5 for(i=0;i<rfrm[2];i++)p=p->up;//Move to The Day is Requear
103 5 for(i=0;i<21;i++)//fill send buffer
104 5 {if(i<3)*tmp++=p->date[i];
105 6 else *tmp++=p->work[i-3];
106 6 }}
107 4 scount=0; rcount=0; dcount=0; TI=1;
108 4 break;
109 4 case COM_READ_SET:
110 4 for(i=0;i<12;i++)if(i!=10)*tmp++=sys[i];//sys[10] is NULL
111 4 *tmp++=password; allcount=ALL_SET;
112 4 *tmp++=adtemp;//just temp.
113 4 scount=0; rcount=0; dcount=0; TI=1;
114 4 break;
115 4 case COM_WRITE_SET://requer reciver data
116 4 if(rfrm[2]==0x22)comcontrol=0x22;
C51 COMPILER V7.20 SCOM 06/20/2005 16:55:59 PAGE 3
117 4 if(rfrm[2]==0xEE)comcontrol=0x99;
118 4 scount=0; rcount=0; dcount=-1;
119 4 return;
120 4 break;
121 4 default:break;
122 4 }
123 3 }
124 2 //Recieve Data process
125 2 if(rfrm[0]==0x55)//recive seter
126 2 if(comcontrol!=11)//Recive data no using, ==11
127 2 {
128 3 buf[rcount*2]=rfrm[1];
129 3 buf[rcount*2+1]=rfrm[2];
130 3 if(rcount<19)rcount++;//total 19 value
131 3 else//All Recieve
132 3 {comcontrol=11;
133 4 rcount=0;
134 4 scount=0;
135 4 dcount=0;
136 4 allcount=24;
137 4 TI=1;
138 4 }
139 3 }
140 2 memset(rfrm,0,sizeof(rfrm));
141 2 }
142 1 //Send Data
143 1 if(TI)
144 1 {
145 2 TI=0;
146 2 if(scount==0)
147 2 {
148 3 if(dcount<0)return;
149 3 if(dcount==allcount)
150 3 {dcount=-80;comcontrol=0;return;}//Send end
151 3 sfrm[0]=0x55;
152 3 sfrm[1]=0xAA;
153 3 sfrm[2]=buf[2*dcount];
154 3 sfrm[3]=~sfrm[2];
155 3 sfrm[4]=buf[2*dcount+1];
156 3 sfrm[5]=~sfrm[4];
157 3 dcount++;
158 3 RESET_DOG;
159 3 }
160 2 if(scount<6)
161 2 {
162 3 SBUF=sfrm[scount++];
163 3 }
164 2 if(scount>=6)scount=0;
165 2 }
166 1
167 1 }
168
169 #define system_volatage sys[7]
170 #define float_revise sys[10]
171 #define test_temp sys[11]
172 #define desinged_rate sys[12]
173
174 void SetSys(void)
175 {
176 1 if(comcontrol!=0x99)return;
177 1 {
178 2 int data i;
C51 COMPILER V7.20 SCOM 06/20/2005 16:55:59 PAGE 4
179 2 comcontrol=0;
180 2 tmp=0xDBB0;
181 2 for(i=0;i<6;i++)buf[i]=buf[2*i+1];
182 2 setup12887(buf);
183 2 for(i=0;i<12;i++)//seting
184 2 {
185 3 if(i<10)sys[i]=*(tmp+6+i);
186 3 else if(i==10){test_temp=*(tmp+6+i);continue;}//sys[11] is test temp.
187 3 else{password=*(tmp+6+i);continue;}
188 3 }
189 2 just=test_temp-adtemp;
190 2 i=0;while(stab[0][i]!=system_volatage){if(i<4)i++;else {i=10;break;}}
191 2 if(i!=10)
192 2 {
193 3 desinged_rate=stab[4][i];//volotage float_revise
194 3 float_revise=stab[3][i];//float_revise float_revise
195 3 }
196 2 init_rate_workpoint(5);
197 2 memset((void*)buf,0,sizeof(buf));
198 2 RESET_DOG;
199 2 }
200 1 }
201
202 //
203 /*
204 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
205 static void sendchar(unsigned char c)
206 {
207 unsigned int data i;
208 SBUF=c;
209 while(!_testbit_(TI))if(i++>10000)break;
210 }
211 static unsigned char recc()
212 {
213 unsigned int data i;
214 while(!_testbit_(RI))if(i++>10000)return 0;
215 return SBUF;
216 }
217
218 */
219
220
221
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1371 ----
CONSTANT SIZE = 2 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 11
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 + -