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

📄 spi_test_slave.lis

📁 用ICC编写的程序包括SPI
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 010C 0083              std z+0,R16
 010E                   .dbline 54
 010E           ;     if (++tx_wr_index == SIZE) tx_wr_index = 0;    //调整指针  
 010E 80910400          lds R24,_tx_wr_index
 0112 8F5F              subi R24,255    ; addi 1
 0114 282E              mov R2,R24
 0116 20920400          sts _tx_wr_index,R2
 011A 8436              cpi R24,100
 011C 19F4              brne L23
 011E                   .dbline 54
 011E 2224              clr R2
 0120 20920400          sts _tx_wr_index,R2
 0124           L23:
 0124                   .dbline 55
 0124           ;     ++tx_counter;  
 0124 80910200          lds R24,_tx_counter
 0128 8F5F              subi R24,255    ; addi 1
 012A 80930200          sts _tx_counter,R24
 012E                   .dbline 56
 012E           ;   }  
 012E 01C0              xjmp L21
 0130           L20:
 0130                   .dbline 58
 0130           ;   else  
 0130           ;     SPDR = c;        //发送缓冲区中空且SPI口空闲,直接放入SPDR由SIP口发送  
 0130 0FB9              out 0xf,R16
 0132           L21:
 0132                   .dbline 59
 0132           ;   SPI_ok=0;
 0132 2224              clr R2
 0134 20920100          sts _SPI_ok,R2
 0138                   .dbline 60
 0138           ;   SEI();  
 0138 7894              sei
 013A                   .dbline -2
 013A           L16:
 013A                   .dbline 0 ; func end
 013A 0895              ret
 013C                   .dbsym r c 16 c
 013C                   .dbend
 013C                   .dbfunc e spi_init _spi_init fV
 013C           ;           temp -> R16
                        .even
 013C           _spi_init::
 013C                   .dbline -1
 013C                   .dbline 65
 013C           ; }  
 013C           ;                                       
 013C           ;                                               //从机模式
 013C           ; void spi_init(void)  
 013C           ; {  
 013C                   .dbline 68
 013C           ;   unsigned char temp;  
 013C           ;                                   //MISO=ouput and MOSI,SCK,SS = input  
 013C           ;   DDRB |=BIT(MISO);
 013C BE9A              sbi 0x17,6
 013E                   .dbline 69
 013E           ;   PORTB |=BIT(MISO);    //MISO上拉电阻有效   
 013E C69A              sbi 0x18,6
 0140                   .dbline 70
 0140           ;   SPCR = 0xC4;    //SPI允许,从机模式,MSB,允许SPI中断  极性方式01,1/4系统时钟速率  
 0140 84EC              ldi R24,196
 0142 8DB9              out 0xd,R24
 0144                   .dbline 71
 0144           ;   SPSR = 0x00;  
 0144 2224              clr R2
 0146 2EB8              out 0xe,R2
 0148                   .dbline 72
 0148           ;   temp = SPSR;  
 0148 0EB1              in R16,0xe
 014A                   .dbline 73
 014A           ;   temp = SPDR;    //清空SPI,和中断标志,使SPI空闲
 014A 0FB1              in R16,0xf
 014C                   .dbline 74
 014C           ;   SPI_ok=1;
 014C 81E0              ldi R24,1
 014E 80930100          sts _SPI_ok,R24
 0152                   .dbline 75
 0152           ;   SPI_datain=0;  
 0152 20920000          sts _SPI_datain,R2
 0156                   .dbline -2
 0156           L25:
 0156                   .dbline 0 ; func end
 0156 0895              ret
 0158                   .dbsym r temp 16 c
 0158                   .dbend
                        .area lit(rom, con, rel)
 0000           L27:
 0000 0102              .byte 1,2
 0002 0304              .byte 3,4
 0004 0506              .byte 5,6
 0006 07                .byte 7
 0007 00                .byte 0
                        .area text(rom, con, rel)
 0158                   .dbfunc e main _main fV
 0158           ;           data -> y+0
 0158           ;              i -> R20
                        .even
 0158           _main::
 0158 2897              sbiw R28,8
 015A                   .dbline -1
 015A                   .dbline 79
 015A           ; } 
 015A           ; 
 015A           ; void main(void)  
 015A           ; {  
 015A                   .dbline 80
 015A           ;   unsigned char i=0;  
 015A 4427              clr R20
 015C                   .dbline 81
 015C           ;   unsigned char data[8]={1,2,3,4,5,6,7};
 015C 80E0              ldi R24,<L27
 015E 90E0              ldi R25,>L27
 0160 FE01              movw R30,R28
 0162 08E0              ldi R16,8
 0164 10E0              ldi R17,0
 0166 FA93              st -y,R31
 0168 EA93              st -y,R30
 016A 9A93              st -y,R25
 016C 8A93              st -y,R24
 016E 0E940000          xcall asgncblk
 0172                   .dbline 82
 0172           ;   CLI();        //关中断  
 0172 F894              cli
 0174                   .dbline 83
 0174           ;   spi_init();    //初始化SPI接口  
 0174 E3DF              xcall _spi_init
 0176                   .dbline 84
 0176           ;   SEI();        //开中断  
 0176 7894              sei
 0178 19C0              xjmp L29
 017A           L28:
 017A                   .dbline 86
 017A           ;   while(1)  
 017A           ;   {  
 017A                   .dbline 87
 017A           ;        if(SPI_datain)
 017A 20900000          lds R2,_SPI_datain
 017E 2220              tst R2
 0180 A9F0              breq L31
 0182                   .dbline 88
 0182           ;        {
 0182                   .dbline 89
 0182           ;               for (i=0;i<7;i++)
 0182 4427              clr R20
 0184 0EC0              xjmp L36
 0186           L33:
 0186                   .dbline 90
 0186           ;               {
 0186                   .dbline 91
 0186           ;                 if(getSPIchar()==0xAA)
 0186 91DF              xcall _getSPIchar
 0188 0A3A              cpi R16,170
 018A 41F4              brne L37
 018C                   .dbline 92
 018C           ;                       putSPIchar(data[i]);
 018C CE01              movw R24,R28
 018E E42F              mov R30,R20
 0190 FF27              clr R31
 0192 E80F              add R30,R24
 0194 F91F              adc R31,R25
 0196 0081              ldd R16,z+0
 0198 A7DF              xcall _putSPIchar
 019A 02C0              xjmp L38
 019C           L37:
 019C                   .dbline 94
 019C           ;                 else
 019C           ;                       putSPIchar(0xee);
 019C 0EEE              ldi R16,238
 019E A4DF              xcall _putSPIchar
 01A0           L38:
 01A0                   .dbline 95
 01A0           L34:
 01A0                   .dbline 89
 01A0 4395              inc R20
 01A2           L36:
 01A2                   .dbline 89
 01A2 4730              cpi R20,7
 01A4 80F3              brlo L33
 01A6                   .dbline 96
 01A6           ;                }
 01A6           ;                SPI_datain=0;
 01A6 2224              clr R2
 01A8 20920000          sts _SPI_datain,R2
 01AC                   .dbline 97
 01AC           ;        }
 01AC           L31:
 01AC                   .dbline 99
 01AC           L29:
 01AC                   .dbline 85
 01AC E6CF              xjmp L28
 01AE           X0:
 01AE                   .dbline -2
 01AE           L26:
 01AE 2896              adiw R28,8
 01B0                   .dbline 0 ; func end
 01B0 0895              ret
 01B2                   .dbsym l data 0 A[8:8]c
 01B2                   .dbsym r i 20 c
 01B2                   .dbend
                        .area bss(ram, con, rel)
 0000           _SPI_datain::
 0000                   .blkb 1
 0001                   .dbsym e SPI_datain _SPI_datain c
 0001           _SPI_ok::
 0001                   .blkb 1
 0002                   .dbsym e SPI_ok _SPI_ok c
 0002           _tx_counter::
 0002                   .blkb 1
 0003                   .dbsym e tx_counter _tx_counter c
 0003           _tx_rd_index::
 0003                   .blkb 1
 0004                   .dbsym e tx_rd_index _tx_rd_index c
 0004           _tx_wr_index::
 0004                   .blkb 1
 0005                   .dbsym e tx_wr_index _tx_wr_index c
 0005           _rx_buffer_overflow::
 0005                   .blkb 1
 0006                   .dbsym e rx_buffer_overflow _rx_buffer_overflow c
 0006           _rx_counter::
 0006                   .blkb 1
 0007                   .dbsym e rx_counter _rx_counter c
 0007           _rx_rd_index::
 0007                   .blkb 1
 0008                   .dbsym e rx_rd_index _rx_rd_index c
 0008           _rx_wr_index::
 0008                   .blkb 1
 0009                   .dbsym e rx_wr_index _rx_wr_index c
 0009           _SPI_tx_buff::
 0009                   .blkb 100
 006D                   .dbsym e SPI_tx_buff _SPI_tx_buff A[100:100]c
 006D           _SPI_rx_buff::
 006D                   .blkb 100
 00D1                   .dbsym e SPI_rx_buff _SPI_rx_buff A[100:100]c

⌨️ 快捷键说明

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