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

📄 mcp2510.lis

📁 用iccavr工具编写的mcp2510与can连接的通讯程序。
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 006E 26B8              out 0x6,R2
 0070                   .dbline 110
 0070           ;  ADMUX = 0x00; //select adc input 0
 0070 27B8              out 0x7,R2
 0072                   .dbline 111
 0072           ;  ACSR  = 0x80;
 0072 80E8              ldi R24,128
 0074 88B9              out 0x8,R24
 0076                   .dbline 112
 0076           ;  ADCSR = 0xE2;
 0076 82EE              ldi R24,226
 0078 86B9              out 0x6,R24
 007A                   .dbline -2
 007A           L7:
 007A                   .dbline 0 ; func end
 007A 0895              ret
 007C                   .dbend
 007C                   .dbfunc e init_devices _init_devices fV
                        .even
 007C           _init_devices::
 007C                   .dbline -1
 007C                   .dbline 117
 007C           ; }
 007C           ; 
 007C           ; //call this routine to initialize all peripherals
 007C           ; void init_devices(void)
 007C           ; {
 007C                   .dbline 119
 007C           ;  //stop errant interrupts until set up
 007C           ;  CLI(); //disable all interrupts
 007C F894              cli
 007E                   .dbline 120
 007E           ;  port_init();
 007E C0DF              xcall _port_init
 0080                   .dbline 121
 0080           ;  timer0_init();
 0080 CADF              xcall _timer0_init
 0082                   .dbline 122
 0082           ;  timer1_init();
 0082 D3DF              xcall _timer1_init
 0084                   .dbline 123
 0084           ;  timer2_init();
 0084 E4DF              xcall _timer2_init
 0086                   .dbline 124
 0086           ;  spi_init();
 0086 EDDF              xcall _spi_init
 0088                   .dbline 125
 0088           ;  adc_init();
 0088 F1DF              xcall _adc_init
 008A                   .dbline 127
 008A           ; 
 008A           ;  MCUCR = 0x00;
 008A 2224              clr R2
 008C 25BE              out 0x35,R2
 008E                   .dbline 128
 008E           ;  GICR  = 0x00;
 008E 2BBE              out 0x3b,R2
 0090                   .dbline 129
 0090           ;  TIMSK = 0x02; //timer interrupt sources
 0090 82E0              ldi R24,2
 0092 89BF              out 0x39,R24
 0094                   .dbline 130
 0094           ;  SEI(); //re-enable interrupts
 0094 7894              sei
 0096                   .dbline -2
 0096           L8:
 0096                   .dbline 0 ; func end
 0096 0895              ret
 0098                   .dbend
 0098                   .dbfunc e SPIINT _SPIINT fV
                        .even
 0098           _SPIINT::
 0098                   .dbline -1
 0098                   .dbline 136
 0098           ;  //all peripherals are now initialized
 0098           ; }
 0098           ; 
 0098           ; 
 0098           ; void SPIINT()// SPI中断服务子程序 
 0098           ; {
 0098                   .dbline 137
 0098           ; SPSR=0x00;
 0098 2224              clr R2
 009A 2EB8              out 0xe,R2
 009C                   .dbline 138
 009C           ; a[i++]=SPDR; // 数据暂存a[]中 
 009C 20900400          lds R2,_i
 00A0 30900500          lds R3,_i+1
 00A4 C101              movw R24,R2
 00A6 0196              adiw R24,1
 00A8 90930500          sts _i+1,R25
 00AC 80930400          sts _i,R24
 00B0 02E0              ldi R16,2
 00B2 10E0              ldi R17,0
 00B4 9101              movw R18,R2
 00B6 0E940000          xcall empy16s
 00BA F801              movw R30,R16
 00BC 80E0              ldi R24,<_a
 00BE 90E0              ldi R25,>_a
 00C0 E80F              add R30,R24
 00C2 F91F              adc R31,R25
 00C4 2FB0              in R2,0xf
 00C6 3324              clr R3
 00C8 3182              std z+1,R3
 00CA 2082              std z+0,R2
 00CC                   .dbline 139
 00CC           ; count-=1;
 00CC 80910200          lds R24,_count
 00D0 90910300          lds R25,_count+1
 00D4 0197              sbiw R24,1
 00D6 90930300          sts _count+1,R25
 00DA 80930200          sts _count,R24
 00DE                   .dbline 140
 00DE           ; if(count>0) SPDR=a[i];// 未发送完,继续 
 00DE 2224              clr R2
 00E0 2816              cp R2,R24
 00E2 3906              cpc R3,R25
 00E4 8CF4              brge L10
 00E6                   .dbline 140
 00E6 20910400          lds R18,_i
 00EA 30910500          lds R19,_i+1
 00EE 02E0              ldi R16,2
 00F0 10E0              ldi R17,0
 00F2 0E940000          xcall empy16s
 00F6 F801              movw R30,R16
 00F8 80E0              ldi R24,<_a
 00FA 90E0              ldi R25,>_a
 00FC E80F              add R30,R24
 00FE F91F              adc R31,R25
 0100 2080              ldd R2,z+0
 0102 3180              ldd R3,z+1
 0104 2FB8              out 0xf,R2
 0106 01C0              xjmp L9
 0108           L10:
 0108                   .dbline 141
 0108           ; else PORTB|=BIT(PB4);//否则,片选信号置高电平 
 0108 C49A              sbi 0x18,4
 010A                   .dbline 142
 010A           ; return;
 010A                   .dbline -2
 010A           L9:
 010A                   .dbline 0 ; func end
 010A 0895              ret
 010C                   .dbend
 010C                   .dbfunc e SPIEXCHANGE _SPIEXCHANGE fV
 010C           ;          count -> R20,R21
                        .even
 010C           _SPIEXCHANGE::
 010C 0E940000          xcall push_gset1
 0110 A801              movw R20,R16
 0112                   .dbline -1
 0112                   .dbline 148
 0112           ; }
 0112           ; 
 0112           ; 
 0112           ; void SPIEXCHANGE(count)// 启动SPI传送 
 0112           ; int count;
 0112           ; {
 0112                   .dbline 149
 0112           ; if(count>0) { // 有数据可送? 
 0112 2224              clr R2
 0114 3324              clr R3
 0116 2416              cp R2,R20
 0118 3506              cpc R3,R21
 011A E4F4              brge L12
 011C                   .dbline 149
 011C                   .dbline 150
 011C           ; i=0,i=i++;
 011C 30920500          sts _i+1,R3
 0120 20920400          sts _i,R2
 0124 C101              movw R24,R2
 0126 0196              adiw R24,1
 0128 90930500          sts _i+1,R25
 012C 80930400          sts _i,R24
 0130 30920500          sts _i+1,R3
 0134 20920400          sts _i,R2
 0138                   .dbline 151
 0138           ; PORTB&=~BIT(PB4); // 片选位置低电平 
 0138 C498              cbi 0x18,4
 013A                   .dbline 152
 013A           ; SPDR=a[i];       // 送数 
 013A 9101              movw R18,R2
 013C 02E0              ldi R16,2
 013E 10E0              ldi R17,0
 0140 0E940000          xcall empy16s
 0144 F801              movw R30,R16
 0146 80E0              ldi R24,<_a
 0148 90E0              ldi R25,>_a
 014A E80F              add R30,R24
 014C F91F              adc R31,R25
 014E 2080              ldd R2,z+0
 0150 3180              ldd R3,z+1
 0152 2FB8              out 0xf,R2
 0154                   .dbline 153
 0154           ; }
 0154                   .dbline 155
 0154           ; else
 0154           ; ;                   // 否则,空操作,并返回 
 0154                   .dbline 156
 0154           ; return;
 0154                   .dbline -2
 0154           L12:
 0154 0E940000          xcall pop_gset1
 0158                   .dbline 0 ; func end
 0158 0895              ret
 015A                   .dbsym r count 20 I
 015A                   .dbend
 015A                   .dbfunc e WAIT_SPI _WAIT_SPI fV
                        .even
 015A           _WAIT_SPI::
 015A                   .dbline -1
 015A                   .dbline 160
 015A           ; }
 015A           ; 
 015A           ; void WAIT_SPI()// 等待SPI传送完成 
 015A           ; {
 015A           L16:
 015A                   .dbline 161
 015A           ; do{
 015A                   .dbline 162
 015A           ; ;
 015A                   .dbline 163
 015A           L17:
 015A                   .dbline 163
 015A           ; }while(count>0); // 当count!=0时,等待 to add "CLRWDT" 
 015A 2224              clr R2
 015C 3324              clr R3
 015E 40900200          lds R4,_count
 0162 50900300          lds R5,_count+1
 0166 2414              cp R2,R4
 0168 3504              cpc R3,R5
 016A BCF3              brlt L16
 016C                   .dbline 164
 016C           ; return;
 016C                   .dbline -2
 016C           L15:
 016C                   .dbline 0 ; func end
 016C 0895              ret
 016E                   .dbend
 016E                   .dbfunc e RESET2510 _RESET2510 fV
                        .even
 016E           _RESET2510::
 016E                   .dbline -1
 016E                   .dbline 168
 016E           ; }
 016E           ;  
 016E           ; void RESET2510()//对MCP2510芯片进行复位 
 016E           ; {
 016E                   .dbline 169
 016E           ; a[0]=RESET;
 016E 80EC              ldi R24,192
 0170 90E0              ldi R25,0
 0172 90930B00          sts _a+1,R25
 0176 80930A00          sts _a,R24
 017A                   .dbline 170
 017A           ; count=1;
 017A 81E0              ldi R24,1
 017C 90930300          sts _count+1,R25
 0180 80930200          sts _count,R24
 0184                   .dbline 171
 0184           ; SPIEXCHANGE(count); // 送复位指令 
 0184 8C01              movw R16,R24
 0186 C2DF              xcall _SPIEXCHANGE
 0188                   .dbline 172
 0188           ; WAIT_SPI();
 0188 E8DF              xcall _WAIT_SPI
 018A                   .dbline 173
 018A           ; return;
 018A                   .dbline -2
 018A           L19:
 018A                   .dbline 0 ; func end
 018A 0895              ret
 018C                   .dbend
 018C                   .dbfunc e RD2510 _RD2510 fV
 018C           ;              j -> R20,R21
 018C           ;              n -> R22,R23
 018C           ;         adress -> R20,R21
                        .even
 018C           _RD2510::
 018C 0E940000          xcall push_gset2
 0190 B901              movw R22,R18
 0192 A801              movw R20,R16
 0194                   .dbline -1
 0194                   .dbline 179
 0194           ; }
 0194           ; 
 0194           ; void RD2510(adress,n)//从地址

⌨️ 快捷键说明

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