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

📄 spi.lis

📁 nrf905无线收发模块利用模拟spi通信的程序 经此程序可转成串口通信
💻 LIS
字号:
                        .module spi.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\PQ-1A\我的AVR\无线模拟\spi.c
 0000                   .dbfunc e delayms _delayms fV
 0000           ;              x -> R20,R21
 0000           ;              y -> R22,R23
 0000           ;              z -> R16,R17
                        .even
 0000           _delayms::
 0000 0E940000          xcall push_gset2
 0004                   .dbline -1
 0004                   .dbline 53
 0004           ; #include <iom128v.h>
 0004           ; #include <iom128.h>
 0004           ; #include <macros.h>
 0004           ; #include <BIT.h>
 0004           ; #define  uchar unsigned char
 0004           ; #define  uint  unsigned int
 0004           ; 
 0004           ; #define  CSN   _PB0
 0004           ; #define  SCK   _PB1
 0004           ; #define  MOSI  _PB2
 0004           ; #define  MISO  READ_PB3
 0004           ; 
 0004           ; /*#define BYTE_BIT0   0x01
 0004           ; #define BYTE_BIT1     0x02
 0004           ; #define BYTE_BIT2     0x04
 0004           ; #define BYTE_BIT3     0x08
 0004           ; #define BYTE_BIT4     0x10
 0004           ; #define BYTE_BIT5     0x20
 0004           ; #define BYTE_BIT6     0x40
 0004           ; #define BYTE_BIT7     0x80
 0004           ; 
 0004           ; uchar DATA_BUF;
 0004           ; #define DATA7 ((DATA_BUF&BYTE_BIT7) != 0)
 0004           ; #define DATA0   ((DATA_BUF&BYTE_BIT0) != 0)
 0004           ; 
 0004           ; /*从最高位到最低位依次是:hafc debg
 0004           ; uchar table[]=//这个译码数组0、123467已经改好了! by张强
 0004           ;               //589也已改好  lly
 0004           ; {0x7e, 0x12,  0x4f,0x5b
 0004           ; ,0x33, 0x79, 0x7d, 0x52,
 0004           ;  0x7f,0x7b};//段选编码*/
 0004           ; 
 0004           ; /*******************************************
 0004           ; 函数名称: delayus
 0004           ; 功    能: 延时指定微秒(8.31M晶振)
 0004           ; 参    数: us--延时的微秒数(大约,不是很精确,MS越大越准确)
 0004           ; 返回值  : 无
 0004           ; /*******************************************
 0004           ; void delayus(uint us)           
 0004           ; {
 0004           ;  uint i;
 0004           ;  us=us*13/10;                  //13/10是在8.31MHz晶振下,通过软件仿真反复实验得到的数值
 0004           ;  for( i=0;i<us;i++); 
 0004           ; } */
 0004           ; 
 0004           ; /*******************************************
 0004           ; 函数名称: delay()
 0004           ; 功    能: 8.31MHz晶振下延时 z ms 
 0004           ; 参    数: z
 0004           ; 返回值  : 无
 0004           ; /********************************************/
 0004           ; void delayms(uint z)
 0004           ; {
 0004                   .dbline 55
 0004           ;    uint x,y;
 0004           ;    for(x=z;x>0;x--)
 0004 A801              movw R20,R16
 0006 0AC0              xjmp L5
 0008           L2:
 0008                   .dbline 56
 0008 61EA              ldi R22,1185
 000A 74E0              ldi R23,4
 000C 02C0              xjmp L9
 000E           L6:
 000E                   .dbline 56
 000E           L7:
 000E                   .dbline 56
 000E 6150              subi R22,1
 0010 7040              sbci R23,0
 0012           L9:
 0012                   .dbline 56
 0012 6030              cpi R22,0
 0014 6707              cpc R22,R23
 0016 D9F7              brne L6
 0018           X0:
 0018           L3:
 0018                   .dbline 55
 0018 4150              subi R20,1
 001A 5040              sbci R21,0
 001C           L5:
 001C                   .dbline 55
 001C 4030              cpi R20,0
 001E 4507              cpc R20,R21
 0020 99F7              brne L2
 0022           X1:
 0022                   .dbline -2
 0022                   .dbline 57
 0022           ;     for(y=1185;y>0;y--);
 0022           ; }
 0022           L1:
 0022 0E940000          xcall pop_gset2
 0026                   .dbline 0 ; func end
 0026 0895              ret
 0028                   .dbsym r x 20 i
 0028                   .dbsym r y 22 i
 0028                   .dbsym r z 16 i
 0028                   .dbend
 0028                   .dbfunc e SpiInit _SpiInit fV
                        .even
 0028           _SpiInit::
 0028                   .dbline -1
 0028                   .dbline 60
 0028           ; 
 0028           ; void SpiInit(void)
 0028           ; {
 0028                   .dbline 61
 0028           ;     DDRA=0XFF;
 0028 8FEF              ldi R24,255
 002A 8ABB              out 0x1a,R24
 002C                   .dbline 62
 002C           ;     DDRB|=BIT(0)|BIT(1)|BIT(2);
 002C 87B3              in R24,0x17
 002E 8760              ori R24,7
 0030 87BB              out 0x17,R24
 0032                   .dbline 63
 0032           ;       DDRB&=~BIT(3);
 0032 BB98              cbi 0x17,3
 0034                   .dbline 64
 0034           ;       PORTB|=BIT(3);
 0034 C39A              sbi 0x18,3
 0036                   .dbline 65
 0036           ;       CSN=1;  // Spi  disable 
 0036 88B3              in R24,0x18
 0038 8160              ori R24,1
 003A 88BB              out 0x18,R24
 003C                   .dbline 66
 003C           ;       SCK=0;  // Spi clock line init low      
 003C 88B3              in R24,0x18
 003E 8D7F              andi R24,253
 0040 88BB              out 0x18,R24
 0042                   .dbline -2
 0042                   .dbline 67
 0042           ; }
 0042           L10:
 0042                   .dbline 0 ; func end
 0042 0895              ret
 0044                   .dbend
 0044                   .dbfunc e main _main fV
 0044           ;            num -> R20,R21
                        .even
 0044           _main::
 0044                   .dbline -1
 0044                   .dbline 113
 0044           ; /*
 0044           ; unsigned char SpiRead(void)
 0044           ; {
 0044           ;       unsigned char i;
 0044           ;       for (i=0;i<8;i++)
 0044           ;       {
 0044           ;               DATA_BUF=DATA_BUF<<1;
 0044           ;               SCK=1;
 0044           ;               //OED&=0XFD;                    //      DATA=1;         //设置为输入状态
 0044           ;               if (MISO)       //读取最高位,保存至最末尾,通过左移位完成整个字节
 0044           ;               {
 0044           ;                       DATA_BUF|=BYTE_BIT0;
 0044           ;               }
 0044           ;               else
 0044           ;               {
 0044           ;                       DATA_BUF&=~BYTE_BIT0;
 0044           ;               }
 0044           ;               //OED|=0X02;
 0044           ;               SCK=0;
 0044           ;        }
 0044           ;        return DATA_BUF;
 0044           ; }
 0044           ; 
 0044           ; void SpiWrite(unsigned char send)
 0044           ; {
 0044           ;       unsigned char i;
 0044           ;       DATA_BUF=send;
 0044           ;       for (i=0;i<8;i++)
 0044           ;       {
 0044           ;               if (DATA7)      //总是发送最高位
 0044           ;               {
 0044           ;                       MOSI=1;
 0044           ;               }
 0044           ;               else
 0044           ;               {
 0044           ;                       MOSI=0;
 0044           ;               }
 0044           ;               SCK=1;
 0044           ;               DATA_BUF=DATA_BUF<<1;
 0044           ;               SCK=0;
 0044           ;       }
 0044           ; }
 0044           ; */
 0044           ; 
 0044           ; void main()
 0044           ; {
 0044                   .dbline 115
 0044           ;    uint num;
 0044           ;    SpiInit();
 0044 F1DF              xcall _SpiInit
 0046                   .dbline 116
 0046           ;    PORTA=0X55;
 0046 85E5              ldi R24,85
 0048 8BBB              out 0x1b,R24
 004A 0CC0              xjmp L13
 004C           L12:
 004C                   .dbline 118
 004C           ;    while(1)
 004C           ;    {
 004C                   .dbline 119
 004C           ;       if(MISO==0)
 004C 86B3              in R24,0x16
 004E 8695              lsr R24
 0050 8695              lsr R24
 0052 8695              lsr R24
 0054 8170              andi R24,1
 0056 11F4              brne L15
 0058                   .dbline 120
 0058           ;         {
 0058                   .dbline 121
 0058           ;            num++;
 0058 4F5F              subi R20,255  ; offset = 1
 005A 5F4F              sbci R21,255
 005C                   .dbline 122
 005C           ;         }
 005C           L15:
 005C                   .dbline 123
 005C 4BBB              out 0x1b,R20
 005E                   .dbline 124
 005E 08EE              ldi R16,1000
 0060 13E0              ldi R17,3
 0062 CEDF              xcall _delayms
 0064                   .dbline 125
 0064           L13:
 0064                   .dbline 117
 0064 F3CF              xjmp L12
 0066           X2:
 0066                   .dbline -2
 0066                   .dbline 126
 0066           ;         PORTA=num;
 0066           ;         delayms(1000);
 0066           ;    }
 0066           ; }
 0066           L11:
 0066                   .dbline 0 ; func end
 0066 0895              ret
 0068                   .dbsym r num 20 i
 0068                   .dbend

⌨️ 快捷键说明

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