📄 uart.lis
字号:
02B2 2990 ld R2,y+
02B4 .dbline 0 ; func end
02B4 1895 reti
02B6 ; loopi -> R10
02B6 ; delay_count -> y+10
.even
02B6 _delay::
02B6 00D0 rcall push_arg4
02B8 00D0 rcall push_gset3
02BA 2497 sbiw R28,4
02BC ; }
02BC ;
02BC ; void delay(unsigned long delay_count)
02BC ; {
02BC 06C0 rjmp L45
02BE L44:
02BE ; unsigned char loopi;
02BE ; while(delay_count-- != 0)
02BE ; {
02BE AA24 clr R10
02C0 01C0 rjmp L50
02C2 L47:
02C2 L48:
02C2 A394 inc R10
02C4 L50:
02C4 8A2D mov R24,R10
02C6 8230 cpi R24,2
02C8 E0F3 brlo L47
02CA L45:
02CA FE01 movw R30,R28
02CC 2284 ldd R2,z+10
02CE 3384 ldd R3,z+11
02D0 4484 ldd R4,z+12
02D2 5584 ldd R5,z+13
02D4 FE01 movw R30,R28
02D6 2082 std z+0,R2
02D8 3182 std z+1,R3
02DA 4282 std z+2,R4
02DC 5382 std z+3,R5
02DE 41E0 ldi R20,1
02E0 50E0 ldi R21,0
02E2 60E0 ldi R22,0
02E4 70E0 ldi R23,0
02E6 FE01 movw R30,R28
02E8 2080 ldd R2,z+0
02EA 3180 ldd R3,z+1
02EC 4280 ldd R4,z+2
02EE 5380 ldd R5,z+3
02F0 241A sub R2,R20
02F2 350A sbc R3,R21
02F4 460A sbc R4,R22
02F6 570A sbc R5,R23
02F8 FE01 movw R30,R28
02FA 2286 std z+10,R2
02FC 3386 std z+11,R3
02FE 4486 std z+12,R4
0300 5586 std z+13,R5
0302 40E0 ldi R20,0
0304 50E0 ldi R21,0
0306 60E0 ldi R22,0
0308 70E0 ldi R23,0
030A FE01 movw R30,R28
030C 2080 ldd R2,z+0
030E 3180 ldd R3,z+1
0310 4280 ldd R4,z+2
0312 5380 ldd R5,z+3
0314 2416 cp R2,R20
0316 3506 cpc R3,R21
0318 4606 cpc R4,R22
031A 5706 cpc R5,R23
031C 09F0 breq X2
031E CFCF rjmp L44
0320 X2:
0320 L43:
0320 2496 adiw R28,4
0322 00D0 rcall pop_gset3
0324 2496 adiw R28,4
0326 .dbline 0 ; func end
0326 0895 ret
0328 ; s -> R20,R21
.even
0328 _puts::
0328 00D0 rcall push_gset1
032A A801 movw R20,R16
032C ; for(loopi=0;loopi<2;loopi++);
032C ; }
032C ; }
032C ;
032C ;
032C ;
032C ; /* 字符串输出函数 */
032C ; void puts(char *s)
032C ; {
032C 05C0 rjmp L53
032E L52:
032E FA01 movw R30,R20
0330 0081 ldd R16,z+0
0332 6EDE rcall _putchar
0334 4F5F subi R20,255 ; offset = 1
0336 5F4F sbci R21,255
0338 L53:
0338 ; while (*s)
0338 FA01 movw R30,R20
033A 2080 ldd R2,z+0
033C 2220 tst R2
033E B9F7 brne L52
0340 ; {
0340 ; putchar(*s);
0340 ; s++;
0340 ; }
0340 ; putchar(0x0a);//回车换行
0340 0AE0 ldi R16,10
0342 66DE rcall _putchar
0344 ; putchar(0x0d);
0344 0DE0 ldi R16,13
0346 64DE rcall _putchar
0348 L51:
0348 00D0 rcall pop_gset1
034A .dbline 0 ; func end
034A 0895 ret
.even
034C _uart_init::
034C ; }
034C ;
034C ;
034C ; /* UART初始化 */
034C ; void uart_init(void)
034C ; {
034C ; // OSCCAL=read_flash(0x1f20);
034C ; rsok00=0;
034C 2224 clr R2
034E 20922700 sts _rsok00,R2
0352 ; rsok10=0;
0352 20922600 sts _rsok10,R2
0356 ; rsok20=0;
0356 20922500 sts _rsok20,R2
035A ; rsok30=0;
035A 20922400 sts _rsok30,R2
035E ; rsok40=0;
035E 20922300 sts _rsok40,R2
0362 ; rcvd1=0x00;
0362 20922E00 sts _rcvd1,R2
0366 ; rscnt11=0x00;
0366 20922D00 sts _rscnt11,R2
036A ; rscnt12=0x00;
036A 20922C00 sts _rscnt12,R2
036E ; rscnt13=0x00;
036E 20922B00 sts _rscnt13,R2
0372 ; rscnt01=0x00;
0372 20922A00 sts _rscnt01,R2
0376 ; xx0=0;xx1=0;
0376 20922900 sts _xx0,R2
037A 20922800 sts _xx1,R2
037E ; //UCSRB=0x90;//允许发送并开接收中断,发送不使能
037E ; UCSRB = 0x00;
037E 2AB8 out 0xa,R2
0380 ; UCSRA = 0x00;
0380 2BB8 out 0xb,R2
0382 ; UBRRL=(fosc/16/(baud+1))%256;
0382 88E6 ldi R24,104
0384 89B9 out 0x9,R24
0386 ; UBRRH=(fosc/16/(baud+1))/256;
0386 20BC out 0x20,R2
0388 ; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
0388 86E8 ldi R24,134
038A 80BD out 0x20,R24
038C ; UCSRB=0x98;
038C 88E9 ldi R24,152
038E 8AB9 out 0xa,R24
0390 L55:
0390 .dbline 0 ; func end
0390 0895 ret
.even
0392 _port_init::
0392 ; }
0392 ;
0392 ; void port_init(void)
0392 ; {
0392 ; //PB1-PCLK
0392 ; //PB0-PDIO
0392 ; PORTB = 0x00;
0392 2224 clr R2
0394 28BA out 0x18,R2
0396 ; DDRB = 0x03;
0396 83E0 ldi R24,3
0398 87BB out 0x17,R24
039A ; //PD5-PSEL
039A ; //PD3-DCLK
039A ; //PD4-DIO
039A ; PORTD = 0x20;
039A 80E2 ldi R24,32
039C 82BB out 0x12,R24
039E ; DDRD = 0x30;
039E 80E3 ldi R24,48
03A0 81BB out 0x11,R24
03A2 L56:
03A2 .dbline 0 ; func end
03A2 0895 ret
.even
03A4 _entcomm::
03A4 ; }
03A4 ;
03A4 ; /* 确认帧 */
03A4 ; void entcomm(void)
03A4 ; {
03A4 ; xx0=0;xx1=0;
03A4 2224 clr R2
03A6 20922900 sts _xx0,R2
03AA 20922800 sts _xx1,R2
03AE ; UDR=0x55;
03AE 85E5 ldi R24,85
03B0 8CB9 out 0xc,R24
03B2 ; xx0=xx0^0x55;
03B2 2826 eor R2,R24
03B4 20922900 sts _xx0,R2
03B8 ; xx1+=0x55;
03B8 80912800 lds R24,_xx1
03BC 8B5A subi R24,171 ; addi 85
03BE 80932800 sts _xx1,R24
03C2 L58:
03C2 L59:
03C2 ; while (!(UCSRA&(1<<UDRE)));
03C2 5D9B sbis 0xb,5
03C4 FECF rjmp L58
03C6 ; UDR=0xaa;
03C6 8AEA ldi R24,170
03C8 8CB9 out 0xc,R24
03CA ; xx0=xx0^0xaa;
03CA 9927 clr R25
03CC 20902900 lds R2,_xx0
03D0 3324 clr R3
03D2 2826 eor R2,R24
03D4 3926 eor R3,R25
03D6 20922900 sts _xx0,R2
03DA ; xx1+=0xaa;
03DA 80912800 lds R24,_xx1
03DE 8655 subi R24,86 ; addi 170
03E0 80932800 sts _xx1,R24
03E4 L61:
03E4 L62:
03E4 ; while (!(UCSRA&(1<<UDRE)));
03E4 5D9B sbis 0xb,5
03E6 FECF rjmp L61
03E8 ; UDR=addressper;
03E8 80E1 ldi R24,16
03EA 8CB9 out 0xc,R24
03EC ; xx0=xx0^addressper;
03EC 20902900 lds R2,_xx0
03F0 2826 eor R2,R24
03F2 20922900 sts _xx0,R2
03F6 ; xx1+=addressper;
03F6 80912800 lds R24,_xx1
03FA 805F subi R24,240 ; addi 16
03FC 80932800 sts _xx1,R24
0400 L64:
0400 L65:
0400 ; while (!(UCSRA&(1<<UDRE)));
0400 5D9B sbis 0xb,5
0402 FECF rjmp L64
0404 ; UDR=0x56;
0404 86E5 ldi R24,86
0406 8CB9 out 0xc,R24
0408 ; xx0=xx0^0x56;
0408 20902900 lds R2,_xx0
040C 2826 eor R2,R24
040E 20922900 sts _xx0,R2
0412 ; xx1+=0x56;
0412 80912800 lds R24,_xx1
0416 8A5A subi R24,170 ; addi 86
0418 80932800 sts _xx1,R24
041C L67:
041C L68:
041C ; while (!(UCSRA&(1<<UDRE)));
041C 5D9B sbis 0xb,5
041E FECF rjmp L67
0420 ; UDR=0;
0420 2224 clr R2
0422 2CB8 out 0xc,R2
0424 ; xx0=xx0^0x00;
0424 20902900 lds R2,_xx0
0428 20922900 sts _xx0,R2
042C ; xx1+=0x00;
042C 20902800 lds R2,_xx1
0430 20922800 sts _xx1,R2
0434 L70:
0434 L71:
0434 ; while (!(UCSRA&(1<<UDRE)));
0434 5D9B sbis 0xb,5
0436 FECF rjmp L70
0438 ; UDR=0x16;
0438 86E1 ldi R24,22
043A 8CB9 out 0xc,R24
043C ; xx0=xx0^0x16;
043C 20902900 lds R2,_xx0
0440 2826 eor R2,R24
0442 20922900 sts _xx0,R2
0446 ; xx1+=0x16;
0446 80912800 lds R24,_xx1
044A 8A5E subi R24,234 ; addi 22
044C 80932800 sts _xx1,R24
0450 L73:
0450 L74:
0450 ; while (!(UCSRA&(1<<UDRE)));
0450 5D9B sbis 0xb,5
0452 FECF rjmp L73
0454 ; UDR=xx0;
0454 20902900 lds R2,_xx0
0458 2CB8 out 0xc,R2
045A L76:
045A L77:
045A ; while (!(UCSRA&(1<<UDRE)));
045A 5D9B sbis 0xb,5
045C FECF rjmp L76
045E L57:
045E .dbline 0 ; func end
045E 0895 ret
.even
0460 _voltagerepol::
0460 ; }
0460 ;
0460 ; /* 发送交流电压值 */
0460 ; void voltagerepol(void)
0460 ; {
0460 ; xx0=0;xx1=0;
0460 2224 clr R2
0462 20922900 sts _xx0,R2
0466 20922800 sts _xx1,R2
046A ; UDR=0x55;
046A 85E5 ldi R24,85
046C 8CB9 out 0xc,R24
046E ; xx0=xx0^0x55;
046E 2826 eor R2,R24
0470 20922900 sts _xx0,R2
0474 ; xx1+=0x55;
0474 80912800 lds R24,_xx1
0478 8B5A subi R24,171 ; addi 85
047A 80932800 sts _xx1,R24
047E L80:
047E L81:
047E ; while (!(UCSRA&(1<<UDRE)));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -