📄 232toudp.lst
字号:
0526 9029 LD R2,Y+
0527 BE2F OUT 0x3F,R2
0528 91F9 LD R31,Y+
0529 91E9 LD R30,Y+
052A 9199 LD R25,Y+
052B 9189 LD R24,Y+
052C 9029 LD R2,Y+
052D 9518 RETI
_Timer0:
i --> R20
052E 940E078B CALL push_lset
0530 940E0768 CALL push_gset1
(0272) //##############定时器中断0,串行数据流控制
(0273) void Timer0(void)
(0274) {uchar i=0;
0532 2744 CLR R20
(0275) TIMSK=0x00;//关T0中断屏蔽
0533 2422 CLR R2
0534 BE29 OUT 0x39,R2
(0276) TCNT0=0x00;//
0535 BE22 OUT 0x32,R2
(0277) TCCR0=0x00;//T0停止计数
0536 BE23 OUT 0x33,R2
(0278) usart_number=usart_number-1;
0537 91800388 LDS R24,0x388
0539 5081 SUBI R24,1
053A 93800388 STS 0x388,R24
(0279) DateLen=usart_number-42;//
053C 528A SUBI R24,0x2A
053D 93800068 STS 0x68,R24
(0280) if(Rec232[0]==0x04 && Rec232[1]==0x05 && Rec232[2]==0x06){
053F 91800289 LDS R24,0x289
0541 3084 CPI R24,4
0542 F489 BNE 0x0554
0543 9180028A LDS R24,0x28A
0545 3085 CPI R24,5
0546 F469 BNE 0x0554
0547 9180028B LDS R24,0x28B
0549 3086 CPI R24,6
054A F449 BNE 0x0554
(0281) putchar(0x4F);putchar(0x4B);putchar(0x21);
054B E40F LDI R16,0x4F
054C 940E062D CALL _putchar
054E E40B LDI R16,0x4B
054F 940E062D CALL _putchar
0551 E201 LDI R16,0x21
0552 940E062D CALL _putchar
(0282) }//连接成功回答OK!
(0283) if(Rec232[0]==0x4c && Rec232[1]==0x48 && Rec232[2]==0x46){//是不是LHF,是则发送
0554 91800289 LDS R24,0x289
0556 348C CPI R24,0x4C
0557 F009 BEQ 0x0559
0558 C047 RJMP 0x05A0
0559 9180028A LDS R24,0x28A
055B 3488 CPI R24,0x48
055C F009 BEQ 0x055E
055D C042 RJMP 0x05A0
055E 9180028B LDS R24,0x28B
0560 3486 CPI R24,0x46
0561 F009 BEQ 0x0563
0562 C03D RJMP 0x05A0
(0284) for(i=3;i<15;i++)MACHead[i-3]=Rec232[i];
0563 E043 LDI R20,3
0564 C00F RJMP 0x0574
0565 E889 LDI R24,0x89
0566 E092 LDI R25,2
0567 2FE4 MOV R30,R20
0568 27FF CLR R31
0569 0FE8 ADD R30,R24
056A 1FF9 ADC R31,R25
056B 8020 LDD R2,Z+0
056C E686 LDI R24,0x66
056D E090 LDI R25,0
056E 2FE4 MOV R30,R20
056F 27FF CLR R31
0570 0FE8 ADD R30,R24
0571 1FF9 ADC R31,R25
0572 8220 STD Z+0,R2
0573 9543 INC R20
0574 304F CPI R20,0xF
0575 F378 BCS 0x0565
(0285) for(i=15;i<35;i++)IpHead[i-15]=Rec232[i];
0576 E04F LDI R20,0xF
0577 C00F RJMP 0x0587
0578 E889 LDI R24,0x89
0579 E092 LDI R25,2
057A 2FE4 MOV R30,R20
057B 27FF CLR R31
057C 0FE8 ADD R30,R24
057D 1FF9 ADC R31,R25
057E 8020 LDD R2,Z+0
057F E688 LDI R24,0x68
0580 E090 LDI R25,0
0581 2FE4 MOV R30,R20
0582 27FF CLR R31
0583 0FE8 ADD R30,R24
0584 1FF9 ADC R31,R25
0585 8220 STD Z+0,R2
0586 9543 INC R20
0587 3243 CPI R20,0x23
0588 F378 BCS 0x0578
(0286) for(i=35;i<usart_number+1;i++)UDPpacket[i-23]=Rec232[i];
0589 E243 LDI R20,0x23
058A C00F RJMP 0x059A
058B E889 LDI R24,0x89
058C E092 LDI R25,2
058D 2FE4 MOV R30,R20
058E 27FF CLR R31
058F 0FE8 ADD R30,R24
0590 1FF9 ADC R31,R25
0591 8020 LDD R2,Z+0
0592 E784 LDI R24,0x74
0593 E090 LDI R25,0
0594 2FE4 MOV R30,R20
0595 27FF CLR R31
0596 0FE8 ADD R30,R24
0597 1FF9 ADC R31,R25
0598 8220 STD Z+0,R2
0599 9543 INC R20
059A 91800388 LDS R24,0x388
059C 5F8F SUBI R24,0xFF
059D 1748 CP R20,R24
059E F360 BCS 0x058B
(0287) Transmit_Packets();}//发送数据
059F DC9E RCALL _Transmit_Packets
(0288) if(Rec232[0]==0x4d && Rec232[1]==0x41 && Rec232[2]==0x43){//是不是MAC 配置28J60
05A0 91800289 LDS R24,0x289
05A2 348D CPI R24,0x4D
05A3 F009 BEQ 0x05A5
05A4 C045 RJMP 0x05EA
05A5 9180028A LDS R24,0x28A
05A7 3481 CPI R24,0x41
05A8 F009 BEQ 0x05AA
05A9 C040 RJMP 0x05EA
05AA 9180028B LDS R24,0x28B
05AC 3483 CPI R24,0x43
05AD F009 BEQ 0x05AF
05AE C03B RJMP 0x05EA
(0289) for(i=3;i<15;i++)MACHead[i-3]=Rec232[i];
05AF E043 LDI R20,3
05B0 C00F RJMP 0x05C0
05B1 E889 LDI R24,0x89
05B2 E092 LDI R25,2
05B3 2FE4 MOV R30,R20
05B4 27FF CLR R31
05B5 0FE8 ADD R30,R24
05B6 1FF9 ADC R31,R25
05B7 8020 LDD R2,Z+0
05B8 E686 LDI R24,0x66
05B9 E090 LDI R25,0
05BA 2FE4 MOV R30,R20
05BB 27FF CLR R31
05BC 0FE8 ADD R30,R24
05BD 1FF9 ADC R31,R25
05BE 8220 STD Z+0,R2
05BF 9543 INC R20
05C0 304F CPI R20,0xF
05C1 F378 BCS 0x05B1
(0290) for(i=15;i<35;i++)IpHead[i-15]=Rec232[i];
05C2 E04F LDI R20,0xF
05C3 C00F RJMP 0x05D3
05C4 E889 LDI R24,0x89
05C5 E092 LDI R25,2
05C6 2FE4 MOV R30,R20
05C7 27FF CLR R31
05C8 0FE8 ADD R30,R24
05C9 1FF9 ADC R31,R25
05CA 8020 LDD R2,Z+0
05CB E688 LDI R24,0x68
05CC E090 LDI R25,0
05CD 2FE4 MOV R30,R20
05CE 27FF CLR R31
05CF 0FE8 ADD R30,R24
05D0 1FF9 ADC R31,R25
05D1 8220 STD Z+0,R2
05D2 9543 INC R20
05D3 3243 CPI R20,0x23
05D4 F378 BCS 0x05C4
(0291) ENC28J60_Initialize();
05D5 DE3A RCALL _ENC28J60_Initialize
(0292) delay(50);
05D6 E302 LDI R16,0x32
05D7 940E0617 CALL _delay
(0293) putchar(0x4C);
05D9 E40C LDI R16,0x4C
05DA 940E062D CALL _putchar
(0294) putchar(0x48);
05DC E408 LDI R16,0x48
05DD 940E062D CALL _putchar
(0295) putchar(0x46);//发送"LHF"通知上位机,
05DF E406 LDI R16,0x46
05E0 940E062D CALL _putchar
(0296) for(i=0;i<12;i++)putchar(i);//配置成功则返回0,1,2,3,...11
05E2 2744 CLR R20
05E3 C004 RJMP 0x05E8
05E4 2F04 MOV R16,R20
05E5 940E062D CALL _putchar
05E7 9543 INC R20
05E8 304C CPI R20,0xC
05E9 F3D0 BCS 0x05E4
(0297) }
(0298) usart_number=0;
05EA 2422 CLR R2
05EB 92200388 STS 0x388,R2
(0299) }
05ED 940E076B CALL pop_gset1
05EF 940E07A2 CALL pop_lset
05F1 9518 RETI
(0300) //##############################USART初始化程序###########################//
(0301) void usart_init(void)
(0302) {
(0303) UCSRB=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);//允许发送和接收
_usart_init:
05F2 E988 LDI R24,0x98
05F3 B98A OUT 0x0A,R24
(0304) UBRRL=(fosc/16/(bps+1))%256;
05F4 E181 LDI R24,0x11
05F5 B989 OUT 0x09,R24
(0305) UBRRH=(fosc/16/(bps+1))/256;
05F6 2422 CLR R2
05F7 BC20 OUT 0x20,R2
(0306) UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
05F8 E886 LDI R24,0x86
05F9 BD80 OUT 0x20,R24
(0307) }
05FA 9508 RET
(0308) //##############################系统初始化程序################################//
(0309) void AVR_Initialize(void) //初始化
(0310) {
(0311) DDRA=0xff; //
_AVR_Initialize:
05FB EF8F LDI R24,0xFF
05FC BB8A OUT 0x1A,R24
(0312) PORTA=0xff;
05FD BB8B OUT 0x1B,R24
(0313) DDRB=0xff; //
05FE BB87 OUT 0x17,R24
(0314) PORTB=0xff;
05FF BB88 OUT 0x18,R24
(0315) DDRC=0xc3; //
0600 EC83 LDI R24,0xC3
0601 BB84 OUT 0x14,R24
(0316) PORTC=0x00; //
0602 2422 CLR R2
0603 BA25 OUT 0x15,R2
(0317) DDRD=0xf0; //
0604 EF80 LDI R24,0xF0
0605 BB81 OUT 0x11,R24
(0318) PORTD=0x7f;
0606 E78F LDI R24,0x7F
0607 BB82 OUT 0x12,R24
(0319)
(0320) SPCR=0b01010000;
0608 E580 LDI R24,0x50
0609 B98D OUT 0x0D,R24
(0321) //关中断(SPIE=0),使能SPI(SPE=1),MSB首先发送(DORD=0),选择微机为主机模式(MSTR=1)
(0322) //空闲时SCK为低电平(CPOL=0),在SCK的上升沿采样(CPHA=0)ENC28J60要求SPI工作在模式0
(0323) //SPR1=0和SPR0=0,SCK=fosc/4
(0324) SPSR |=0x01;//SPI的速度加倍
060A 9A70 SBI 0x0E,0
(0325)
(0326) MCUCR=0x0a;//设置外部中断的中断触发方式为下降沿触发
060B E08A LDI R24,0xA
060C BF85 OUT 0x35,R24
(0327) GICR=0xc0; //通用中断控制寄存器设置,打开中断INT0和INT1
060D EC80 LDI R24,0xC0
060E BF8B OUT 0x3B,R24
(0328) SREG=0x80; //开全局中断
060F E880 LDI R24,0x80
0610 BF8F OUT 0x3F,R24
(0329) }
0611 9508 RET
(0330) //##################################主程序####################################//
(0331) void main()
(0332) {delay(5);
_main:
0612 E005 LDI R16,5
0613 940E0617 CALL _delay
(0333) AVR_Initialize(); //I/O口及中断初始化
0615 DFE5 RCALL _AVR_Initialize
(0334) usart_init();
(0335) //ENC28J60_Initialize();
(0336) }
0616 CFDB RJMP _usart_init
_delay:
i --> R20
k --> R16
0617 940E0768 CALL push_gset1
FILE: H:\小玩意制作\232转UDP\程序\ENC28j60.c
(0001) #include "ENC28j60.h"
(0002) uchar PHY_H=0;
(0003) uchar PHY_L=0;
(0004) //################################延时程序################################//
(0005) void delay(uchar k)//
(0006) {uint i=0;
0619 2744 CLR R20
061A 2755 CLR R21
061B C009 RJMP 0x0625
(0007) while(k--){for(i=0;i<8000;i++);}
061C 2744 CLR R20
061D 2755 CLR R21
061E C002 RJMP 0x0621
061F 5F4F SUBI R20,0xFF
0620 4F5F SBCI R21,0xFF
0621 3440 CPI R20,0x40
0622 E1EF LDI R30,0x1F
0623 075E CPC R21,R30
0624 F3D0 BCS 0x061F
0625 2E20 MOV R2,R16
0626 2433 CLR R3
0627 5001 SUBI R16,1
0628 2022 TST R2
0629 F791 BNE 0x061C
(0008) }
062A 940E076B CALL pop_gset1
062C 9508 RET
(0009) //##########################串行通信##########################//
(0010) void putchar(uchar c)
(0011) {while(!(UCSRA&(1<<UDRE)));//判断上次发送有没有完成
_putchar:
c --> R16
062D 9B5D SBIS 0x0B,5
062E CFFE RJMP _putchar
(0012) UDR=c;}
062F B90C OUT 0x0C,R16
0630 9508 RET
(0013) //##############################选通SPI器件###############################//
(0014) void Set_CS(uchar level) //
(0015) {if(level) PORTB |=0x10; //
_Set_CS:
level --> R16
0631 2300 TST R16
0632 F011 BEQ 0x0635
0633 9AC4 SBI 0x18,4
0634 C003 RJMP 0x0638
(0016) else PORTB &=0xef; //
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -