📄 text2.lst
字号:
C51 COMPILER V7.02a TEXT2 11/14/2005 10:27:26 PAGE 1
C51 COMPILER V7.02a, COMPILATION OF MODULE TEXT2
OBJECT MODULE PLACED IN Text2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Text2.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "C8051F200.h"
2 #include "TEXT2.H"
3 #include "display.h"
4 #include "disdrive.h"
5 #include "KEY.H"
6
7 //定义串口缓冲区和结构体
8
9 #define ADDRESSL 0xFF //地址校验码地位
10 #define ADDRESSH 0xFF //地址校验码高位
11
12 #define BufferLen 30
13 #define SEARIALTIME 0x64 //串口接收完所有数据的最大时间,100ms
14
15 unsigned char data RealReceiveLen ; //实际接收到个数
16 unsigned char data CheckSum ; //校验码
17 unsigned char data ReceivBuf[BufferLen];
18 unsigned char data SerialTime ; //串口接收数据时间计数器,在接收中大于一个数可以认为此次接收丢失
19 unsigned char data ReceiveState ; //接收状态标志位
20
21 //
22 unsigned int ResetLedBackTime; //背光灯熄灭时间计数器
23 unsigned int CountTimeTime; //累计时间计数器
24
25 //申明应用定义在KEY.C中的文件
26 extern struct TIME idata NowTime;
27 extern struct INCOME idata Incomedata;
28
29 extern unsigned char data IsKeyDown;
30 extern unsigned char data AutoKeyTime;
31 extern unsigned char data KeyDelayTime;
32
33 extern char code * code Page_CurrentTime[];
34 extern char code * code Message_ZhiLiuLiang[];
35
36 void FeedDog(void) //喂狗
37 {
38 1 WDTCN = 0xA5;
39 1 }
40
41 void WatchDog(void)
42 {
43 1 WDTCN = 0x07; // Watchdog Timer Control Register // 超时间隔94ms
44 1 WDTCN = 0xFF; // 禁止看门狗失效,一直有效并关不掉
45 1 WDTCN = 0xA5; // 复位并允许;
46 1 }
47
48 void KillDog(void)
49 {
50 1 EA = 0;
51 1 WDTCN = 0xDE; // Disable WDT
52 1 WDTCN = 0xAD;
53 1 }
54
55 // 11.0592M
C51 COMPILER V7.02a TEXT2 11/14/2005 10:27:26 PAGE 2
56 void SYSCLK_Init(void)
57 {
58 1 OSCXCN = 0x20; //00100000 // start external oscillator with 模式为晶振
59 1 // 11.0592MHz crystal
60 1 OSCICN = 0x88; // select external oscillator as SYSCLK
61 1 // source and enable missing clock
62 1 // detector
63 1 }
64
65 // port init
66 void PORT_Init(void)
67 {
68 1
69 1 PRT0MX = 0x01; //端口P00和P01配置为串口数据线
70 1 PRT1MX = 0x00;
71 1 PRT2MX = 0x00;
72 1
73 1 }
74
75 void UART_Init(void) // 串口初始化
76 {
77 1 SCON = 0x50; // 串口工作方式1
78 1 T2CON = 0x30; // 定时器2作为串口1的波特率发生器
79 1 RCAP2 = -(SYSCLK/BAUDRATE/32);
80 1 TR2 = 1; // TR2=1
81 1 REN = 1;
82 1 }
83
84 void Timer01_Init(void) { //定时器0、1初始化
85 1
86 1 TMOD = 0x11; //定时器0和1工作在16位定时器方式;
87 1 CKCON = 0x00; //使用系统时钟的12分频作为定时器时钟
88 1 TH0 = TIMER0_H; //定时1ms
89 1 TL0 = TIMER0_L;
90 1 TH1 = TIMER1_H; //定时50ms
91 1 TL1 = TIMER1_L;
92 1 TR0 = 1; //开始计数
93 1 }
94
95 void InterruptEnable_Init(void)
96 {
97 1 IE = 0x12; // 屏蔽所有中断,开中断UART0,T0
98 1 IP = 0x10; // 串口优先级高,其余采用默认优先级
99 1 EIE1 = 0x00; // 其余中断禁止
100 1 EIE2 = 0x00;
101 1 EIP1 = 0x00;
102 1 EIP2 = 0x00;
103 1 ES = 1;
104 1 EA = 1;
105 1 }
106
107
108 void SYSINI(void)
109 {
110 1 KillDog();
111 1 SYSCLK_Init(); // initialize oscillator
112 1 PORT_Init(); // initialize crossbar and GPIO
113 1 UART_Init();
114 1 Timer01_Init();
115 1 InterruptEnable_Init();
116 1 HardInitailLED();
117 1 InitialKey();
C51 COMPILER V7.02a TEXT2 11/14/2005 10:27:26 PAGE 3
118 1 Serial_init();
119 1 WatchDog(); // 打开看门狗;
120 1 }
121
122
123 void main(void)
124 {
125 1 SYSINI();
126 1 WriteTime_Init();
127 1 LedFillNULL();
128 1 ShowWait();
129 1 delay(0xFFFF);
130 1 FeedDog();
131 1 while(1)
132 1 {
133 2 FeedDog();
134 2 KeyPro();
135 2 if(ReceiveState == ENDRECEIVE)
136 2 {
137 3 if(CheckSum == 0x01)
138 3 ReadSerialBufData((unsigned int *)ReceivBuf,&(Incomedata.InputUA),14);
139 3 Serial_init();
140 3 }
141 2 if(((ReceiveState == RECEIVING)||(ReceiveState == STARTRECEIVE2))&&(SerialTime >= SEARIALTIME))
142 2 Serial_init();
143 2 }
144 1
145 1 }
146
147 void TO_INT(void) interrupt 1
148 {
149 1 TF0 = 0;
150 1 if (IsKeyDown == NO_KEY_DOWN)
151 1 {
152 2 if(AutoKeyTime < KEY_AUTOUPDATE_TIME) AutoKeyTime++;
153 2 if(ResetLedBackTime < RESET_LEDBACK_TIME) ResetLedBackTime++;
154 2 else LEDBACKLIGNT = 1; //Reset LEDBackLight
155 2 }
156 1 if ( IsKeyDown == KEY_DOWN_TRIGGER)
157 1 {
158 2 if (KeyDelayTime < KEY_DELAY ) KeyDelayTime++; //key down and delay time counting
159 2 else
160 2 {
161 3 IsKeyDown = KEY_DOWN_DELAY_OVER;//set key delay time is over;trigger IsKeyDown
162 3 LEDBACKLIGNT = 0;//LEDBack Light On
163 3 }
164 2
165 2 }
166 1 if ( IsKeyDown == KEY_PRO_COMPLETE_DELAY) //key pro completed delay
167 1 {
168 2 if ( KeyDelayTime < KEY_COMPLETE_DELAY ) KeyDelayTime++;
169 2 else
170 2 {
171 3 KeyDelayTime = 0;
172 3 AutoKeyTime = 0;
173 3 ResetLedBackTime = 0;
174 3 IsKeyDown = NO_KEY_DOWN;
175 3 }
176 2 }
177 1 if(SerialTime < SEARIALTIME) SerialTime++;
178 1 TH0 = TIMER0_H; //定时1ms
179 1 TL0 = TIMER0_L;
C51 COMPILER V7.02a TEXT2 11/14/2005 10:27:26 PAGE 4
180 1 }
181
182
183 void Receive_INT(void) interrupt 4
184 {
185 1 unsigned char datatemp;
186 1 RI = 0;
187 1 TI = 0;
188 1 datatemp = SBUF;
189 1 if( ReceiveState == STARTRECEIVE1 && datatemp == ADDRESSL ) //收第一个起始地址
190 1 {
191 2 ReceiveState = STARTRECEIVE2;
192 2 SerialTime = 0;
193 2 CheckSum = CheckSum + datatemp;
194 2
195 2 }
196 1 else if(ReceiveState == STARTRECEIVE2 && datatemp==ADDRESSH) //收第二个起始地址
197 1 {
198 2 ReceiveState = RECEIVING ;
199 2 CheckSum = CheckSum + datatemp;
200 2 }
201 1
202 1 else if(ReceiveState == RECEIVING) //处于数据接收中
203 1 {
204 2 ReceivBuf[RealReceiveLen]=datatemp;
205 2 RealReceiveLen++;
206 2 CheckSum = CheckSum + datatemp;
207 2
208 2 }
209 1 if( RealReceiveLen >= BufferLen ) //数据接收完成
210 1 ReceiveState = ENDRECEIVE;
211 1 }
212
213 void ReadSerialBufData(unsigned int *Bufferptr,unsigned int *Structptr,unsigned char num)
214 {
215 1 unsigned char i;
216 1 for(i=0;i<num;i++)
217 1 {
218 2 *( Structptr+i) = *(Bufferptr+i);
219 2 }
220 1 }
221
222 void Serial_init(void)
223 {
224 1 ReceiveState = STARTRECEIVE1;
225 1 RealReceiveLen = 0;
226 1 CheckSum = 0;
227 1 }
228
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 485 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 38 7
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 + -