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

📄 spi.lis

📁 atmega128单片机上实现的nrf905无线收发程序
💻 LIS
字号:
                        .module SPI.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\接收端\SPI.c
 0000                   .dbfunc e init_spi _init_spi fV
 0000           ;           temp -> R16
                        .even
 0000           _init_spi::
 0000                   .dbline -1
 0000                   .dbline 23
 0000           ; /***************************************
 0000           ; *2008,浙江工业大学信息与控制研究所
 0000           ; *All rights reserved
 0000           ; *
 0000           ; *文件名称:SPI.c
 0000           ; *摘    要:SPI的子程序实现
 0000           ; *
 0000           ; *当前版本:1.1
 0000           ; *作    者:王微
 0000           ; *完成日期:2008.4.22
 0000           ; ****************************************/
 0000           ; #include<iom128v.h>
 0000           ; #include<macros.h>
 0000           ; #include"nrf.h"
 0000           ; #include"spi.h"
 0000           ; 
 0000           ; /*************************************************
 0000           ; 函数功能:初始化SPI口
 0000           ; 输入参数:无
 0000           ; 返回值:无
 0000           ; **************************************************/
 0000           ; void init_spi()
 0000           ; { 
 0000                   .dbline 25
 0000           ;     unsigned char temp;
 0000           ;       DDRB|=(1<<MOSI)|(1<<SCK)|(1<<TRX_CE);//设置MOSI、SCK和SS 为输出,其他为输入 
 0000 87B3              in R24,0x17
 0002 8760              ori R24,7
 0004 87BB              out 0x17,R24
 0006                   .dbline 26
 0006           ;       DDRE|=(1<<CSN)|(1<<PWR_UP)|(1<<TX_EN);//设置端口E的1,2,3引脚为输出引脚
 0006 82B1              in R24,0x2
 0008 8E60              ori R24,14
 000A 82B9              out 0x2,R24
 000C                   .dbline 28
 000C           ; 
 000C           ;     SPCR = (1<<SPE)|(1<<MSTR);//|(1<<SPR0);// 使能SPI,主机模式,设置时钟速率为fck/4
 000C 80E5              ldi R24,80
 000E 8DB9              out 0xd,R24
 0010                   .dbline 29
 0010           ;       SPSR = BIT(SPI2X);     //SPI时钟加倍
 0010 81E0              ldi R24,1
 0012 8EB9              out 0xe,R24
 0014                   .dbline 31
 0014           ; 
 0014           ;     temp = SPSR; //!!! 读一次SPSR为了清除SPIF位和WCOL位
 0014 0EB1              in R16,0xe
 0016                   .dbline 33
 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,R21
 001A           ;       data_spi -> R16
                        .even
 001A           _SpiWrite::
 001A 0E940000          xcall push_gset1
 001E                   .dbline -1
 001E                   .dbline 42
 001E           ; }
 001E           ; 
 001E           ; /**************************************************
 001E           ; 函数功能:写SPI一个字节
 001E           ; 输入参数:SPI指令
 001E           ; 返回值:对应指令的结果
 001E           ; **************************************************/
 001E           ; unsigned char SpiWrite(unsigned char data_spi)
 001E           ; { 
 001E                   .dbline 44
 001E           ;   unsigned temp;
 001E           ;   SPDR=data_spi;
 001E 0FB9              out 0xf,R16
 0020           L3:
 0020                   .dbline 45
 0020                   .dbline 45
 0020                   .dbline 45
 0020           L4:
 0020                   .dbline 45
 0020           ;   while(!(SPSR & (1<<SPIF))){;}//等待传输结束
 0020 779B              sbis 0xe,7
 0022 FECF              rjmp L3
 0024                   .dbline 46
 0024           ;   temp=SPDR;
 0024 4FB1              in R20,0xf
 0026 5527              clr R21
 0028                   .dbline 47
 0028           ;   return temp;
 0028 042F              mov R16,R20
 002A                   .dbline -2
 002A           L2:
 002A 0E940000          xcall pop_gset1
 002E                   .dbline 0 ; func end
 002E 0895              ret
 0030                   .dbsym r temp 20 i
 0030                   .dbsym r data_spi 16 c
 0030                   .dbend

⌨️ 快捷键说明

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