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

📄 spi_test.lis

📁 用ICC编写的程序包括SPI
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 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 8A30              cpi R24,10
 011C 19F4              brne L23
 011E                   .dbline 58
 011E 2224              clr R2
 0120 20920400          sts _tx_wr_index,R2
 0124           L23:
 0124                   .dbline 59
 0124           ;     ++tx_counter;  
 0124 80910200          lds R24,_tx_counter
 0128 8F5F              subi R24,255    ; addi 1
 012A 80930200          sts _tx_counter,R24
 012E                   .dbline 60
 012E           ;   }  
 012E 04C0              xjmp L21
 0130           L20:
 0130                   .dbline 62
 0130           ;   else  
 0130           ;     {
 0130                   .dbline 64
 0130           ;       //PORTB&=~BIT(SS);
 0130           ;       SPDR = c;        //发送缓冲区中空且SPI口空闲,直接放入SPDR由SIP口发送  
 0130 0FB9              out 0xf,R16
 0132                   .dbline 65
 0132           ;     SPI_ok=0;
 0132 2224              clr R2
 0134 20920100          sts _SPI_ok,R2
 0138                   .dbline 66
 0138           ;       }
 0138           L21:
 0138                   .dbline 67
 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 72
 013C           ; }  
 013C           ; 
 013C           ;                                        //主机模式
 013C           ; void spi_init(void)  
 013C           ; {  
 013C                   .dbline 74
 013C           ;   unsigned char temp;  
 013C           ;   DDRB |= BIT(MOSI)|BIT(SCK)|BIT(SS);    //MISO=input and MOSI,SCK,SS = output 
 013C 87B3              in R24,0x17
 013E 806B              ori R24,176
 0140 87BB              out 0x17,R24
 0142                   .dbline 75
 0142           ;   DDRB &=~BIT(MISO); 
 0142 BE98              cbi 0x17,6
 0144                   .dbline 76
 0144           ;   PORTB|= BIT(SCK)|BIT(MOSI)|BIT(SS);    //MISO上拉电阻有效   
 0144 88B3              in R24,0x18
 0146 806B              ori R24,176
 0148 88BB              out 0x18,R24
 014A                   .dbline 77
 014A           ;   SPCR = 0xD6;    //SPI允许,主机模式,MSB,允许SPI中断,极性方式01,1/4系统时钟速率  
 014A 86ED              ldi R24,214
 014C 8DB9              out 0xd,R24
 014E                   .dbline 78
 014E           ;   SPSR = 0x00;  
 014E 2224              clr R2
 0150 2EB8              out 0xe,R2
 0152                   .dbline 79
 0152           ;   temp = SPSR;  
 0152 0EB1              in R16,0xe
 0154                   .dbline 80
 0154           ;   temp = SPDR;    //清空SPI,和中断标志,使SPI空闲
 0154 0FB1              in R16,0xf
 0156                   .dbline 81
 0156           ;   SPI_ok=1;  
 0156 81E0              ldi R24,1
 0158 80930100          sts _SPI_ok,R24
 015C                   .dbline -2
 015C           L25:
 015C                   .dbline 0 ; func end
 015C 0895              ret
 015E                   .dbsym r temp 16 c
 015E                   .dbend
 015E                   .dbfunc e main _main fV
 015E           ;              j -> R20
 015E           ;           data -> y+0
 015E           ;              i -> R22
                        .even
 015E           _main::
 015E 2597              sbiw R28,5
 0160                   .dbline -1
 0160                   .dbline 85
 0160           ; }  
 0160           ; 
 0160           ; void main(void)  
 0160           ; {  
 0160                   .dbline 86
 0160           ;   unsigned char i=0,j=0;  
 0160 6627              clr R22
 0162                   .dbline 86
 0162 4427              clr R20
 0164                   .dbline 89
 0164           ;   unsigned char data[5];
 0164           ; 
 0164           ;   CLI();        //关中断  
 0164 F894              cli
 0166                   .dbline 90
 0166           ;   spi_init();    //初始化SPI接口  
 0166 EADF              xcall _spi_init
 0168                   .dbline 91
 0168           ;   SEI();        //开中断  
 0168 7894              sei
 016A                   .dbline 92
 016A           ;   PORTB&=~BIT(SS);
 016A C498              cbi 0x18,4
 016C 16C0              xjmp L28
 016E           L27:
 016E                   .dbline 94
 016E           ;   while(j<1)  
 016E           ;   {  
 016E                   .dbline 95
 016E           ;       for (i=0;i<5;i++)
 016E 6627              clr R22
 0170 11C0              xjmp L33
 0172           L30:
 0172                   .dbline 96
 0172           ;       {
 0172                   .dbline 97
 0172           ;       putSPIchar(0xaa);
 0172 0AEA              ldi R16,170
 0174 B9DF              xcall _putSPIchar
 0176           L34:
 0176                   .dbline 98
 0176           L35:
 0176                   .dbline 98
 0176 20900000          lds R2,_SPI_datain
 017A 2220              tst R2
 017C E1F3              breq L34
 017E                   .dbline 99
 017E 95DF              xcall _getSPIchar
 0180 CE01              movw R24,R28
 0182 E62F              mov R30,R22
 0184 FF27              clr R31
 0186 E80F              add R30,R24
 0188 F91F              adc R31,R25
 018A 0083              std z+0,R16
 018C                   .dbline 100
 018C 2224              clr R2
 018E 20920000          sts _SPI_datain,R2
 0192                   .dbline 101
 0192           L31:
 0192                   .dbline 95
 0192 6395              inc R22
 0194           L33:
 0194                   .dbline 95
 0194 6530              cpi R22,5
 0196 68F3              brlo L30
 0198                   .dbline 102
 0198 4395              inc R20
 019A                   .dbline 103
 019A           L28:
 019A                   .dbline 93
 019A 4130              cpi R20,1
 019C 40F3              brlo L27
 019E                   .dbline 104
 019E           ;       while(!SPI_datain);
 019E           ;         data[i]=getSPIchar();
 019E           ;         SPI_datain=0;
 019E           ;       }
 019E           ;       j++;
 019E           ;   }  
 019E           ;   PORTB|=BIT(SS);
 019E C49A              sbi 0x18,4
 01A0                   .dbline 105
 01A0           ;   Disp_Init();
 01A0 0E940000          xcall _Disp_Init
 01A4                   .dbline 106
 01A4           ;   Display(*(unsigned int*)(data+1),0);
 01A4 2227              clr R18
 01A6 3327              clr R19
 01A8 FE01              movw R30,R28
 01AA 0181              ldd R16,z+1
 01AC 1281              ldd R17,z+2
 01AE 0E940000          xcall _Display
 01B2           L38:
 01B2                   .dbline 109
 01B2           L39:
 01B2                   .dbline 109
 01B2 FFCF              xjmp L38
 01B4           X0:
 01B4                   .dbline -2
 01B4           L26:
 01B4 2596              adiw R28,5
 01B6                   .dbline 0 ; func end
 01B6 0895              ret
 01B8                   .dbsym r j 20 c
 01B8                   .dbsym l data 0 A[5:5]c
 01B8                   .dbsym r i 22 c
 01B8                   .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 10
 0013                   .dbsym e SPI_tx_buff _SPI_tx_buff A[10:10]c
 0013           _SPI_rx_buff::
 0013                   .blkb 10
 001D                   .dbsym e SPI_rx_buff _SPI_rx_buff A[10:10]c

⌨️ 快捷键说明

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