📄 macan.lst
字号:
05F6 E600 LDI R16,0x60
05F7 940E055D CALL _spi_write
(0079) tt = spi_read();
05F9 940E0566 CALL _spi_read
05FB 2F40 MOV R20,R16
(0080)
(0081) if((tt&0x0f)!= 0x0a)
05FC 2F84 MOV R24,R20
05FD 708F ANDI R24,0xF
05FE 308A CPI R24,0xA
05FF F019 BEQ 0x0603
(0082) {
(0083) RESET;
0600 940C0000 JMP 0x0
(0084) }
0602 C00B RJMP 0x060E
(0085) else
(0086) {
(0087) while(!PINB3)
(0088) ;
(0089) spi_write(RD_Dat_Reg);
0603 E508 LDI R16,0x58
0604 940E055D CALL _spi_write
(0090) tempH = spi_read();
0606 940E0566 CALL _spi_read
0608 930001F7 STS tempH,R16
(0091) tempL = spi_read();
060A 940E0566 CALL _spi_read
060C 930001F6 STS tempL,R16
(0092) }
060E 940E1331 CALL pop_gset1
0610 9508 RET
_char_int:
tt --> R20
data --> R20
datah --> R18
datal --> R16
0611 940E132E CALL push_gset1
(0093) }
(0094)
(0095) unsigned int char_int(uchar datal,uchar datah)
(0096) {
(0097) int data,tt;
(0098)
(0099) tt = datah;
0613 2F42 MOV R20,R18
0614 2755 CLR R21
(0100) data = (tt<<8);
0615 2F54 MOV R21,R20
0616 2744 CLR R20
(0101) data = data + datal;
0617 2E20 MOV R2,R16
0618 2433 CLR R3
0619 0D42 ADD R20,R2
061A 1D53 ADC R21,R3
(0102) return data;
061B 018A MOVW R16,R20
061C 940E1331 CALL pop_gset1
061E 9508 RET
_full_ref:
Ad_Fu_Data --> Y+108
ta --> R10
Fu_temp --> Y+104
temp_dd --> R12
Ad_buf --> Y+100
Ad_Fu --> Y+0
j --> R14
i --> R10
061F 940E1326 CALL push_gset5
0621 97EF SBIW R28,0x3F
0622 97E1 SBIW R28,0x31
FILE: D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\电流CAN网\full.c
(0001) #include "main.h"
(0002)
(0003) extern unsigned char tempL,tempH;
(0004) extern unsigned int Ad_Fu_Buf[11];
(0005) extern unsigned int Ad_Ze_Buf[11];
(0006) void full_ref(void) //满量程校准函数
(0007) {
(0008) unsigned char ta,i,j,temp_dd;
(0009) unsigned int Ad_Fu[50];
(0010) float Ad_Fu_Data;
(0011) long Ad_buf,Fu_temp;
(0012) Ad_buf=0;
0623 E040 LDI R20,0
0624 E050 LDI R21,0
0625 E060 LDI R22,0
0626 E070 LDI R23,0
0627 01FE MOVW R30,R28
0628 59EC SUBI R30,0x9C
0629 4FFF SBCI R31,0xFF
062A 8340 STD Z+0,R20
062B 8351 STD Z+1,R21
062C 8362 STD Z+2,R22
062D 8373 STD Z+3,R23
(0013)
(0014) spi_write(RD_Id_Reg);
062E E600 LDI R16,0x60
062F 940E055D CALL _spi_write
(0015) ta=spi_read();
0631 940E0566 CALL _spi_read
0633 2EA0 MOV R10,R16
(0016)
(0017) if((ta&0x0f)!=0x0a)
0634 2D8A MOV R24,R10
0635 708F ANDI R24,0xF
0636 308A CPI R24,0xA
0637 F019 BEQ 0x063B
(0018) RESET;
0638 940C0000 JMP 0x0
063A C033 RJMP 0x066E
(0019)
(0020) else
(0021) {
(0022)
(0023) spi_write(WR_Con_Reg);
063B E100 LDI R16,0x10
063C 940E055D CALL _spi_write
(0024) spi_write(ConHreg_u_mask);
063E E100 LDI R16,0x10
063F 940E055D CALL _spi_write
(0025) spi_write(ConLreg_ref_mask|ConLreg_buf_mask);
0641 E900 LDI R16,0x90
0642 940E055D CALL _spi_write
(0026)
(0027) spi_write(WR_Io_Reg);
0644 E208 LDI R16,0x28
0645 940E055D CALL _spi_write
(0028) spi_write(0x00);
0647 2700 CLR R16
0648 940E055D CALL _spi_write
(0029)
(0030) spi_write(WR_Mod_Reg);
064A E008 LDI R16,0x8
064B 940E055D CALL _spi_write
(0031) spi_write(ModHreg_md2_mask);
064D E800 LDI R16,0x80
064E 940E055D CALL _spi_write
(0032) spi_write(ModLreg_fs0_mask|ModLreg_fs1_mask|ModLreg_fs2_mask|ModLreg_fs3_mask);
0650 E00F LDI R16,0xF
0651 940E055D CALL _spi_write
(0033)
(0034) while(!PINB3)
(0035) ;
(0036) spi_write(WR_Mod_Reg);
0653 E008 LDI R16,0x8
0654 940E055D CALL _spi_write
(0037) spi_write(ModHreg_md2_mask|ModHreg_md0_mask);
0656 EA00 LDI R16,0xA0
0657 940E055D CALL _spi_write
(0038) spi_write(ModLreg_fs0_mask|ModLreg_fs1_mask|ModLreg_fs2_mask|ModLreg_fs3_mask);
0659 E00F LDI R16,0xF
065A 940E055D CALL _spi_write
(0039)
(0040) while(!PINB3)
(0041) ;
(0042) spi_write(WR_Con_Reg);
065C E100 LDI R16,0x10
065D 940E055D CALL _spi_write
(0043) spi_write(ConHreg_u_mask);
065F E100 LDI R16,0x10
0660 940E055D CALL _spi_write
(0044) spi_write(ConLreg_ref_mask|ConLreg_buf_mask);
0662 E900 LDI R16,0x90
0663 940E055D CALL _spi_write
(0045)
(0046) spi_write(WR_Mod_Reg);
0665 E008 LDI R16,0x8
0666 940E055D CALL _spi_write
(0047) spi_write(0x00);
0668 2700 CLR R16
0669 940E055D CALL _spi_write
(0048) spi_write(ModLreg_fs0_mask|ModLreg_fs1_mask|ModLreg_fs2_mask|ModLreg_fs3_mask);
066B E00F LDI R16,0xF
066C 940E055D CALL _spi_write
(0049) }
(0050)
(0051)
(0052) chan_change(0);
066E 2700 CLR R16
066F 940E0F83 CALL _chan_change
(0053) delay_ms(1000);
0671 EE08 LDI R16,0xE8
0672 E013 LDI R17,3
0673 940E110A CALL _delay_ms
(0054) for(j=0;j<50;j++)
0675 24EE CLR R14
0676 C022 RJMP 0x0699
(0055) {
(0056) for(i=0;i<11;i++)
0677 24AA CLR R10
0678 C012 RJMP 0x068B
(0057) {
(0058) conves_ad();
0679 940E05F4 CALL _conves_ad
(0059) Ad_Ze_Buf[i] = char_int(tempL,tempH);
067B 912001F7 LDS R18,tempH
067D 910001F6 LDS R16,tempL
067F 940E0611 CALL _char_int
0681 E082 LDI R24,2
0682 9D8A MUL R24,R10
0683 01F0 MOVW R30,R0
0684 E68A LDI R24,0x6A
0685 E092 LDI R25,2
0686 0FE8 ADD R30,R24
0687 1FF9 ADC R31,R25
0688 8311 STD Z+1,R17
0689 8300 STD Z+0,R16
068A 94A3 INC R10
068B 2D8A MOV R24,R10
068C 308B CPI R24,0xB
068D F358 BCS 0x0679
(0060) }
(0061) Ad_Fu[j] = filter(); //冒泡排序滤波
068E 940E1119 CALL _filter
0690 E082 LDI R24,2
0691 9D8E MUL R24,R14
0692 01F0 MOVW R30,R0
0693 01CE MOVW R24,R28
0694 0FE8 ADD R30,R24
0695 1FF9 ADC R31,R25
0696 8311 STD Z+1,R17
0697 8300 STD Z+0,R16
0698 94E3 INC R14
0699 2D8E MOV R24,R14
069A 3382 CPI R24,0x32
069B F2D8 BCS 0x0677
(0062) }
(0063) for(i=0;i<50;i++)
069C 24AA CLR R10
069D C01D RJMP 0x06BB
(0064) {
(0065) Ad_buf +=Ad_Fu[i];
069E E082 LDI R24,2
069F 9D8A MUL R24,R10
06A0 01F0 MOVW R30,R0
06A1 01CE MOVW R24,R28
06A2 0FE8 ADD R30,R24
06A3 1FF9 ADC R31,R25
06A4 8020 LDD R2,Z+0
06A5 8031 LDD R3,Z+1
06A6 2444 CLR R4
06A7 2455 CLR R5
06A8 01FE MOVW R30,R28
06A9 59EC SUBI R30,0x9C
06AA 4FFF SBCI R31,0xFF
06AB 8060 LDD R6,Z+0
06AC 8071 LDD R7,Z+1
06AD 8082 LDD R8,Z+2
06AE 8093 LDD R9,Z+3
06AF 0C62 ADD R6,R2
06B0 1C73 ADC R7,R3
06B1 1C84 ADC R8,R4
06B2 1C95 ADC R9,R5
06B3 01FE MOVW R30,R28
06B4 59EC SUBI R30,0x9C
06B5 4FFF SBCI R31,0xFF
06B6 8260 STD Z+0,R6
06B7 8271 STD Z+1,R7
06B8 8282 STD Z+2,R8
06B9 8293 STD Z+3,R9
06BA 94A3 INC R10
06BB 2D8A MOV R24,R10
06BC 3382 CPI R24,0x32
06BD F300 BCS 0x069E
(0066) }
(0067)
(0068) asm("nop");
06BE 0000 NOP
(0069) asm("nop");
06BF 0000 NOP
(0070) Ad_Fu_Data=Ad_buf/50.0;
06C0 01FE MOVW R30,R28
06C1 59EC SUBI R30,0x9C
06C2 4FFF SBCI R31,0xFF
06C3 8100 LDD R16,Z+0
06C4 8111 LDD R17,Z+1
06C5 8122 LDD R18,Z+2
06C6 8133 LDD R19,Z+3
06C7 940E14BF CALL long2fp
06C9 0118 MOVW R2,R16
06CA 0129 MOVW R4,R18
06CB EA02 LDI R16,0xA2
06CC E010 LDI R17,0
06CD 940E1373 CALL lpm32
06CF 933A ST R19,-Y
06D0 932A ST R18,-Y
06D1 931A ST R17,-Y
06D2 930A ST R16,-Y
06D3 0181 MOVW R16,R2
06D4 0192 MOVW R18,R4
06D5 940E1538 CALL fpdiv2
06D7 01FE MOVW R30,R28
06D8 59E4 SUBI R30,0x94
06D9 4FFF SBCI R31,0xFF
06DA 8300 STD Z+0,R16
06DB 8311 STD Z+1,R17
06DC 8322 STD Z+2,R18
06DD 8333 STD Z+3,R19
(0071) Fu_temp=Ad_Fu_Data*1000;
06DE E90E LDI R16,0x9E
06DF E010 LDI R17,0
06E0 940E1373 CALL lpm32
06E2 01CE MOVW R24,R28
06E3 5984 SUBI R24,0x94
06E4 4F9F SBCI R25,0xFF
06E5 939A ST R25,-Y
06E6 938A ST R24,-Y
06E7 940E160C CALL fpmule1
06E9 940E148D CALL fpint
06EB 01FE MOVW R30,R28
06EC 59E8 SUBI R30,0x98
06ED 4FFF SBCI R31,0xFF
06EE 8300 STD Z+0,R16
06EF 8311 STD Z+1,R17
06F0 8322 STD Z+2,R18
06F1 8333 STD Z+3,R19
(0072)
(0073) temp_dd = (Fu_temp&0xff000000)>>24; //数据按字节依次存入EEROM的04到07地址
06F2 E040 LDI R20,0
06F3 E050 LDI R21,0
06F4 E060 LDI R22,0
06F5 EF7F LDI R23,0xFF
06F6 01FE MOVW R30,R28
06F7 59E8 SUBI R30,0x98
06F8 4FFF SBCI R31,0xFF
06F9 8100 LDD R16,Z+0
06FA 8111 LDD R17,Z+1
06FB 8122 LDD R18,Z+2
06FC 8133 LDD R19,Z+3
06FD 2304 AND R16,R20
06FE 2315 AND R17,R21
06FF 2326 AND R18,R22
0700 2337 AND R19,R23
0701 E188 LDI R24,0x18
0702 E090 LDI R25,0
0703 938A ST R24,-Y
0704 940E13C8 CALL lsr32
0706 2EC0 MOV R12,R16
(0074) EEPROMwrite(0x05,temp_dd);
0707 2D2C MOV R18,R12
0708 E005 LDI R16,5
0709 E010 LDI R17,0
070A 940E13F1 CALL _EEPROMwrite
(0075)
(0076) temp_dd = (Fu_temp&0x00ff0000)>>16;
070C E040 LDI R20,0
070D E050 LDI R21,0
070E EF6F LDI R22,0xFF
070F E070 LDI R23,0
0710 01FE MOVW R30,R28
0711 59E8 SUBI R30,0x98
0712 4FFF SBCI R31,0xFF
0713 8020 LDD R2,Z+0
0714 8031 LDD R3,Z+1
0715 8042 LDD R4,Z+2
0716 8053 LDD R5,Z+3
0717 2224 AND R2,R20
0718 2235 AND R3,R21
0719 2246 AND R4,R22
071A 2257 AND R5,R23
071B 0162 MOVW R12,R4
(0077) EEPROMwrite(0x06,temp_dd);
071C 2D2C MOV R18,R12
071D E006 LDI R16,6
071E E010 LDI R17,0
071F 940E13F1 CALL _EEPROMwrite
(0078)
(0079) temp_dd = (Fu_temp&0x00ff00)>>8;
0721 E040 LDI R20,0
0722 EF5F LDI R21,0xFF
0723 E060 LDI R22,0
0724 E070 LDI R23,0
0725 01FE MOVW R30,R28
0726 59E8 SUBI R30,0x98
0727 4FFF SBCI R31,0xFF
0728 8100 LDD R16,Z+0
0729 8111 LDD R17,Z+1
072A 8122 LDD R18,Z+2
072B 8133 LDD R19,Z+3
072C 2304 AND R16,R20
072D 2315 AND R17,R21
072E 2326 AND R18,R22
072F 2337 AND R19,R23
0730 E088 LDI R24,0x8
0731 E090 LDI R25,0
0732 938A ST R24,-Y
0733 940E1260 CALL asr32
0735 2EC0 MOV R12,R16
(0080) EEPROMwrite(0x07,temp_dd);
0736 2D2C MOV R18,R12
0737 E007 LDI R16,7
0738 E010 LDI R17,0
0739 940E13F1 CALL _EEPROMwrite
(0081)
(0082) temp_dd = (Fu_temp&0x00ff);
073B EF4F LDI R20,0xFF
073C E050 LDI R21,0
073D E060 LDI R22,0
073E E070 LDI R23,0
073F 01FE MOVW R30,R28
0740 59E8 SUBI R30,0x98
0741 4FFF SBCI R31,0xFF
0742 8020 LDD R2,Z+0
0743 8031 LDD R3,Z+1
0744 8042 LDD R4,Z+2
0745 8053 LDD R5,Z+3
0746 2224 AND R2,R
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -