📄 spi_test.lis
字号:
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 + -