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

📄 macan.lst

📁 工业开关量检测模块的原代码,带断线检测功能
💻 LST
📖 第 1 页 / 共 5 页
字号:
    04DA 8373      STD	Z+3,R23
(0268)        rece_data[i-3].ID >>= 3;
    04DB E08C      LDI	R24,0xC
    04DC A00C      LDD	R0,Y+36
    04DD 9D80      MUL	R24,R0
    04DE 0110      MOVW	R2,R0
    04DF EE88      LDI	R24,0xE8
    04E0 E091      LDI	R25,1
    04E1 0E28      ADD	R2,R24
    04E2 1E39      ADC	R3,R25
    04E3 E083      LDI	R24,3
    04E4 E090      LDI	R25,0
    04E5 01F1      MOVW	R30,R2
    04E6 8100      LDD	R16,Z+0
    04E7 8111      LDD	R17,Z+1
    04E8 8122      LDD	R18,Z+2
    04E9 8133      LDD	R19,Z+3
    04EA 938A      ST	R24,-Y
    04EB 940E1260  CALL	asr32
    04ED 01F1      MOVW	R30,R2
    04EE 8300      STD	Z+0,R16
    04EF 8311      STD	Z+1,R17
    04F0 8322      STD	Z+2,R18
    04F1 8333      STD	Z+3,R19
    04F2 A00C      LDD	R0,Y+36
    04F3 9403      INC	R0
    04F4 A20C      STD	Y+36,R0
    04F5 A18C      LDD	R24,Y+36
    04F6 3086      CPI	R24,6
    04F7 F408      BCC	0x04F9
    04F8 CF1F      RJMP	0x0418
(0269) 		 }
(0270) 	 }
(0271) 	 }
(0272) 		CANSTMOB &= ~((1<<RXOK)|(1<<TXOK));
    04F9 918000EE  LDS	R24,0xEE
    04FB 798F      ANDI	R24,0x9F
    04FC 938000EE  STS	0xEE,R24
(0273) 		CANCDMOB = 0x98;                      //接收使能 
    04FE E988      LDI	R24,0x98
    04FF EEEF      LDI	R30,0xEF
    0500 E0F0      LDI	R31,0
    0501 8380      STD	Z+0,R24
(0274) 		CANGIE |= (1<<ENRX);                   //开中断 
    0502 918000DB  LDS	R24,0xDB
    0504 6280      ORI	R24,0x20
    0505 938000DB  STS	0xDB,R24
(0275) 		CANGIE |= (1<<ENTX);      
    0507 918000DB  LDS	R24,0xDB
    0509 6180      ORI	R24,0x10
    050A 938000DB  STS	0xDB,R24
(0276) 		 WDR();
    050C 95A8      WDR
    050D 96A7      ADIW	R28,0x27
    050E 940E1323  CALL	pop_gset5
    0510 9009      LD	R0,Y+
    0511 BE0F      OUT	0x3F,R0
    0512 91F9      LD	R31,Y+
    0513 91E9      LD	R30,Y+
    0514 91B9      LD	R27,Y+
    0515 91A9      LD	R26,Y+
    0516 9199      LD	R25,Y+
    0517 9189      LD	R24,Y+
    0518 9139      LD	R19,Y+
    0519 9129      LD	R18,Y+
    051A 9119      LD	R17,Y+
    051B 9109      LD	R16,Y+
    051C 9079      LD	R7,Y+
    051D 9069      LD	R6,Y+
    051E 9059      LD	R5,Y+
    051F 9049      LD	R4,Y+
    0520 9039      LD	R3,Y+
    0521 9029      LD	R2,Y+
    0522 9019      LD	R1,Y+
    0523 9009      LD	R0,Y+
    0524 9518      RETI
FILE: D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\电流CAN网\intmcu.c
(0001) #include "main.h"
(0002) 
(0003) void port_init(void)
(0004) {
(0005)  PORTA = 0x00;
_port_init:
    0525 2422      CLR	R2
    0526 B822      OUT	0x02,R2
(0006)  DDRA  = 0x00;
    0527 B821      OUT	0x01,R2
(0007)  PORTB = 0x01;
    0528 E081      LDI	R24,1
    0529 B985      OUT	0x05,R24
(0008)  DDRB  = 0xE7;
    052A EE87      LDI	R24,0xE7
    052B B984      OUT	0x04,R24
(0009)  PORTC = 0x00; //m103 output only
    052C B828      OUT	0x08,R2
(0010)  DDRC  = 0x00;
    052D B827      OUT	0x07,R2
(0011)  PORTD = 0x00;
    052E B82B      OUT	0x0B,R2
(0012)  DDRD  = 0x10;
    052F E180      LDI	R24,0x10
    0530 B98A      OUT	0x0A,R24
(0013)  PORTE = 0x1C;
    0531 E18C      LDI	R24,0x1C
    0532 B98E      OUT	0x0E,R24
(0014)  DDRE  = 0x1F;
    0533 E18F      LDI	R24,0x1F
    0534 B98D      OUT	0x0D,R24
(0015)  PORTF = 0x00;
    0535 BA21      OUT	0x11,R2
(0016)  DDRF  = 0x00;
    0536 BA20      OUT	0x10,R2
(0017)  PORTG = 0x08;
    0537 E088      LDI	R24,0x8
    0538 BB84      OUT	0x14,R24
(0018)  DDRG  = 0x08;
    0539 BB83      OUT	0x13,R24
    053A 9508      RET
(0019) }
(0020) 
(0021) void timer0_init(void)
(0022) {
(0023)  TCCR0A = 0x00; //stop
_timer0_init:
    053B 2422      CLR	R2
    053C BC24      OUT	0x24,R2
(0024)  ASSR  = 0x00; //set async mode
    053D EBE6      LDI	R30,0xB6
    053E E0F0      LDI	R31,0
    053F 8220      STD	Z+0,R2
(0025)  TCNT0 = 0x83; //set count
    0540 E883      LDI	R24,0x83
    0541 BD86      OUT	0x26,R24
(0026)  OCR0  = 0x7D;
    0542 E78D      LDI	R24,0x7D
    0543 BD87      OUT	0x27,R24
(0027)  TCCR0A = 0x05; //start timer
    0544 E085      LDI	R24,5
    0545 BD84      OUT	0x24,R24
    0546 9508      RET
(0028) }
(0029) 
(0030) void init_devices(void)
(0031) {
(0032)  port_init();
_init_devices:
    0547 DFDD      RCALL	_port_init
(0033)  timer0_init(); 
    0548 DFF2      RCALL	_timer0_init
(0034)  spi_init();
    0549 D00B      RCALL	_spi_init
(0035)  TIMSK0 = 0x01; 
    054A E081      LDI	R24,1
    054B E6EE      LDI	R30,0x6E
    054C E0F0      LDI	R31,0
    054D 8380      STD	Z+0,R24
    054E 9508      RET
(0036) }
(0037) 
(0038) void watchdog_init(void)
(0039) {
(0040)  WDR(); //this prevents a timout on enabling
_watchdog_init:
    054F 95A8      WDR
(0041)  WDTCR = 0x0e; //WATCHDOG ENABLED - dont forget to issue WDRs
    0550 E08E      LDI	R24,0xE
    0551 E6E0      LDI	R30,0x60
    0552 E0F0      LDI	R31,0
    0553 8380      STD	Z+0,R24
    0554 9508      RET
(0042) }
(0043) 
(0044) //SPI initialize
(0045) // clock rate: 1000000hz
(0046) void spi_init(void)
(0047) {
(0048)  DDRB = 0xE7;       //SS输出 MOSI 输出 MISO 输入 SCK 输出
_spi_init:
    0555 EE87      LDI	R24,0xE7
    0556 B984      OUT	0x04,R24
(0049)  PORTB |= 0x01;     //SS拉高
    0557 9A28      SBI	0x05,0
(0050)  SPCR = 0x5e; //setup SPI
    0558 E58E      LDI	R24,0x5E
    0559 BD8C      OUT	0x2C,R24
(0051)  SPSR = 0x00; //setup SPI
    055A 2422      CLR	R2
    055B BC2D      OUT	0x2D,R2
    055C 9508      RET
(0052) }
(0053) 
(0054) void spi_write(unsigned char data)      //字节写函数
(0055) {
(0056)    PORTB &= 0xF0;             //SS拉低 
_spi_write:
  data                 --> R16
    055D B185      IN	R24,0x05
    055E 7F80      ANDI	R24,0xF0
    055F B985      OUT	0x05,R24
(0057)    SPDR = data;              //写SPDR
    0560 BD0E      OUT	0x2E,R16
(0058)  
(0059)    while(!(SPSR&0X80))       //等待SPI传送结束
    0561 B42D      IN	R2,0x2D
    0562 FE27      SBRS	R2,7
    0563 CFFD      RJMP	0x0561
(0060)      ;
(0061)    PORTB|=0x01;              //SS拉高
    0564 9A28      SBI	0x05,0
    0565 9508      RET
(0062) }
(0063) 
(0064) unsigned char spi_read(void)        //SPI读函数
(0065) {
(0066)   unsigned char tt;
(0067)   
(0068)   PORTB &= 0XF0;             //SS拉低
_spi_read:
  tt                   --> R16
    0566 B185      IN	R24,0x05
    0567 7F80      ANDI	R24,0xF0
    0568 B985      OUT	0x05,R24
(0069)   
(0070)   SPDR = 0X00;               //SPDR写零
    0569 2422      CLR	R2
    056A BC2E      OUT	0x2E,R2
(0071)   
(0072)   while(!(SPSR&0X80))        //等待数据交换结束
    056B B42D      IN	R2,0x2D
    056C FE27      SBRS	R2,7
    056D CFFD      RJMP	0x056B
(0073)      ;
(0074)   tt = SPDR;                 //读取SPDR的数据
    056E B50E      IN	R16,0x2E
(0075) 
(0076)   PORTB|=0X01;              //SS拉高
    056F 9A28      SBI	0x05,0
(0077) 
(0078)   return tt;
    0570 9508      RET
_adreset:
  i                    --> R20
    0571 940E132E  CALL	push_gset1
FILE: D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\电流CAN网\ad.c
(0001) #include "main.h"
(0002) 
(0003) unsigned char tempH,tempL;
(0004) int Zero_Data,Full_Data;
(0005) 
(0006) void adreset(void)                          
(0007) {
(0008) unsigned char i;
(0009) for(i=0;i<20;i++)                       
    0573 2744      CLR	R20
    0574 C007      RJMP	0x057C
(0010) {
(0011) spi_write(Com_Reg);
    0575 2700      CLR	R16
    0576 940E055D  CALL	_spi_write
(0012) spi_write(0xff);
    0578 EF0F      LDI	R16,0xFF
    0579 940E055D  CALL	_spi_write
    057B 9543      INC	R20
    057C 3144      CPI	R20,0x14
    057D F3B8      BCS	0x0575
    057E 940E1331  CALL	pop_gset1
    0580 9508      RET
_init_ad:
  temp                 --> R20
    0581 940E132E  CALL	push_gset1
(0013) }
(0014) }
(0015) 
(0016) void init_ad(void)                     
(0017) { 
(0018)   unsigned char temp;
(0019)   
(0020)   adreset();
    0583 DFED      RCALL	_adreset
(0021)  
(0022)   spi_write(RD_Id_Reg);                 
    0584 E600      LDI	R16,0x60
    0585 940E055D  CALL	_spi_write
(0023)   temp=spi_read();
    0587 940E0566  CALL	_spi_read
    0589 2F40      MOV	R20,R16
(0024)   
(0025)   if((temp&0x0f)!=0x0a)
    058A 2F84      MOV	R24,R20
    058B 708F      ANDI	R24,0xF
    058C 308A      CPI	R24,0xA
    058D F019      BEQ	0x0591
(0026)   RESET;
    058E 940C0000  JMP	0x0
    0590 C060      RJMP	0x05F1
(0027)   else
(0028)   {
(0029)   spi_write(WR_Con_Reg);                
    0591 E100      LDI	R16,0x10
    0592 940E055D  CALL	_spi_write
(0030)   spi_write(ConHreg_u_mask|ConHreg_g1_mask);
    0594 E102      LDI	R16,0x12
    0595 940E055D  CALL	_spi_write
(0031)   spi_write(ConLreg_buf_mask|ConLreg_buf_mask);
    0597 E100      LDI	R16,0x10
    0598 940E055D  CALL	_spi_write
(0032)   
(0033)   spi_write(WR_Io_Reg);                
    059A E208      LDI	R16,0x28
    059B 940E055D  CALL	_spi_write
(0034)   spi_write(0x00);                     
    059D 2700      CLR	R16
    059E 940E055D  CALL	_spi_write
(0035)   
(0036)   spi_write(WR_Mod_Reg);                
    05A0 E008      LDI	R16,0x8
    05A1 940E055D  CALL	_spi_write
(0037)   spi_write(ModHreg_md2_mask);
    05A3 E800      LDI	R16,0x80
    05A4 940E055D  CALL	_spi_write
(0038)   spi_write(ModLreg_fs1_mask);
    05A6 E002      LDI	R16,2
    05A7 940E055D  CALL	_spi_write
(0039)   
(0040)    while(!PINB3)                        
(0041)    ;
(0042)   spi_write(RD_Off_Reg);
    05A9 E700      LDI	R16,0x70
    05AA 940E055D  CALL	_spi_write
(0043)   tempH = spi_read();                     
    05AC 940E0566  CALL	_spi_read
    05AE 930001F7  STS	tempH,R16
(0044)   tempL = spi_read();	                  
    05B0 940E0566  CALL	_spi_read
    05B2 930001F6  STS	tempL,R16
(0045)   Zero_Data = char_int(tempL,tempH);
    05B4 912001F7  LDS	R18,tempH
    05B6 D05A      RCALL	_char_int
    05B7 931001F5  STS	Zero_Data+1,R17
    05B9 930001F4  STS	Zero_Data,R16
(0046)   
(0047)   spi_write(WR_Con_Reg);                  
    05BB E100      LDI	R16,0x10
    05BC 940E055D  CALL	_spi_write
(0048)   spi_write(ConHreg_u_mask);
    05BE E100      LDI	R16,0x10
    05BF 940E055D  CALL	_spi_write
(0049)   spi_write(ConLreg_ref_mask|ConLreg_buf_mask);
    05C1 E900      LDI	R16,0x90
    05C2 940E055D  CALL	_spi_write
(0050)   
(0051)   spi_write(WR_Mod_Reg);                    
    05C4 E008      LDI	R16,0x8
    05C5 940E055D  CALL	_spi_write
(0052)   spi_write(ModHreg_md2_mask|ModHreg_md0_mask);
    05C7 EA00      LDI	R16,0xA0
    05C8 940E055D  CALL	_spi_write
(0053)   spi_write(ModLreg_fs1_mask);
    05CA E002      LDI	R16,2
    05CB 940E055D  CALL	_spi_write
(0054)   
(0055)    while(!PINB3)                       
(0056)    ;
(0057)   spi_write(RD_Ful_Reg);
    05CD E708      LDI	R16,0x78
    05CE 940E055D  CALL	_spi_write
(0058)   tempH = spi_read();                     
    05D0 940E0566  CALL	_spi_read
    05D2 930001F7  STS	tempH,R16
(0059)   tempL = spi_read();	                 
    05D4 940E0566  CALL	_spi_read
    05D6 930001F6  STS	tempL,R16
(0060)   Full_Data = char_int(tempL,tempH);
    05D8 912001F7  LDS	R18,tempH
    05DA D036      RCALL	_char_int
    05DB 931001F3  STS	Full_Data+1,R17
    05DD 930001F2  STS	Full_Data,R16
(0061)   
(0062)   spi_write(WR_Con_Reg);                
    05DF E100      LDI	R16,0x10
    05E0 940E055D  CALL	_spi_write
(0063)   spi_write(ConHreg_u_mask);
    05E2 E100      LDI	R16,0x10
    05E3 940E055D  CALL	_spi_write
(0064)   spi_write(ConLreg_ref_mask|ConLreg_buf_mask);
    05E5 E900      LDI	R16,0x90
    05E6 940E055D  CALL	_spi_write
(0065)    
(0066)   spi_write(WR_Mod_Reg);                
    05E8 E008      LDI	R16,0x8
    05E9 940E055D  CALL	_spi_write
(0067)   spi_write(0x00); 
    05EB 2700      CLR	R16
    05EC 940E055D  CALL	_spi_write
(0068)   spi_write(ModLreg_fs1_mask);
    05EE E002      LDI	R16,2
    05EF 940E055D  CALL	_spi_write
(0069)  }
    05F1 940E1331  CALL	pop_gset1
    05F3 9508      RET
_conves_ad:
  tt                   --> R20
    05F4 940E132E  CALL	push_gset1
(0070) }
(0071) 
(0072) 
(0073) 
(0074) void conves_ad(void)                      
(0075) {
(0076)  unsigned char tt;
(0077)  
(0078)   spi_write(RD_Id_Reg);                  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -