⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 macan.lst

📁 工业开关量检测模块的原代码,带断线检测功能
💻 LST
📖 第 1 页 / 共 5 页
字号:
    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 + -