📄 spi.lis
字号:
0068 ; #define DDR_MOSI DDB3
0068 ; #define DDR_MISO DDB4
0068 ; #define DDR_SCK DDB5
0068 ; #define SPI_SS PORTB2
0068 ; //**SPI_SlaveInit()**//
0068 ; void SPI_SlaveInit(void)
0068 ; {
0068 .dbline 64
0068 ; DDRB = (1<<DDR_MISO);//设置MISO 为输出,其他为输入
0068 80E1 ldi R24,16
006A 84B9 out 0x4,R24
006C .dbline 65
006C ; SPCR = (1<<SPE)|(1<<SPIE);//enable SPI,SPI interrupt
006C 80EC ldi R24,192
006E 8CBD out 0x2c,R24
0070 .dbline -2
0070 L15:
0070 .dbline 0 ; func end
0070 0895 ret
0072 .dbend
0072 .dbfunc e SPI_SlaveTransmit _SPI_SlaveTransmit fV
0072 ; cData -> R10
.even
0072 _SPI_SlaveTransmit::
0072 AA92 st -y,R10
0074 BA92 st -y,R11
0076 A02E mov R10,R16
0078 .dbline -1
0078 .dbline 69
0078 ; }
0078 ; //**SPI_SlaveTransmit()**//
0078 ; void SPI_SlaveTransmit(unsigned char cData)
0078 ; {
0078 .dbline 70
0078 ; SPDR=cData;
0078 AEBC out 0x2e,R10
007A .dbline 71
007A ; PORTD &= ~(1<<PORTD7);//clr
007A 5F98 cbi 0xb,7
007C .dbline 72
007C ; Delayms(10);
007C 0AE0 ldi R16,10
007E 10E0 ldi R17,0
0080 C7DF xcall _Delayms
0082 .dbline 73
0082 ; PORTD |= (1<<PORTD7);//set
0082 5F9A sbi 0xb,7
0084 .dbline 74
0084 ; Delayms(10);
0084 0AE0 ldi R16,10
0086 10E0 ldi R17,0
0088 C3DF xcall _Delayms
008A .dbline -2
008A L16:
008A .dbline 0 ; func end
008A B990 ld R11,y+
008C A990 ld R10,y+
008E 0895 ret
0090 .dbsym r cData 10 c
0090 .dbend
0090 .dbfunc e SPI_SlaveReceive _SPI_SlaveReceive fc
.even
0090 _SPI_SlaveReceive::
0090 .dbline -1
0090 .dbline 78
0090 ; }
0090 ; //**SPI_SlaveReceive()**//
0090 ; unsigned char SPI_SlaveReceive(void)
0090 ; {
0090 L18:
0090 .dbline 80
0090 ; while(!(SPSR & (1<<SPIF)))//等待接收结束
0090 ; ;
0090 L19:
0090 .dbline 79
0090 2DB4 in R2,0x2d
0092 27FE sbrs R2,7
0094 FDCF rjmp L18
0096 X3:
0096 .dbline 81
0096 ; return SPDR;//返回数据
0096 0EB5 in R16,0x2e
0098 .dbline -2
0098 L17:
0098 .dbline 0 ; func end
0098 0895 ret
009A .dbend
.area vector(rom, abs)
.org 68
0044 0C944D00 jmp _SPI_ovf_isr
.area text(rom, con, rel)
009A .dbfile G:\燕洪成\gra_des\exper\spi\spi_slave\spi.c
009A .dbfunc e SPI_ovf_isr _SPI_ovf_isr fV
009A ; temp_data -> R10
.even
009A _SPI_ovf_isr::
009A 0E940000 xcall push_lset
009E AA92 st -y,R10
00A0 BA92 st -y,R11
00A2 .dbline -1
00A2 .dbline 86
00A2 ; }
00A2 ; //**********中断服务程序*********************
00A2 ; #pragma interrupt_handler SPI_ovf_isr:18
00A2 ; void SPI_ovf_isr(void)
00A2 ; {
00A2 .dbline 88
00A2 ; unsigned char temp_data;
00A2 ; temp_data=SPI_SlaveReceive();
00A2 F6DF xcall _SPI_SlaveReceive
00A4 A02E mov R10,R16
00A6 .dbline 89
00A6 ; USART_Transmit(temp_data);
00A6 D9DF xcall _USART_Transmit
00A8 .dbline -2
00A8 L21:
00A8 .dbline 0 ; func end
00A8 B990 ld R11,y+
00AA A990 ld R10,y+
00AC 0E940000 xcall pop_lset
00B0 1895 reti
00B2 .dbsym r temp_data 10 c
00B2 .dbend
00B2 .dbfunc e main _main fV
00B2 ; num -> R20,R21
.even
00B2 _main::
00B2 .dbline -1
00B2 .dbline 95
00B2 ; }
00B2 ; //*************************************************
00B2 ; //****************** SPI_over *******************
00B2 ; //*************************************************
00B2 ; void main(void)
00B2 ; {
00B2 .dbline 96
00B2 ; unsigned int num=0;
00B2 4427 clr R20
00B4 5527 clr R21
00B6 .dbline 98
00B6 ;
00B6 ; CLI();
00B6 F894 cli
00B8 .dbline 99
00B8 ; PORT_Init();
00B8 BADF xcall _PORT_Init
00BA .dbline 100
00BA ; USART_Init();
00BA BCDF xcall _USART_Init
00BC .dbline 101
00BC ; SPI_SlaveInit();
00BC D5DF xcall _SPI_SlaveInit
00BE .dbline 102
00BE ; SEI();
00BE 7894 sei
00C0 0EC0 xjmp L24
00C2 L23:
00C2 .dbline 105
00C2 ;
00C2 ; while(1)
00C2 ; {
00C2 .dbline 110
00C2 ; //PORTB &= ~(1<<PORTB0);//clr
00C2 ; //Delayms(1);
00C2 ; //PORTB |= (1<<PORTB0);//set
00C2 ; //Delayms(1);
00C2 ; SPI_SlaveTransmit(num++);
00C2 1A01 movw R2,R20
00C4 4F5F subi R20,255 ; offset = 1
00C6 5F4F sbci R21,255
00C8 022D mov R16,R2
00CA D3DF xcall _SPI_SlaveTransmit
00CC .dbline 111
00CC ; Delayms(10);
00CC 0AE0 ldi R16,10
00CE 10E0 ldi R17,0
00D0 9FDF xcall _Delayms
00D2 .dbline 112
00D2 ; if(num==0xFF)
00D2 4F3F cpi R20,255
00D4 E0E0 ldi R30,0
00D6 5E07 cpc R21,R30
00D8 11F4 brne L26
00DA X4:
00DA .dbline 113
00DA ; num=0;
00DA 4427 clr R20
00DC 5527 clr R21
00DE L26:
00DE .dbline 114
00DE ; }
00DE L24:
00DE .dbline 104
00DE F1CF xjmp L23
00E0 X5:
00E0 .dbline -2
00E0 L22:
00E0 .dbline 0 ; func end
00E0 0895 ret
00E2 .dbsym r num 20 i
00E2 .dbend
00E2 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -