📄 communication.lis
字号:
.module communication.c
.area data(ram, con, rel)
0000 _errorflag::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile F:\AVR\zhulast\communication.c
0001 .dbsym e errorflag _errorflag c
0001 _fl::
0001 .blkb 1
.area idata
0001 00 .byte 0
.area data(ram, con, rel)
0002 .dbfile F:\AVR\zhulast\communication.c
0002 .dbsym e fl _fl c
0002 _nnn::
0002 .blkb 1
.area idata
0002 00 .byte 0
.area data(ram, con, rel)
0003 .dbfile F:\AVR\zhulast\communication.c
0003 .dbsym e nnn _nnn c
.area text(rom, con, rel)
0000 .dbfile F:\AVR\zhulast\communication.c
0000 .dbfunc e delay_1us _delay_1us fV
.even
0000 _delay_1us::
0000 .dbline -1
0000 .dbline 25
0000 ; /*******************************************************************/
0000 ; #include "allhead.h"
0000 ;
0000 ; uchar tx_buff[12]; //存放要发向转换器的数
0000 ; uchar errorflag = 0; //485出错
0000 ; uchar fl=0; //服了(fule),自动搜索用!
0000 ; extern uchar can_cuo_flag[32]; //转换器故障 用
0000 ; //TWI 相关全局变量
0000 ; uchar i2c_rd_buff[32]; //i2c读出的数最初存放的地方
0000 ; uchar i2c_wt_buff[35]; //写
0000 ; uchar fhz; //读写完返回值0或1
0000 ; uchar autoc[5];
0000 ;
0000 ; uchar nnn=0;
0000 ; extern uchar canuse[4];
0000 ; extern uchar zhongbuff[33][10];
0000 ; extern uchar detuse[33][4];
0000 ; extern uchar det_link[33];
0000 ; extern uchar keyc;
0000 ; extern uchar jiemian;
0000 ; extern uchar denglu;
0000 ; extern uchar gal3data;
0000 ; //延时1us;晶振为8M时1us延时函数
0000 ; void delay_1us(void)
0000 ; {
0000 .dbline 26
0000 ; asm("nop");
0000 0000 nop
0002 .dbline -2
0002 L1:
0002 .dbline 0 ; func end
0002 0895 ret
0004 .dbend
0004 .dbfunc e delay_nus _delay_nus fV
0004 ; i -> R20,R21
0004 ; n -> R22,R23
.even
0004 _delay_nus::
0004 0E940000 xcall push_gset2
0008 B801 movw R22,R16
000A .dbline -1
000A .dbline 30
000A ; }
000A ; //延时n us
000A ; void delay_nus(unsigned int n)
000A ; {
000A .dbline 32
000A ; unsigned int i;
000A ; for(i=0;i<n;i++)
000A 4427 clr R20
000C 5527 clr R21
000E 03C0 xjmp L6
0010 L3:
0010 .dbline 33
0010 F7DF xcall _delay_1us
0012 L4:
0012 .dbline 32
0012 4F5F subi R20,255 ; offset = 1
0014 5F4F sbci R21,255
0016 L6:
0016 .dbline 32
0016 4617 cp R20,R22
0018 5707 cpc R21,R23
001A D0F3 brlo L3
001C .dbline -2
001C L2:
001C 0E940000 xcall pop_gset2
0020 .dbline 0 ; func end
0020 0895 ret
0022 .dbsym r i 20 i
0022 .dbsym r n 22 i
0022 .dbend
0022 .dbfunc e delay_1ms _delay_1ms fV
0022 ; i -> R16,R17
.even
0022 _delay_1ms::
0022 .dbline -1
0022 .dbline 37
0022 ; delay_1us();
0022 ; }
0022 ; //延时1ms;
0022 ; void delay_1ms(void)
0022 ; {
0022 .dbline 39
0022 ; unsigned int i;
0022 ; for(i=1;i<(unsigned int)(xtal*143-2);i++)
0022 01E0 ldi R16,1
0024 10E0 ldi R17,0
0026 02C0 xjmp L11
0028 L8:
0028 .dbline 40
0028 L9:
0028 .dbline 39
0028 0F5F subi R16,255 ; offset = 1
002A 1F4F sbci R17,255
002C L11:
002C .dbline 39
002C 0B32 cpi R16,43
002E E6E0 ldi R30,6
0030 1E07 cpc R17,R30
0032 D0F3 brlo L8
0034 .dbline -2
0034 L7:
0034 .dbline 0 ; func end
0034 0895 ret
0036 .dbsym r i 16 i
0036 .dbend
0036 .dbfunc e delay_nms _delay_nms fV
0036 ; j -> R20,R21
0036 ; n -> R22,R23
.even
0036 _delay_nms::
0036 0E940000 xcall push_gset2
003A B801 movw R22,R16
003C .dbline -1
003C .dbline 44
003C ; ;
003C ; }
003C ; //延时n ms
003C ; void delay_nms(unsigned int n)
003C ; {
003C .dbline 46
003C ; unsigned int j;
003C ; wdr();
003C 0E940000 xcall _wdr
0040 .dbline 47
0040 ; for(j=0;j<n;j++)
0040 4427 clr R20
0042 5527 clr R21
0044 03C0 xjmp L16
0046 L13:
0046 .dbline 48
0046 EDDF xcall _delay_1ms
0048 L14:
0048 .dbline 47
0048 4F5F subi R20,255 ; offset = 1
004A 5F4F sbci R21,255
004C L16:
004C .dbline 47
004C 4617 cp R20,R22
004E 5707 cpc R21,R23
0050 D0F3 brlo L13
0052 .dbline -2
0052 L12:
0052 0E940000 xcall pop_gset2
0056 .dbline 0 ; func end
0056 0895 ret
0058 .dbsym r j 20 i
0058 .dbsym r n 22 i
0058 .dbend
0058 .dbfunc e reset_MCP _reset_MCP fV
.even
0058 _reset_MCP::
0058 .dbline -1
0058 .dbline 52
0058 ; delay_1ms();
0058 ; }
0058 ; //复位MCP
0058 ; void reset_MCP(void)
0058 ; {
0058 .dbline 54
0058 ; //unsigned char
0058 ; PORTB&=~(1<<CS_CAN); // CS Low -> MCP enable
0058 C098 cbi 0x18,0
005A .dbline 55
005A ; SPDR=RESET_MCP; // send Reset command
005A 80EC ldi R24,192
005C 8FB9 out 0xf,R24
005E L18:
005E .dbline 57
005E L19:
005E .dbline 56
005E ; while(!(SPSR & (1<<SPIF)))
005E 779B sbis 0xe,7
0060 FECF rjmp L18
0062 .dbline 58
0062 ; ; // wait
0062 ; PORTB|=(1<<CS_CAN); // CS High -> MCP disable
0062 C09A sbi 0x18,0
0064 .dbline 59
0064 ; delay_1ms(); // waiting
0064 DEDF xcall _delay_1ms
0066 .dbline -2
0066 L17:
0066 .dbline 0 ; func end
0066 0895 ret
0068 .dbend
0068 .dbfunc e write_MCP _write_MCP fV
0068 ; value -> R18
0068 ; adress -> R16
.even
0068 _write_MCP::
0068 .dbline -1
0068 .dbline 63
0068 ; }
0068 ; //写函数
0068 ; void write_MCP(unsigned char adress, unsigned char value)
0068 ; {
0068 .dbline 64
0068 ; PORTB&=~(1<<CS_CAN); // CS Low -> MCP enable
0068 C098 cbi 0x18,0
006A .dbline 65
006A ; SPDR=0x02; // sende Write command
006A 82E0 ldi R24,2
006C 8FB9 out 0xf,R24
006E L22:
006E .dbline 66
006E L23:
006E .dbline 66
006E ; while(!(SPSR & (1<<SPIF))); // warten bis das Byte gesendet wurde
006E 779B sbis 0xe,7
0070 FECF rjmp L22
0072 .dbline 67
0072 ; SPDR=adress; // Addresse senden
0072 0FB9 out 0xf,R16
0074 L25:
0074 .dbline 68
0074 L26:
0074 .dbline 68
0074 ; while(!(SPSR & (1<<SPIF))); // warten bis das Byte gesendet wurde
0074 779B sbis 0xe,7
0076 FECF rjmp L25
0078 .dbline 69
0078 ; SPDR=value; // Wert senden
0078 2FB9 out 0xf,R18
007A L28:
007A .dbline 70
007A L29:
007A .dbline 70
007A ; while(!(SPSR & (1<<SPIF))); // warten bis das Byte gesendet wurde
007A 779B sbis 0xe,7
007C FECF rjmp L28
007E .dbline 71
007E ; PORTB|=(1<<CS_CAN); // CS High -> MCP disable
007E C09A sbi 0x18,0
0080 .dbline -2
0080 L21:
0080 .dbline 0 ; func end
0080 0895 ret
0082 .dbsym r value 18 c
0082 .dbsym r adress 16 c
0082 .dbend
0082 .dbfunc e read_MCP _read_MCP fc
0082 ; spidata -> R20
0082 ; adress -> R16
.even
0082 _read_MCP::
0082 0E940000 xcall push_gset1
0086 .dbline -1
0086 .dbline 75
0086 ; }
0086 ; //读函数
0086 ; unsigned char read_MCP(unsigned char adress)
0086 ; {
0086 .dbline 77
0086 ; unsigned char spidata;
0086 ; PORTB&=~(1<<CS_CAN); // CS Low -> MCP enable
0086 C098 cbi 0x18,0
0088 .dbline 78
0088 ; SPDR=0x03; // sende Read command
0088 83E0 ldi R24,3
008A 8FB9 out 0xf,R24
008C L32:
008C .dbline 79
008C L33:
008C .dbline 79
008C ; while(!(SPSR&(1<<SPIF))); // wait
008C 779B sbis 0xe,7
008E FECF rjmp L32
0090 .dbline 80
0090 ; SPDR=adress; // adress send
0090 0FB9 out 0xf,R16
0092 L35:
0092 .dbline 81
0092 L36:
0092 .dbline 81
0092 ; while(!(SPSR&(1<<SPIF))); // wait
0092 779B sbis 0xe,7
0094 FECF rjmp L35
0096 .dbline 82
0096 ; SPDR=0xAA; // 不懂
0096 8AEA ldi R24,170
0098 8FB9 out 0xf,R24
009A L38:
009A .dbline 83
009A L39:
009A .dbline 83
009A ; while(!(SPSR&(1<<SPIF))); // wait
009A 779B sbis 0xe,7
009C FECF rjmp L38
009E .dbline 84
009E ; spidata = SPDR; // Data return
009E 4FB1 in R20,0xf
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -