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

📄 spi.lis

📁 AVR单片机系统开发经典实例部分源程序
💻 LIS
字号:
                        .module spi.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\AVR\cc2420驱动程序\code\spi.c
 0000                   .dbfunc e init_spi _init_spi fV
 0000           ;           temp -> R16
                        .even
 0000           _init_spi::
 0000                   .dbline -1
 0000                   .dbline 9
 0000           ; #include"spi.h"
 0000           ; 
 0000           ; /*************************************************
 0000           ; 函数功能:初始化SPI口
 0000           ; 输入参数:无
 0000           ; 返回值:无
 0000           ; **************************************************/
 0000           ; void init_spi(void)
 0000           ; { 
 0000                   .dbline 11
 0000           ;     unsigned char temp;
 0000           ;       DDRB|=(1<<MOSI)|(1<<SCK)|(1<<CSn);//设置MOSI、SCK和SS 为输出,其他为输入 
 0000 87B3              in R24,0x17
 0002 8760              ori R24,7
 0004 87BB              out 0x17,R24
 0006                   .dbline 12
 0006           ;       DDRE|=(1<<VREGEN)|(1<<RST);
 0006 82B1              in R24,0x2
 0008 8C60              ori R24,12
 000A 82B9              out 0x2,R24
 000C                   .dbline 14
 000C           ; 
 000C           ;     SPCR = (1<<SPE)|(1<<MSTR);//|(1<<SPR0);// 使能SPI,主机模式,设置时钟速率为fck/4
 000C 80E5              ldi R24,80
 000E 8DB9              out 0xd,R24
 0010                   .dbline 15
 0010           ;       SPSR = BIT(SPI2X);     //SPI时钟加倍
 0010 81E0              ldi R24,1
 0012 8EB9              out 0xe,R24
 0014                   .dbline 17
 0014           ; 
 0014           ;     temp = SPSR; //!!! 读一次SPSR为了清除SPIF位和WCOL位
 0014 0EB1              in R16,0xe
 0016                   .dbline 19
 0016           ; 
 0016           ;     temp = SPDR; //清空SPI,和中断标志,使SPI空闲
 0016 0FB1              in R16,0xf
 0018                   .dbline -2
 0018           L1:
 0018                   .dbline 0 ; func end
 0018 0895              ret
 001A                   .dbsym r temp 16 c
 001A                   .dbend
 001A                   .dbfunc e SpiWrite _SpiWrite fc
 001A           ;           temp -> R20
 001A           ;          temp1 -> R22
 001A           ;       data_spi -> R16
                        .even
 001A           _SpiWrite::
 001A 0E940000          xcall push_gset2
 001E                   .dbline -1
 001E                   .dbline 28
 001E           ; }
 001E           ; 
 001E           ; /**************************************************
 001E           ; 函数功能:写SPI一个字节
 001E           ; 输入参数:SPI指令
 001E           ; 返回值:对应指令的结果
 001E           ; **************************************************/
 001E           ; unsigned char SpiWrite(unsigned char data_spi)
 001E           ; { 
 001E                   .dbline 30
 001E           ;   unsigned char temp,temp1;
 001E           ;   SPDR=data_spi;
 001E 0FB9              out 0xf,R16
 0020           L3:
 0020                   .dbline 31
 0020                   .dbline 31
 0020                   .dbline 31
 0020           L4:
 0020                   .dbline 31
 0020           ;   while(!(SPSR & (1<<SPIF))){;}//等待传输结束
 0020 779B              sbis 0xe,7
 0022 FECF              rjmp L3
 0024                   .dbline 32
 0024           ;   temp1=SPDR;
 0024 6FB1              in R22,0xf
 0026                   .dbline 33
 0026           ;   temp = SPSR;
 0026 4EB1              in R20,0xe
 0028                   .dbline 35
 0028           ;   
 0028           ;   return temp1;
 0028 062F              mov R16,R22
 002A                   .dbline -2
 002A           L2:
 002A 0E940000          xcall pop_gset2
 002E                   .dbline 0 ; func end
 002E 0895              ret
 0030                   .dbsym r temp 20 c
 0030                   .dbsym r temp1 22 c
 0030                   .dbsym r data_spi 16 c
 0030                   .dbend
 0030                   .dbfunc e enable_spi _enable_spi fV
                        .even
 0030           _enable_spi::
 0030                   .dbline -1
 0030                   .dbline 45
 0030           ; }
 0030           ; 
 0030           ; /*******************************************
 0030           ; *函数功能:使能SPI口
 0030           ; *输入参数:无
 0030           ; *输出参数:无
 0030           ; *返 回 值:无
 0030           ; ********************************************/
 0030           ; void enable_spi(void) 
 0030           ; {
 0030                   .dbline 46
 0030           ;   PORTB &=~(1<<CSn);     //使能SPI口
 0030 C098              cbi 0x18,0
 0032                   .dbline -2
 0032           L6:
 0032                   .dbline 0 ; func end
 0032 0895              ret
 0034                   .dbend
 0034                   .dbfunc e disable_spi _disable_spi fV
                        .even
 0034           _disable_spi::
 0034                   .dbline -1
 0034                   .dbline 56
 0034           ; }
 0034           ; 
 0034           ; /*******************************************
 0034           ; *函数功能:禁止SPI口
 0034           ; *输入参数:无
 0034           ; *输出参数:无
 0034           ; *返 回 值:无
 0034           ; ********************************************/
 0034           ; void disable_spi(void)
 0034           ; {
 0034                   .dbline 57
 0034           ;   PORTB |=(1<<CSn);      //禁止SPI口  
 0034 C09A              sbi 0x18,0
 0036                   .dbline -2
 0036           L7:
 0036                   .dbline 0 ; func end
 0036 0895              ret
 0038                   .dbend

⌨️ 快捷键说明

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