📄 图康科技.lst
字号:
2EA 0E28 ADD R2,R24
2EB 1E39 ADC R3,R25
2EC 8239 STD Y+1,R3
2ED 8228 STD Y+0,R2
2EE E022 LDI R18,2
2EF E003 LDI R16,3
2F0 DE87 RCALL _lcd_dis
(0204) lcd_dis(3,0x3,(Minutes+temp2*6+2));
2F1 9020 0112 LDS R2,temp2
2F3 E086 LDI R24,6
2F4 9D82 MUL R24,R2
2F5 0110 MOVW R2,R0
2F6 EE86 LDI R24,0xE6
2F7 E090 LDI R25,0
2F8 0E28 ADD R2,R24
2F9 1E39 ADC R3,R25
2FA 8239 STD Y+1,R3
2FB 8228 STD Y+0,R2
2FC E023 LDI R18,3
2FD E003 LDI R16,3
2FE DE79 RCALL _lcd_dis
(0205) lcd_dis(3,0x4,(Minutes+temp2*6+4));
2FF 9020 0112 LDS R2,temp2
301 E086 LDI R24,6
302 9D82 MUL R24,R2
303 0110 MOVW R2,R0
304 EE88 LDI R24,0xE8
305 E090 LDI R25,0
306 0E28 ADD R2,R24
307 1E39 ADC R3,R25
308 8239 STD Y+1,R3
309 8228 STD Y+0,R2
30A E024 LDI R18,4
30B E003 LDI R16,3
30C DE6B RCALL _lcd_dis
(0206) lcd_dis(3,0x5,dao); //显示“到!”
30D E082 LDI R24,2
30E E091 LDI R25,1
30F 8399 STD Y+1,R25
310 8388 STD Y+0,R24
311 E025 LDI R18,5
312 E003 LDI R16,3
313 DE64 RCALL _lcd_dis
(0207) lcd_dis(3,0x6,(dao+2));
314 E084 LDI R24,4
315 E091 LDI R25,1
316 8399 STD Y+1,R25
317 8388 STD Y+0,R24
318 E026 LDI R18,6
319 E003 LDI R16,3
31A DE5D RCALL _lcd_dis
31B 9622 ADIW R28,2
31C 9508 RET
(0208) }
(0209) /********************延时函数***************
(0210) *函 数:dalay
(0211) *函数功能:软件延时
(0212) *入口参数:无
(0213) *返 回 值:无
(0214) *备 注:
(0215) ****************************************************/
(0216) void delay_1us(void) //1us延时函数
(0217) {
(0218) asm("nop");
_delay_1us:
31D 0000 NOP
31E 9508 RET
_delay_nus:
i --> R20
n --> R10
31F D519 RCALL push_xgset300C
320 0158 MOVW R10,R16
(0219) }
(0220)
(0221) void delay_nus(unsigned int n) //N us延时函数
(0222) {
(0223) unsigned int i=0;
321 2744 CLR R20
322 2755 CLR R21
(0224) for (i=0;i<n;i++);
323 C002 RJMP 0x0326
324 5F4F SUBI R20,0xFF
325 4F5F SBCI R21,0xFF
326 154A CP R20,R10
327 055B CPC R21,R11
328 F3D8 BCS 0x0324
(0225) delay_1us();
329 DFF3 RCALL _delay_1us
32A C513 RJMP pop_xgset300C
(0226) }
(0227) void delay_1ms(void) //1ms延时函数
(0228) {
(0229) unsigned int i;
(0230) for (i=0;i<1140;i++);
_delay_1ms:
i --> R16
32B 2700 CLR R16
32C 2711 CLR R17
32D C002 RJMP 0x0330
32E 5F0F SUBI R16,0xFF
32F 4F1F SBCI R17,0xFF
330 3704 CPI R16,0x74
331 E0E4 LDI R30,4
332 071E CPC R17,R30
333 F3D0 BCS 0x032E
334 9508 RET
_delay_nms:
i --> R20
n --> R10
335 D503 RCALL push_xgset300C
336 0158 MOVW R10,R16
(0231) }
(0232) void delay_nms(unsigned int n) //N ms延时函数
(0233) {
(0234) unsigned int i=0;
337 2744 CLR R20
338 2755 CLR R21
(0235) for (i=0;i<n;i++)
339 C003 RJMP 0x033D
(0236) delay_1ms();
33A DFF0 RCALL _delay_1ms
33B 5F4F SUBI R20,0xFF
33C 4F5F SBCI R21,0xFF
33D 154A CP R20,R10
33E 055B CPC R21,R11
33F F3D0 BCS 0x033A
340 C4FD RJMP pop_xgset300C
_display:
341 934A ST R20,-Y
342 935A ST R21,-Y
(0237) }
(0238)
(0239) void display(void)
(0240) {
(0241) switch(page){
343 9140 01CF LDS R20,page
345 2755 CLR R21
346 3040 CPI R20,0
347 0745 CPC R20,R21
348 F069 BEQ 0x0356
349 3041 CPI R20,1
34A E0E0 LDI R30,0
34B 075E CPC R21,R30
34C F081 BEQ 0x035D
34D 3042 CPI R20,2
34E E0E0 LDI R30,0
34F 075E CPC R21,R30
350 F089 BEQ 0x0362
351 3043 CPI R20,3
352 E0E0 LDI R30,0
353 075E CPC R21,R30
354 F091 BEQ 0x0367
355 C015 RJMP 0x036B
(0242) case 0: page0();flag=1;page=1;break; //欢迎界面
356 DE60 RCALL _page0
357 E081 LDI R24,1
358 9380 01D6 STS flag,R24
35A 9380 01CF STS page,R24
35C C00E RJMP 0x036B
(0243) case 1: page1();flag=0; break; //参数设置页面
35D DE85 RCALL _page1
35E 2422 CLR R2
35F 9220 01D6 STS flag,R2
361 C009 RJMP 0x036B
(0244) case 2: page2();flag=0; break; //开始界面
362 DEA1 RCALL _page2
363 2422 CLR R2
364 9220 01D6 STS flag,R2
366 C004 RJMP 0x036B
(0245) case 3: page3();flag=0; break; //结束界面
367 DEBC RCALL _page3
368 2422 CLR R2
369 9220 01D6 STS flag,R2
(0246) default:break;
36B 9159 LD R21,Y+
36C 9149 LD R20,Y+
36D 9508 RET
FILE: F:\Work\Data\程序\修订版~1.1\Send_485.c
(0001) /*****************************************************
(0002) * File name : Send_485.C
(0003) * Description : Header file of main_H.H
(0004) * Platform : ICCAVR
(0005) * Author : xiao xue
(0006) * Email : ay1509@yahoo.com
(0007) * Date : 2008-03-13
(0008) * Description :485 Communications
(0009) /********************头文件*************************/
(0010) #include"main_H.h"
(0011) #define fosc 8000000
(0012) #define baud 9600
(0013) /***************************485初始化***************************/
(0014) void RS485_init(void)
(0015) {
(0016) UCSRB=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN); //接收完成中断使能
_RS485_init:
36E E988 LDI R24,0x98
36F B98A OUT 0x0A,R24
(0017) //充许发送、充许接收
(0018) UBRRL=(fosc/16/(baud+1))%256; //波特率为9600
370 E384 LDI R24,0x34
371 B989 OUT 0x09,R24
(0019) UBRRH=(fosc/16/(baud+1))/256;
372 2422 CLR R2
373 BC20 OUT 0x20,R2
(0020) UCSRC=(1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);
374 E886 LDI R24,0x86
375 BD80 OUT 0x20,R24
(0021) PORTD&=~0x04; //允许接收数据
376 9892 CBI 0x12,2
(0022) DDRD|=0x04; //数据方向
377 9A8A SBI 0x11,2
378 9508 RET
(0023) }
(0024) /******************485发送一个字节子程序************************/
(0025) void RS485_out_byte(uchar data )
(0026) {
(0027)
(0028) while(!(UCSRA & (1<<UDRE)) ); //等待数据寄存器不为空
_RS485_out_byte:
data --> R16
379 9B5D SBIS 0x0B,5
37A CFFE RJMP _RS485_out_byte
(0029) UDR=data;
37B B90C OUT 0x0C,R16
(0030) while(!(UCSRA & (BIT(TXC)))); //等待USART发送完成
37C 9B5E SBIS 0x0B,6
37D CFFE RJMP 0x037C
(0031) UCSRA|=BIT(TXC);
37E 9A5E SBI 0x0B,6
37F 9508 RET
_RS485_out_6byte:
i --> R20
datas --> R10
380 D4B8 RCALL push_xgset300C
381 0158 MOVW R10,R16
(0032) }
(0033)
(0034) /**************************一次发送6个字节*********************/
(0035)
(0036) void RS485_out_6byte(uchar *datas )
(0037) {
(0038) uint i=0;
382 2744 CLR R20
383 2755 CLR R21
(0039) CLI(); //关中断
384 94F8 BCLR 7
(0040) PORTD|=0x04; //允许发送
385 9A92 SBI 0x12,2
386 C007 RJMP 0x038E
(0041) while(i<6 ){
(0042) RS485_out_byte(*(datas+i)); //发送1个字节
387 01FA MOVW R30,R20
388 0DEA ADD R30,R10
389 1DFB ADC R31,R11
38A 8100 LDD R16,Z+0
38B DFED RCALL _RS485_out_byte
(0043) i++;
38C 5F4F SUBI R20,0xFF
38D 4F5F SBCI R21,0xFF
38E 3046 CPI R20,6
38F E0E0 LDI R30,0
390 075E CPC R21,R30
391 F3A8 BCS 0x0387
(0044) }
(0045) delay_nms(5); //延时
392 E005 LDI R16,5
393 E010 LDI R17,0
394 DFA0 RCALL _delay_nms
(0046) PORTD&=~0x04; //允许接收
395 9892 CBI 0x12,2
(0047) SEI();
396 9478 BSET 7
397 C4A6 RJMP pop_xgset300C
(0048) }
(0049) /**************************485发送数据函数*****************/
(0050) void Send_485(void)
(0051) {
(0052) RS485_out_6byte(moto1); //给节点1发送数据
_Send_485:
398 E104 LDI R16,0x14
399 E011 LDI R17,1
39A DFE5 RCALL _RS485_out_6byte
(0053) RS485_out_6byte(moto2); //给节点2发送数据
39B E10A LDI R16,0x1A
39C E011 LDI R17,1
39D DFE2 RCALL _RS485_out_6byte
(0054) RS485_out_6byte(moto3);
39E E200 LDI R16,0x20
39F E011 LDI R17,1
3A0 DFDF RCALL _RS485_out_6byte
(0055) RS485_out_6byte(moto4);
3A1 E206 LDI R16,0x26
3A2 E011 LDI R17,1
3A3 DFDC RCALL _RS485_out_6byte
3A4 9508 RET
_RS485_ISR:
3A5 922A ST R2,-Y
3A6 938A ST R24,-Y
3A7 939A ST R25,-Y
3A8 93EA ST R30,-Y
3A9 93FA ST R31,-Y
3AA B62F IN R2,0x3F
3AB 922A ST R2,-Y
(0056) }
(0057) /***************************中断接收服务子程序*******************/
(0058) #pragma interrupt_handler RS485_ISR:iv_USART_RX
(0059) void RS485_ISR(void)
(0060) {
(0061) CLI(); //关中断
3AC 94F8 BCLR 7
(0062) PORTD&=~0x04; //允许接收
3AD 9892 CBI 0x12,2
(0063) getchar[RS_i]=UDR; //存储数据寄存器的值
3AE ED80 LDI R24,0xD0
3AF E091 LDI R25,1
3B0 91E0 012C LDS R30,RS_i
3B2 27FF CLR R31
3B3 0FE8 ADD R30,R24
3B4 1FF9 ADC R31,R25
3B5 B02C IN R2,0x0C
3B6 8220 STD Z+0,R2
(0064) RS_i++; //预备存储下一个
3B7 9180 012C LDS R24,RS_i
3B9 5F8F SUBI R24,0xFF
3BA 9380 012C STS RS_i,R24
(0065) if(RS_i==6) //接收6个后清零
3BC 3086 CPI R24,6
3BD F431 BNE 0x03C4
(0066) {RS_i=0;flag=3;}
3BE 2422 CLR R2
3BF 9220 012C STS RS_i,R2
3C1 E083 LDI R24,3
3C2 9380 01D6 STS flag,R24
(0067) SEI(); //开中断
3C4 9478 BSET 7
3C5 9029 LD R2,Y+
3C6 BE2F OUT 0x3F,R2
3C7 91F9 LD R31,Y+
3C8 91E9 LD R30,Y+
3C9 9199 LD R25,Y+
3CA 9189 LD R24,Y+
3CB 9029 LD R2,Y+
3CC 9518 RETI
(0068) }
(0069)
(0070) /**********************接收数组判断存储子程序************************/
(0071) void data_decide(void)
(0072) {
(0073) uchar RS_j=0;
_data_decide:
RS_j --> R16
3CD 2700 CLR R16
(0074) if(getchar[0]==0xaa){
3CE 9180 01D0 LDS R24,getchar
3D0 3A8A CPI R24,0xAA
3D1 F009 BEQ 0x03D3
3D2 C069 RJMP 0x043C
(0075) switch(getchar[1]){
3D3 9120 01D1 LDS R18,getchar+1
3D5 2733 CLR R19
3D6 322D CPI R18,0x2D
3D7 E0E0 LDI R30,0
3D8 073E CPC R19,R30
3D9 F409 BNE 0x03DB
3DA C03B RJMP 0x0416
3DB E28D LDI R24,0x2D
3DC E090 LDI R25,0
3DD 1782 CP R24,R18
3DE 0793 CPC R25,R19
3DF F02C BLT 0x03E5
3E0 312E CPI R18,0x1E
3E1 E0E0 LDI R30,0
3E2 073E CPC R19,R30
3E3 F101 BEQ 0x0404
3E4 C057 RJMP 0x043C
3E5 332C CPI R18,0x3C
3E6 E0E0 LDI R30,0
3E7 073E CPC R19,R30
3E8 F409 BNE 0x03EA
3E9 C03E RJMP 0x0428
3EA 332C CPI R18,0x3C
3EB E0E0 LDI R30,0
3EC 073E CPC R19,R30
3ED F40C BGE 0x03EF
3EE C04D RJMP 0x043C
3EF 342B CPI R18,0x4B
3F0 E0E0 LDI R30,0
3F1 073E CPC R19,R30
3F2 F409 BNE 0x03F4
3F3 C046 RJMP 0x043A
3F4 C047 RJMP 0x043C
(0076) case 0x1e: //节点1
(0077) while(RS_j<6){
(0078) get[0+RS_j]=getchar[RS_j];
3F5 ED80 LDI R24,0xD0
3F6 E091 LDI R25,1
3F7 2FE0 MOV R30,R16
3F8 27FF CLR R31
3F9 0FE8 ADD R30,R24
3FA 1FF9 ADC R31,R25
3FB 8020 LDD R2,Z+0
3FC ED89 LDI R24,0xD9
3FD E091 LDI R25,1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -