📄 macan.lst
字号:
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 + -