📄 main.lst
字号:
C51 COMPILER V7.02b MAIN 06/20/2006 18:46:35 PAGE 1
C51 COMPILER V7.02b, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE main.c DEBUG OBJECTEXTEND
stmt level source
1 /*--------------------------------------*/
2 //
3 // this program is for message receiveing module,including three subroutine:
4 // RS485, MB90092,FLASH-S29gl032/64m
5 //
6 //
7 /*
8 注意事项:
9 1,一天不能够给同一个用户超过16条信息,否则
10 系统存储会出错;
11 2,允许的房号编码不能超过32,否则系统会出错;
12 3,系统发布信息时候,时间信息必须是真实的,
13 如果时间信息有错误,会导致系统出错;
14
15 标准的发送演示:
16 06 B0 F0 01 01 0C 30 36 2D 30 31 2D 30 31 A0 B0 C0 D0 16
17
18 */
19 /*----------------------------------------------------------------*/
20 #include "defineh.h"
21 #include "sbitdef.h"
22 #include "main.h"
23 /*-----------------------------------------*/
24 extern void Init_MB90092(void);
25 extern void Save_Message_Flash(void);
26 extern void init_timer0(void);
27 extern void save_homemessage(void);
28 extern void message_treat(void);
29 extern void clr_timer2(void);
30 extern void init_timer2(void);
31 extern void Chip_Erase_Op(void);
32 extern void delays60ms();
33 extern void txstart(void);
34 extern void Clr_Rx();
35 extern bit Read_ID_Op();
36 extern void Sector_Erase_Op(ulong write_address);
37
38
39 extern void save_infomessage(); //test
40 /*-----------------------------------------------*/
41 void init_timer(void)
42 {
43 1 SCON=0x50; //方式1 ,10位异步收发无效验位
44 1 PCON=0x80;
45 1 ES=1;
46 1 TMOD=0x21; //定时器0工作方式1,16位定时,定时器1工作方式2作串口波特率发生器
47 1 #if CRYSTALOID //1为12MHZ,RS485enable is low(receive)
{
TH1=0xf3; //波特率为4800 12MHZ
TL1=0xf2;
}
#else //0为11.0592MHz, RS485enable is high(receive)
53 1 {
54 2 TH1=0xf4; //波特率为4800,11.0592MHZ
55 2 TL1=0xf4;
C51 COMPILER V7.02b MAIN 06/20/2006 18:46:35 PAGE 2
56 2 }
57 1 #endif
58 1
59 1 TR1=1;
60 1 IT1=1;
61 1 EA=1;
62 1 }
63 /*------------------------------------------*/
64 /*
65 void watchdog(void) // wdt time=40ms
66 {
67 WDT_CON=0X10;
68 _nop_();
69 WDT_CON=0X26; //FOR 2.5S WDT-TIMER
70 }
71 */
72 /*------------------------------------------*/
73 void Check_Home_Type()
74 {
75 1 if(*(info_buffer+2)&0xf0==0)
76 1 {
77 2 kindBYTE=FALSE;
78 2 }
79 1 else
80 1 {
81 2 kindBYTE=TRUE; //saving-energy type =0
82 2 }
83 1 }
84 /*------------------------------------------*/
85 void init_Mcu(void)
86 {
87 1 MbCE = valid;
88 1 MBSIM = valid;
89 1 MBSCLK = valid;
90 1 CNTRL =invalid;
91 1 mRs485G = receive;
92 1 LEDY =DARK; //not bright the work lamp test
93 1 }
94 /*-------------------------------------------*/
95 /*-------------------------------------------*/
96
97 void init_var(void)
98 {
99 1 Rx_count=0; /*接收数据计数器*/
100 1 Rx_bit=0; /*接收完毕标志*/
101 1 Rxrun_bit=0; /*接收数据标志,作定时用,超时接收退出*/
102 1 Rx_sum=0;
103 1
104 1 timeout0=0;
105 1 timeout2=0;
106 1
107 1 EnWork_bit=0; /*now on work*/
108 1 inspectBIT=0; //inspect symbol
109 1 inringBIT=0; //ring symbol
110 1 intalkingBIT=0; //in talking symbol
111 1
112 1 kindBYTE=1; /*defaulse intelligent home-machine*/
113 1 intalkingBIT=0;//通话标志位 1 为门口机和(用户或管理机)使用
114 1
115 1 ProgramOkFlag=TRUE;
116 1 count_copy=0;
117 1
C51 COMPILER V7.02b MAIN 06/20/2006 18:46:35 PAGE 3
118 1 }
119 /*---------------------------------------------*/
120 void main()
121 {
122 1 uchar data i,j;
123 1 uchar xdata *m;
124 1
125 1 info_buffer=&Rx_buffer[0];
126 1 init_var();
127 1 init_Mcu();
128 1 Init_MB90092();
129 1 Clr_Rx();
130 1 init_timer();
131 1
132 1 RESET=0;
133 1 _nop_();
134 1 _nop_();
135 1 RESET=1;
136 1
137 1 AUXR=0X03;
138 1 P1=0x01;
139 1 for(i=0;i<16;i++)
140 1 {
141 2 m=i*0x1000;
142 2 j=*m;
143 2 if(j!=0xff)
144 2 {
145 3 ProgramOkFlag=FALSE;
146 3 }
147 2 }
148 1 AUXR=0X00;
149 1
150 1 if(!ProgramOkFlag)
151 1 {
152 2 LEDY=0;
153 2 Chip_Erase_Op();
154 2 for(i=0;i<0x1f;i++)
155 2 {
156 3 delays60ms();
157 3 }
158 2 LEDY=1;
159 2 }
160 1
161 1 // watchdog(); //暂时屏蔽
162 1
163 1 for(;;)
164 1 {
165 2 // WDT_CON=0X36; //FOR 2.5S WDT-TIMER
166 2
167 2 if(Rx_bit)
168 2 {
169 3 if((*(info_buffer+1)==SINGLEINFO)||(*(info_buffer+1)==ALLINFO)) //门口机发特定短信息,用应答
170 3 {
171 4 save_homemessage();
172 4 Save_Message_Flash();
173 4 }
174 3
175 3
176 3 else if(*(info_buffer+1)==HOMEGETINFO) //提取信息
177 3 {
178 4 if(EnWork_bit)
179 4 {
C51 COMPILER V7.02b MAIN 06/20/2006 18:46:35 PAGE 4
180 5 Clr_Rx();
181 5 }
182 4 else
183 4 {
184 5 //wait door answered home for 4s, then the message module
185 5 //answer the home that the line FREE,AND BEGIN MESSAGE OPERATING
186 5 Check_Home_Type();
187 5 save_homemessage();
188 5 Clr_Rx();
189 5 init_timer2(); //begin check main-door answer for 4s
190 5 while((timeout2<0x64)&&(EnWork_bit==0))
191 5 {
192 6 if(Rx_bit==1)
193 6 {
194 7 if((Rx_count==15)&&(*(info_buffer+1)==MAINBACK))
195 7 {
196 8 EnWork_bit=1;
197 8 Clr_Rx();
198 8 }
199 7 else
200 7 {
201 8 Clr_Rx();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -