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

📄 communication.lis

📁 基于PIC单片机
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .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 + -