📄 main.lst
字号:
46 {
47 1
C51 COMPILER V7.00 MAIN 08/06/2007 11:45:43 PAGE 15
48 1 }
49
50 //--------------------------------------
51 // Timer 2 interrupt
52 //--------------------------------------
53 void TIMER2_ISR (void) interrupt 5
54 {
55 1 TF2=0;
56 1 CACON=CACON_VALUE;
57 1 }
58
59 //--------------------------------------
60 // Serial port 1 interrupt
61 //--------------------------------------
62 void UART1_ISR (void) interrupt 7
63 {
64 1
65 1 }
66
67 //******************************************
68 //*** DELAY ROUTINE ***
69 //******************************************
70
71 void INIT_BEFORE_SCAN (void)
72 {
73 1 /*
74 1 TMOD=0X11;//TIMER0 init 16BIT timer,TIMER1 init 16BIT timer
75 1 TCON=0X00;
76 1 TL0=0;
77 1 TH0=0;
78 1 */
79 1
80 1 T2CON=0X00;//timer2 init
81 1 T2MOD=0X00;
82 1 PCCONH = 0X3F; //required for DC6688FSA
83 1
84 1 PBCONH=0X55;//01010101 PB7-4 open drain out
85 1 PBCONL=0X55;//01010101 PB3-0 open drain out
86 1 PBPUR =0; //PULL-UP DISABLE
87 1 last_pc=0XFF;
88 1 PORTB =0XFF;//init PORTB to high
89 1
90 1 //pull up in 1
91 1 PACONH=0;//PA7-4 IN int falling edge
92 1 PACONL=0;//PA3-0 IN int falling edge
93 1 PAPUR =0XFF;//PULL-UP ENABLE
94 1
95 1 CACON =0X03;//carrier fosc/1 start counter A, repeating mode, flip-flop high lvl
96 1 PCCONL=0XAB;//10101011 PC1 = push pull output REM Port Normal I/O Carrier on
97 1 PORTC=PORTC&0XBB;//PC2 to low , ,turn off all light
98 1 PORTC=PORTC|0X01;//PC0 TO HIGH.
99 1 ET2 =0;
100 1 IT0=0;//falling edge trigger
101 1
102 1 EA=1;//enable cpu interrupt
103 1
104 1 //set=0;//总是从TV开始
105 1 //last_led_value=0x7f;
106 1 get_set();
107 1 get_flash_data();
108 1
109 1 //time0_value.tempval=0;
C51 COMPILER V7.00 MAIN 08/06/2007 11:45:43 PAGE 16
110 1 //time0_over=0;
111 1 //low.tempval=0;
112 1 //low_over=0;
113 1 type=0;
114 1 //KEYSCAN_ENABLE=0;//??????????
115 1 //EXTEND_TIME =0;//????????????
116 1 toggle=0;
117 1
118 1 end_flag=0;
119 1 //last_led_value=0x7f;//1011 1111
120 1 last_pb=0x7f;
121 1 //stuck_key=255;
122 1 }
123
124
125
126 void CHECK_ACCESS_COMPLETE(void)
127 {
128 1 while((FAS & 0x01) == 1); // FBUSY bit
129 1 }
130
131 void _WR_(void)
132 {
133 1 CHECK_ACCESS_COMPLETE();//test busy bit wait for complete
134 1 FPTRL = (unsigned char)DATA_FLASH_PTR;//address
135 1 FPTRH = (unsigned char)(DATA_FLASH_PTR>>8);
136 1 FDB = FLASH_BUFFER;//a byte
137 1 FCNT = 1;//start to execute
138 1 CHECK_ACCESS_COMPLETE();//test busy bit wait for complete
139 1 }
140 void _RD_(void)
141 {
142 1 CHECK_ACCESS_COMPLETE();
143 1 FPTRL = (unsigned char)DATA_FLASH_PTR;
144 1 FPTRH = (unsigned char)(DATA_FLASH_PTR>>8);
145 1 FLASH_BUFFER = FDB;
146 1 CHECK_ACCESS_COMPLETE();
147 1 }
148
149
150
151 void SRAM_TO_FLASH(char adress,char value)
152 {
153 1 DATA_FLASH_PTR=adress;
154 1 FLASH_BUFFER = value;
155 1 _WR_();
156 1
157 1 }
158
159 char FLASH_TO_SRAM(char adress)
160 {
161 1 DATA_FLASH_PTR=adress;
162 1 _RD_();
163 1 return(FLASH_BUFFER);
164 1
165 1 }
166 void get_flash_data(void)
167 {
168 1
169 1
170 1 flash_flag=FLASH_TO_SRAM(8);
171 1 if(flash_flag!=0x90)//如果是第一次则向FLASH写入出厂初值
C51 COMPILER V7.00 MAIN 08/06/2007 11:45:43 PAGE 17
172 1 {
173 2
174 2 memory_channel[0]=7;
175 2 memory_channel[1]=11;
176 2 memory_channel[2]=21;
177 2 memory_channel[3]=23;
178 2
179 2
180 2 for(m=0;m<4;m++)//高地址为高位,低地址为低位。
181 2 {
182 3 temp_data_flash=(unsigned char)memory_channel[m];
183 3 SRAM_TO_FLASH(2*m,temp_data_flash);
184 3
185 3 temp_data_flash=(unsigned char)(memory_channel[m]>>8);
186 3 SRAM_TO_FLASH(2*m+1,temp_data_flash);
187 3 }
188 2 }
189 1 for(m=0;m<4;m++)//从FLASH中得到四套当前套值
190 1 {
191 2 temp_data_flash=FLASH_TO_SRAM(2*m+1);
192 2 memory_channel[m]=temp_data_flash;
193 2
194 2 temp_data_flash=FLASH_TO_SRAM(2*m);
195 2 memory_channel[m]=(memory_channel[m]<<8)+temp_data_flash;
196 2 }
197 1 }
198 void get_last_led_value(void)
199 {
200 1 if(set==0)
201 1 {
202 2 last_led_value=0x7f;
203 2 }
204 1 else if(set==1)
205 1 {
206 2 last_led_value=0xbf;
207 2 }
208 1 else if(set==2)
209 1 {
210 2 last_led_value=0xdf;
211 2 }
212 1 else if(set==3)
213 1 {
214 2 last_led_value=0xef;
215 2 }
216 1
217 1 }
218 void get_set(void)
219 {
220 1 flash_flag=FLASH_TO_SRAM(11);
221 1 if(flash_flag!=0x90)//如果是第一次出厂赋初值
222 1 {
223 2 set=0;
224 2 }
225 1 else
226 1 {
227 2 set=FLASH_TO_SRAM(10);
228 2 }
229 1
230 1 get_last_led_value();
231 1
232 1
233 1 }
C51 COMPILER V7.00 MAIN 08/06/2007 11:45:43 PAGE 18
234 /*
235 void init_timer0(void)
236 {
237 TL0=0;
238 TH0=0;
239 TF0=0;
240 }
241 */
242 //################基本电平#############################//
243
244 void sent_uint_rc5_hi(void)
245 {
246 1 RCAP2L=0xff-0x78;
247 1 RCAP2H=0xff-0x03;
248 1 CACON_VALUE=0x07;//00000111
249 1 PCON=PCON|0X01;//bit 0 -> IDLE mode, assumed only waiting timer 2 interrupt
250 1 }
251 void sent_uint_rc5_low(void)
252 {
253 1 RCAP2L=0xff-0x78;
254 1 RCAP2H=0xff-0x03;
255 1 CACON_VALUE=0x03;//00000011
256 1 PCON=PCON|0X01;
257 1
258 1 }
259 void sent_uint_rc6_hi(void)
260 {
261 1 RCAP2L=0xff-0xbc;
262 1 RCAP2H=0xff-0x01;
263 1 CACON_VALUE=0x07;//00000111
264 1 PCON=PCON|0X01;//bit 0 -> IDLE mode, assumed only waiting timer 2 interrupt
265 1
266 1 }
267 void sent_uint_rc6_low(void)
268 {
269 1 RCAP2L=0xff-0xbc;
270 1 RCAP2H=0xff-0x01;
271 1 CACON_VALUE=0x03;//00000011
272 1 PCON=PCON|0X01;
273 1
274 1 }
275 //########################################################//
276
277
278
279 //################基本位电平#####################//
280 void sent_unit_rc5_hi_low(void)//n:type i:lead,0,1,or endcode
281 {
282 1
283 1 sent_uint_rc5_hi();
284 1
285 1 sent_uint_rc5_low();
286 1 }
287
288 void sent_unit_rc5_low_hi(void)
289 {
290 1 sent_uint_rc5_low();
291 1
292 1 sent_uint_rc5_hi();
293 1
294 1 }
295 void sent_unit_rc6_hi_low(void)//n:type i:lead,0,1,or endcode
C51 COMPILER V7.00 MAIN 08/06/2007 11:45:43 PAGE 19
296 {
297 1
298 1 sent_uint_rc6_hi();
299 1
300 1 sent_uint_rc6_low();
301 1 }
302
303 void sent_unit_rc6_low_hi(void)
304 {
305 1 sent_uint_rc6_low();
306 1
307 1 sent_uint_rc6_hi();
308 1
309 1 }
310 //###############################################//
311
312 //###################基本字节电平###################//
313
314 void sent_n_bit_0_hl_1_lh(char n,char temp)//rc5码 0电平为高低,1电平为低高
315 {
316 1 unsigned char idata reverse;
317 1 unsigned char idata m;
318 1 if(n==8)
319 1 {
320 2 reverse=2;
321 2 }
322 1 else
323 1 {
324 2 reverse=10;
325 2 }
326 1 for(m=0;m<n;m++)
327 1 {
328 2
329 2 if(m==reverse)
330 2 {
331 3 if(toggle==0)
332 3 {
333 4 sent_unit_rc5_hi_low();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -