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

📄 spi.lis

📁 avr atmega168v spi的程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 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 + -