📄 jk0061119.lst
字号:
(0073) #pragma interrupt_handler timer0_ovf_isr:18
(0074) void timer0_ovf_isr(void)
(0075) {
(0076) TCNT0= 0xA3; //set count
0303 EA83 LDI R24,0xA3
0304 BF82 OUT 0x32,R24
(0077) if(Time0_Ovf_com0_ProgramBranch==0)
0305 90200100 LDS R2,0x100
0307 2022 TST R2
0308 F421 BNE 0x030D
(0078) Com0_R_Cout=0;
0309 2422 CLR R2
030A 92200101 STS 0x101,R2
030C C00D RJMP 0x031A
(0079) else
(0080) {
(0081) Com0_R_Complete=1;
030D E081 LDI R24,1
030E 93800102 STS 0x102,R24
(0082) Com0_R_CRCcouter=Com0_R_Cout-2;
0310 91800101 LDS R24,0x101
0312 5082 SUBI R24,2
0313 9380037C STS _Com0_R_CRCcouter,R24
(0083) UCSR0B = 0xC8;///close the receiveing interrupt
0315 EC88 LDI R24,0xC8
0316 B98A OUT 0x0A,R24
(0084) Time0_Ovf_com0_ProgramBranch=0;
0317 2422 CLR R2
0318 92200100 STS 0x100,R2
(0085) }
(0086) }
031A 9029 LD R2,Y+
031B BE2F OUT 0x3F,R2
031C 9189 LD R24,Y+
031D 9029 LD R2,Y+
031E 9518 RETI
(0087) //UART0 initialisation
(0088) // desired baud rate: 9600
(0089) // actual: baud rate:9600 (0.0%)
(0090) // char size: 8 bit
(0091) // parity: Disabled
(0092) void uart0_init(void)
(0093) {
(0094) UCSR0B = 0x00; //disable while setting baud rate
_uart0_init:
031F 2422 CLR R2
0320 B82A OUT 0x0A,R2
(0095) UCSR0A = 0x00; //disable while setting baud rate
0321 B82B OUT 0x0B,R2
(0096) UBRR0L =0x2F; //set baud rate
0322 E28F LDI R24,0x2F
0323 B989 OUT 0x09,R24
(0097) UBRR0H = 0x00;
0324 BC20 OUT 0x20,R2
(0098) UCSR0C = 0x86;
0325 E886 LDI R24,0x86
0326 BD80 OUT 0x20,R24
(0099) UCSR0A = 0x00; //enable
0327 B82B OUT 0x0B,R2
(0100) UCSR0B = 0xD8; //enable
0328 ED88 LDI R24,0xD8
0329 B98A OUT 0x0A,R24
(0101) }
032A 9508 RET
_uart0_rx_isr:
032B 922A ST R2,-Y
032C 923A ST R3,-Y
032D 938A ST R24,-Y
032E 939A ST R25,-Y
032F 93EA ST R30,-Y
0330 93FA ST R31,-Y
0331 B62F IN R2,0x3F
0332 922A ST R2,-Y
(0102)
(0103) #pragma interrupt_handler uart0_rx_isr:20
(0104) void uart0_rx_isr(void)
(0105) {
(0106) //uart has received a character in UDR
(0107) Com0_R_Data[Com0_R_Cout]=UDR0;
0333 E688 LDI R24,0x68
0334 E093 LDI R25,3
0335 91E00101 LDS R30,0x101
0337 27FF CLR R31
0338 0FE8 ADD R30,R24
0339 1FF9 ADC R31,R25
033A B02C IN R2,0x0C
033B 8220 STD Z+0,R2
(0108) if(Com0_R_Data[0]==Com0_S_Data[0])
033C 9020032C LDS R2,_Com0_S_Data
033E 90300368 LDS R3,_Com0_R_Data
0340 1432 CP R3,R2
0341 F459 BNE 0x034D
(0109) {
(0110) if(Com0_R_Cout<18)
0342 91800101 LDS R24,0x101
0344 3182 CPI R24,0x12
0345 F418 BCC 0x0349
(0111) Com0_R_Cout++;
0346 5F8F SUBI R24,0xFF
0347 93800101 STS 0x101,R24
(0112) Time0_Ovf_com0_ProgramBranch=1;
0349 E081 LDI R24,1
034A 93800100 STS 0x100,R24
(0113) }
034C C006 RJMP 0x0353
(0114) else
(0115) {
(0116) Com0_R_Cout=1;
034D E081 LDI R24,1
034E 93800101 STS 0x101,R24
(0117) Time0_Ovf_com0_ProgramBranch=0;
0350 2422 CLR R2
0351 92200100 STS 0x100,R2
(0118) }
(0119) TCNT0=0xB9;
0353 EB89 LDI R24,0xB9
0354 BF82 OUT 0x32,R24
(0120) }
0355 9029 LD R2,Y+
0356 BE2F OUT 0x3F,R2
0357 91F9 LD R31,Y+
0358 91E9 LD R30,Y+
0359 9199 LD R25,Y+
035A 9189 LD R24,Y+
035B 9039 LD R3,Y+
035C 9029 LD R2,Y+
035D 9518 RETI
_uart0_tx_isr:
035E 922A ST R2,-Y
035F 938A ST R24,-Y
0360 939A ST R25,-Y
0361 93EA ST R30,-Y
0362 93FA ST R31,-Y
0363 B62F IN R2,0x3F
0364 922A ST R2,-Y
(0121)
(0122) #pragma interrupt_handler uart0_tx_isr:24
(0123) void uart0_tx_isr(void)
(0124) {
(0125) //character has been transmitted
(0126) Com0_S_Pointer++;
0365 91800329 LDS R24,_Com0_S_Pointer
0367 9190032A LDS R25,_Com0_S_Pointer+1
0369 9601 ADIW R24,1
036A 9390032A STS _Com0_S_Pointer+1,R25
036C 93800329 STS _Com0_S_Pointer,R24
(0127) Com0_S_DataByte=Com0_S_DataByte-1;
036E 9180032B LDS R24,_Com0_S_DataByte
0370 5081 SUBI R24,1
0371 9380032B STS _Com0_S_DataByte,R24
(0128) if(Com0_S_DataByte>0)
0373 2422 CLR R2
0374 1628 CP R2,R24
0375 F430 BCC 0x037C
(0129) UDR0=*Com0_S_Pointer;
0376 91E00329 LDS R30,_Com0_S_Pointer
0378 91F0032A LDS R31,_Com0_S_Pointer+1
037A 8020 LDD R2,Z+0
037B B82C OUT 0x0C,R2
(0130) }
037C 9029 LD R2,Y+
037D BE2F OUT 0x3F,R2
037E 91F9 LD R31,Y+
037F 91E9 LD R30,Y+
0380 9199 LD R25,Y+
0381 9189 LD R24,Y+
0382 9029 LD R2,Y+
0383 9518 RETI
_Modbus_Function_1:
b --> R22
c --> R10
a --> R12
i --> R14
temp --> R20
Ptr_send --> R6
Ptr_receive --> R8
0384 940E1C0A CALL push_gset5
0386 0139 MOVW R6,R18
0387 0148 MOVW R8,R16
(0131) ///////////////////////////////////////////////////////////////
(0132) char Modbus_Function_1(char *Ptr_receive,char *Ptr_send)
(0133) {
(0134) unsigned char a, b,c,i;
(0135) unsigned int temp;
(0136) Ptr_send[1]=0x01;
0388 E081 LDI R24,1
0389 01F3 MOVW R30,R6
038A 8381 STD Z+1,R24
(0137) if((Ptr_receive[2]==0)&&(Ptr_receive[3]<=32))
038B 01F4 MOVW R30,R8
038C 8022 LDD R2,Z+2
038D 2022 TST R2
038E F009 BEQ 0x0390
038F C094 RJMP 0x0424
0390 E280 LDI R24,0x20
0391 01F4 MOVW R30,R8
0392 8023 LDD R2,Z+3
0393 1582 CP R24,R2
0394 F408 BCC 0x0396
0395 C08E RJMP 0x0424
(0138) {
(0139) if(Ptr_receive[3]+Ptr_receive[5]<=32)
0396 01F4 MOVW R30,R8
0397 8025 LDD R2,Z+5
0398 01F4 MOVW R30,R8
0399 8033 LDD R3,Z+3
039A 0C32 ADD R3,R2
039B 1583 CP R24,R3
039C F408 BCC 0x039E
039D C079 RJMP 0x0417
(0140) {
(0141) a=Ptr_receive[3]>>3;
039E 01F4 MOVW R30,R8
039F 80C3 LDD R12,Z+3
03A0 94C6 LSR R12
03A1 94C6 LSR R12
03A2 94C6 LSR R12
(0142) b=Ptr_receive[3]&0x07;
03A3 01F4 MOVW R30,R8
03A4 8163 LDD R22,Z+3
03A5 7067 ANDI R22,7
(0143) c=Ptr_receive[5]+b;
03A6 01F4 MOVW R30,R8
03A7 80A5 LDD R10,Z+5
03A8 0EA6 ADD R10,R22
(0144) //Com0_S_DataByte=4+(Com0_R_Data[5]>>3);
(0145) Ptr_send[2]=Ptr_receive[5]>>3;
03A9 01F4 MOVW R30,R8
03AA 8025 LDD R2,Z+5
03AB 9426 LSR R2
03AC 9426 LSR R2
03AD 9426 LSR R2
03AE 01F3 MOVW R30,R6
03AF 8222 STD Z+2,R2
(0146) if(Ptr_receive[5]&0x07)
03B0 01F4 MOVW R30,R8
03B1 8185 LDD R24,Z+5
03B2 7087 ANDI R24,7
03B3 F031 BEQ 0x03BA
(0147) Ptr_send[2]+=1;
03B4 01C3 MOVW R24,R6
03B5 9602 ADIW R24,2
03B6 01FC MOVW R30,R24
03B7 8180 LDD R24,Z+0
03B8 5F8F SUBI R24,0xFF
03B9 8380 STD Z+0,R24
(0148)
(0149) //Com0_S_DataByte=Com0_S_Data[2]+3;
(0150) if(c&0x07)
03BA 2D8A MOV R24,R10
03BB 7087 ANDI R24,7
03BC F039 BEQ 0x03C4
(0151) c=(c>>3)+1;
03BD 2D8A MOV R24,R10
03BE 9586 LSR R24
03BF 9586 LSR R24
03C0 9586 LSR R24
03C1 5F8F SUBI R24,0xFF
03C2 2EA8 MOV R10,R24
03C3 C003 RJMP 0x03C7
(0152) else
(0153) c=c>>3;
03C4 94A6 LSR R10
03C5 94A6 LSR R10
03C6 94A6 LSR R10
(0154) for(i=0;i<c;i++)
03C7 24EE CLR R14
03C8 C021 RJMP 0x03EA
(0155) {
(0156) temp=JK_IO[a];
03C9 E282 LDI R24,0x22
03CA E091 LDI R25,1
03CB 2DEC MOV R30,R12
03CC 27FF CLR R31
03CD 0FE8 ADD R30,R24
03CE 1FF9 ADC R31,R25
03CF 8140 LDD R20,Z+0
03D0 2755 CLR R21
(0157) a++;
03D1 94C3 INC R12
(0158) temp+=(JK_IO[a]<<8);
03D2 2DEC MOV R30,R12
03D3 27FF CLR R31
03D4 0FE8 ADD R30,R24
03D5 1FF9 ADC R31,R25
03D6 8020 LDD R2,Z+0
03D7 2433 CLR R3
03D8 2C32 MOV R3,R2
03D9 2422 CLR R2
03DA 0D42 ADD R20,R2
03DB 1D53 ADC R21,R3
(0159) temp>>=b;
03DC 2F26 MOV R18,R22
03DD 2733 CLR R19
03DE 018A MOVW R16,R20
03DF 940E1C56 CALL lsr16
03E1 01A8 MOVW R20,R16
(0160) Ptr_send[i+3]=temp&0xff;
03E2 2DEE MOV R30,R14
03E3 27FF CLR R31
03E4 0DE6 ADD R30,R6
03E5 1DF7 ADC R31,R7
03E6 01CA MOVW R24,R20
03E7 7090 ANDI R25,0
03E8 8383 STD Z+3,R24
03E9 94E3 INC R14
03EA 14EA CP R14,R10
03EB F2E8 BCS 0x03C9
(0161) }
(0162) Ptr_send[i+3]=temp>>8;
03EC 2DEE MOV R30,R14
03ED 27FF CLR R31
03EE 0DE6 ADD R30,R6
03EF 1DF7 ADC R31,R7
03F0 011A MOVW R2,R20
03F1 2C23 MOV R2,R3
03F2 2433 CLR R3
03F3 8223 STD Z+3,R2
(0163) Ptr_send[i+3]<<=(8-Ptr_receive[5]&0x07);
03F4 2D8E MOV R24,R14
03F5 2799 CLR R25
03F6 0D86 ADD R24,R6
03F7 1D97 ADC R25,R7
03F8 9603 ADIW R24,3
03F9 011C MOVW R2,R24
03FA 01F4 MOVW R30,R8
03FB 8045 LDD R4,Z+5
03FC E018 LDI R17,0x8
03FD 1914 SUB R17,R4
03FE 7017 ANDI R17,7
03FF 01FC MOVW R30,R24
0400 8100 LDD R16,Z+0
0401 940E1C50 CALL lsl8
0403 01F1 MOVW R30,R2
0404 8300 STD Z+0,R16
(0164) Ptr_send[i+3]>>=(8-Ptr_receive[5]&0x07);
0405 2D8E MOV R24,R14
0406 2799 CLR R25
0407 0D86 ADD R24,R6
0408 1D97 ADC R25,R7
0409 9603 ADIW R24,3
040A 011C MOVW R2,R24
040B 01F4 MOVW R30,R8
040C 8045 LDD R4,Z+5
040D E018 LDI R17,0x8
040E 1914 SUB R17,R4
040F 7017 ANDI R17,7
0410 01FC MOVW R30,R24
0411 8100 LDD R16,Z+0
0412 940E1C5D CALL lsr8
0414 01F1 MOVW R30,R2
0415 8300 STD Z+0,R16
(0165) }
0416 C018 RJMP 0x042F
(0166) else
(0167) {////show error!
(0168) Ptr_send[1]=0xFF;
0417 EF8F LDI R24,0xFF
0418 01F3 MOVW R30,R6
0419 8381 STD Z+1,R24
(0169) Ptr_send[2]=2;
041A E082 LDI R24,2
041B 01F3 MOVW R30,R6
041C 8382 STD Z+2,R24
(0170) Ptr_send[3]=0x00;
041D 2422 CLR R2
041E 01F3 MOVW R30,R6
041F 8223 STD Z+3,R2
(0171) Ptr_send[4]=0x01;
0420 E081 LDI R24,1
0421 01F3 MOVW R30,R6
0422 8384 STD Z+4,R24
(0172) }
(0173) }
0423 C00B RJMP 0x042F
(0174) else
(0175) {////show error!
(0176) Ptr_send[1]=0xFF;
0424 EF8F LDI R24,0xFF
0425 01F3 MOVW R30,R6
0426 8381 STD Z+1,R24
(0177) Ptr_send[2]=2;
0427 E082 LDI R24,2
0428 01F3 MOVW R30,R6
0429 8382 STD Z+2,R24
(0178) Ptr_send[3]=0x00;
042A 2422 CLR R2
042B 01F3 MOVW R30,R6
042C 8223 STD Z+3,R2
(0179) Ptr_send[4]=0x02;
042D 01F3 MOVW R30,R6
042E 8384 STD Z+4,R24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -