📄 leddriver.lst
字号:
C51 COMPILER V8.02 LEDDRIVER 01/11/2007 14:49:21 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LEDDRIVER
OBJECT MODULE PLACED IN LedDriver.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LedDriver.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND
line level source
1 /*--------------------------------------------------------------------------------------------------------
---------------------------------
2 说明:本程序主要完成ColorSort的一个LED light的控制。
3 ---------------------------------------------------------------------------------------------------------
---------------------------------*/
4 #include "LedDriver.h"
5 #include "Ad5258.h"
6
7
8 //Entry----------------------------------------------------
9 void main(void)
10 {
11 1 uchar index = 0;
12 1 //close all interrupt
13 1 EA = 0;
14 1 EX1 = 0;
15 1 EX0 = 0;
16 1 TMOD = 0x01; //timer0, mod = 1
17 1 //init
18 1 InitParams();
19 1 //configure AD5258
20 1 for(index = 0; index < ADDR_NUM; index ++)
21 1 {
22 2 RdDataFromEEprom(index);
23 2 }
24 1 //Timer0
25 1 InitTimer0(); //Initial clock0
26 1 //Init uart
27 1 InitUart(); //
28 1 EnableDog();
29 1
30 1 /*---------------------------------------------------------*/
31 1 ET0 = 1; //Timer0 enable
32 1 EA = 1; //All Int enable
33 1 //loop for ever------------------------------------
34 1 while (1)
35 1 {
36 2 KickDog();
37 2 //adjust
38 2 TEST_TP0 = 1;
39 2 if(light_flag_up == 2)
40 2 {
41 3 EA = 0;
42 3 light_flag_up = 0;
43 3 ConfigAd5258(uaddr_index, I2C_val[uaddr_index]);
44 3 WrData2EEprom(uaddr_index);
45 3 EA = 1;
46 3 }
47 2 TEST_TP0 = 0;
48 2 if(light_flag_down == 2)
49 2 {
50 3 EA = 0;
51 3 light_flag_down = 0;
52 3 ConfigAd5258(uaddr_index, I2C_val[uaddr_index]);
53 3 WrData2EEprom(uaddr_index);
C51 COMPILER V8.02 LEDDRIVER 01/11/2007 14:49:21 PAGE 2
54 3 EA = 1;
55 3 }
56 2 if(bSendBack == 1)
57 2 {
58 3 EA = 0;
59 3 bSendBack = 0;
60 3 SendByteUart(uart_val);
61 3 EA = 1;
62 3 }
63 2 }
64 1 }
65
66 //
67 void InitParams(void)
68 {
69 1 //max3221
70 1 MAX3221_EN = 1;
71 1 MAX3221_FORCE_ON = 1;
72 1 MAX3221_FORCE_OFF = 0;
73 1 //configure
74 1 for(uaddr_index = 0; uaddr_index < ADDR_NUM; uaddr_index ++)
75 1 I2C_val[uaddr_index] = 160;
76 1 //Light
77 1 light_flag_up = 0;
78 1 light_flag_down = 0;
79 1 //Test
80 1 time_count = 0;
81 1 time_flag = 1;
82 1 uart_val = 0;
83 1 //connect
84 1 led_flag = 0;
85 1 led_count = 0;
86 1 CONNECT_LED = 0;
87 1 }
88
89 //Timer0-----------------------------------------------------
90 //timer interrupt ISR
91 void Timer0ISR(void) interrupt 1
92 {
93 1 //disable interrupt
94 1 EA = 0;
95 1 //light key up
96 1 /*----------------------------------------------------------------------------------*/
97 1 if(LIGHT_UP == 0)
98 1 {
99 2 if(light_flag_up == 0)
100 2 light_flag_up = 1;
101 2 }
102 1 else
103 1 {
104 2 if(light_flag_up == 1)
105 2 {
106 3 //get address
107 3 /*----------------------------------------------------------------------------------*/
108 3 uaddr_index = JUMP0;
109 3 if(JUMP1 == 1) uaddr_index += 2;
110 3 if(I2C_val[uaddr_index] < MAX_STEP_NUM)
111 3 I2C_val[uaddr_index] = I2C_val[uaddr_index] + 1;
112 3 light_flag_up = 2;
113 3 //uart_val = I2C_val[uaddr_index];
114 3 //bSendBack = 1;
115 3 }
C51 COMPILER V8.02 LEDDRIVER 01/11/2007 14:49:21 PAGE 3
116 2 }
117 1 //light key down
118 1 if(LIGHT_DOWN == 0)
119 1 {
120 2 if(light_flag_down == 0)
121 2 light_flag_down = 1;
122 2 }
123 1 else
124 1 {
125 2 if(light_flag_down == 1)
126 2 {
127 3 //get address
128 3 /*----------------------------------------------------------------------------------*/
129 3 uaddr_index = JUMP0;
130 3 if(JUMP1 == 1) uaddr_index += 2;
131 3 if(I2C_val[uaddr_index] > 0)
132 3 I2C_val[uaddr_index] = I2C_val[uaddr_index] - 1;
133 3 light_flag_down = 2;
134 3 //uart_val = I2C_val[uaddr_index];
135 3 //bSendBack = 1;
136 3 }
137 2 }
138 1 /*-------------------------------------------------------------------------------------*/
139 1 if(time_flag == 1)
140 1 {
141 2 time_count ++;
142 2 if(time_count == 20)
143 2 {
144 3 time_flag = 0;
145 3 MAX3221_EN = 0;
146 3 MAX3221_FORCE_ON = 1;
147 3 MAX3221_FORCE_OFF = 1;
148 3 }
149 2 }
150 1 //light led
151 1 if(led_flag == 1)
152 1 {
153 2 led_count ++;
154 2 if(led_count == 1)
155 2 CONNECT_LED = 1;
156 2 else if(led_count == 5)
157 2 {
158 3 CONNECT_LED = 0;
159 3 led_flag = 0;
160 3 }
161 2 }
162 1 //enable interrupt
163 1 /*--------------------------------------------------------------------------------------*/
164 1 InitTimer0();
165 1 EA = 1;
166 1 }
167
168 //initlazition timer0
169 void InitTimer0(void)
170 {
171 1 TR0 = 0;
172 1 TH0 = 0x3C; // 50ms
173 1 TL0 = 0xAF;
174 1 TR0 = 1;
175 1 }
176
177 /*-----------------------------------------------------------------------------------------*/
C51 COMPILER V8.02 LEDDRIVER 01/11/2007 14:49:21 PAGE 4
178 void UartISR(void) interrupt 4
179 {
180 1 if(_testbit_(RI))
181 1 {
182 2 uart_val = SBUF;
183 2 if(uart_val < ADDR_NUM) //instruct
184 2 {
185 3 uaddr_index = uart_val;
186 3 }
187 2 else //data
188 2 {
189 3 if(I2C_val[uaddr_index] > uart_val)
190 3 light_flag_down = 2;
191 3 else
192 3 light_flag_up = 2;
193 3 I2C_val[uaddr_index] = uart_val;
194 3 bSendBack = 1;
195 3 led_count = 0;
196 3 led_flag = 1;
197 3 }
198 2 }
199 1 }
200
201 /*uart----------------------------------------------------------------------------------------*/
202 void InitUart(void)
203 {
204 1 SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable recv
205 1 TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload
206 1 PCON |= 0x80; //SMOD=1;
207 1 TH1 = 0xFD; //Baud:19.2k fosc=11.0592MHz
208 1 IE |= 0x90; //Enable Serial Interrupt
209 1 TR1 = 1; //timer 1 run
210 1 }
211
212 /*--------------------------------------------------------------------------------------------*/
213 void SendByteUart(uchar val)
214 {
215 1 SBUF = val;
216 1 while(TI == 0);
217 1 TI = 0;
218 1 }
219
220 /*enable watch dog----------------------------------------------------------------------------*/
221 void EnableDog(void)
222 {
223 1 WDTRST = 0x1E;
224 1 WDTRST = 0xE1;
225 1 }
226
227 /*kick the dog---------------------------------------------------------------------------------*/
228 void KickDog(void)
229 {
230 1 WDTRST = 0x1E;
231 1 WDTRST = 0xE1;
232 1 }
233
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 464 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
C51 COMPILER V8.02 LEDDRIVER 01/11/2007 14:49:21 PAGE 5
PDATA SIZE = ---- ----
DATA SIZE = 10 1
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -