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

📄 text1.lst

📁 C8051F120读写SPI接口的AT45DB081,输入和输出由UART完成.内含UART和SPI的读写驱动.载发环境为KEIL
💻 LST
📖 第 1 页 / 共 2 页
字号:
 167          
 168          
 169          void SPI_interrpt() interrupt 6 //SPI中断服务程序
 170          {
 171   1        if(SPIF==1)
 172   1              {SPIF=0;spi_flag=1;}
 173   1      }
 174          /*发送一个字节*/
 175          void SendSPI(unsigned int spidat)        
 176          {
 177   1        SPIF=0;
 178   1        SPI0DAT=spidat;
 179   1        while(SPIF==0);
C51 COMPILER V8.02   TEXT1                                                                 09/08/2008 08:59:36 PAGE 4   

 180   1        SPIF=0;
 181   1      }
 182          
 183          unsigned char GetSPI(void)       
 184          {
 185   1        SPIF=0;
 186   1        SPI0DAT=0;     //产生接收脉冲
 187   1        while(SPIF==0);
 188   1        SPIF=0;
 189   1        return SPI0DAT;
 190   1      }
 191          void buffer_write(unsigned char cmd_code,unsigned int star_addr,unsigned int len)                
 192          { 
 193   1        int dat=0,i=0;
 194   1        CS1=0;                 //芯片允许操作
 195   1        SendSPI(cmd_code);     //写buf1命令84H,,buf2:87H
 196   1        SendSPI(0x00);                 //写无效页地址位
 197   1        SendSPI(star_addr>>8); //写地址BA8位
 198   1        SendSPI(star_addr);    //写地址BA7--BA0位
 199   1        for(i=0;i<len;i++)
 200   1           {
 201   2                  dat=i;       //取UART0接收到的数据
 202   2                  SendSPI(dat);                //写一个字节
 203   2               }
 204   1        CS1=1;                                 //禁止芯片操作
 205   1      }
 206          
 207          void buffer_read(unsigned char cmd_code,unsigned int star_addr,unsigned int len)                 
 208          { 
 209   1        int dat=0,i=0;
 210   1        CS1=0;                 //芯片允许操作
 211   1        SendSPI(cmd_code);     //读buf1命令54H,buf2:56H
 212   1        SendSPI(0x00);                 //写无效页地址位
 213   1        SendSPI(star_addr>>8); //写地址BA8位
 214   1        SendSPI(star_addr);    //写地址BA7--BA0位
 215   1        SendSPI(0x00);                             //写无效位
 216   1        for(i=0;i<len;i++)
 217   1           {
 218   2                 UART_BUF[i]=GetSPI(); //暂存读取数据
 219   2                 SPIF=0;
 220   2               }
 221   1        CS1=1;                                 //禁止芯片操作
 222   1      }
 223          
 224          void buffer_mem(unsigned char cmd_code,unsigned int star_addr)           
 225          { 
 226   1      //  int dat=0,i=0;
 227   1        CS1=0;                 //芯片允许操作
 228   1        SendSPI(cmd_code);     //buf1命令83H,buf2:86H
 229   1        SendSPI(star_addr>>7); //写地址PA11-PA7
 230   1        SendSPI(star_addr<<1);         //写地址PA6--PA0位
 231   1        SendSPI(0x00);                         //写无效位
 232   1        CS1=1;                                 //禁止芯片操作
 233   1      }
 234          
 235          void mem_buffer(unsigned char cmd_code,unsigned int star_addr)           
 236          { 
 237   1      //  int dat=0,i=0;
 238   1        CS1=0;                 //芯片允许操作
 239   1        SendSPI(cmd_code);     //buf1命令53H,buf2:55H
 240   1        SendSPI(star_addr>>7); //写地址PA11-PA7
 241   1        SendSPI(star_addr<<1);         //写地址PA6--PA0位
C51 COMPILER V8.02   TEXT1                                                                 09/08/2008 08:59:36 PAGE 5   

 242   1        SendSPI(0x00);                         //写无效位
 243   1        CS1=1;                                 //禁止芯片操作
 244   1      }
 245          
 246          
 247          unsigned char status_read(unsigned char cmd_code)                
 248          { 
 249   1        unsigned char dat=0;
 250   1        CS1=0;                 //芯片允许操作
 251   1        SendSPI(cmd_code);     //命令57H
 252   1        dat=GetSPI();
 253   1        CS1=1;                                 //禁止芯片操作
 254   1        return dat;
 255   1      }
 256          
 257          void main()
 258          {
 259   1          int i=0;
 260   1              unsigned int temp1=0;
 261   1      
 262   1      
 263   1      
 264   1              Init_Device();
 265   1              CS2=1;
 266   1              delay1ms(1);
 267   1              U_STR_LEN=8; //设置数组长度
 268   1              temp1=0;
 269   1              R_OK=0;//接收清0,等待接收
 270   1              T_OK=0;//发送清0
 271   1              while(1)
 272   1              {
 273   2               
 274   2               /*中断接收函数调用方法*/  //需预先设置数组长度 U_STR_LEN=8; //设置数组长度
 275   2                while(R_OK==0); //接收
 276   2                R_OK=0;                //为下一次接收做准备
 277   2               /**********************/
 278   2      
 279   2               for(i=0;i<4096;i++)              //全片读写
 280   2               {
 281   3            buffer_write(0x84,0x0000,264);//写buf1命令84H,,buf2:87H    
 282   3                
 283   3                buffer_mem(0x83,i);//buf1命令83H,buf2:86H
 284   3                
 285   3                while((status_read(0x57) & 0x80)==0);//查询忙标志位
 286   3                
 287   3                mem_buffer(0x55,i);//buf1命令53H,buf2:55H
 288   3                
 289   3                while((status_read(0x57) & 0x80)==0); //查询忙标志位
 290   3               
 291   3                buffer_read(0x56,134,8); //读buf1命令54H,buf2:56H
 292   3                }
 293   2               /*中断发送函数调用方法*/  //需预先设置数组长度 U_STR_LEN=8; //设置数组长度
 294   2              //  REN0=0;
 295   2              //  while(T_OK==0){SBUF0=UART_BUF[UART_T_COUNT];delay1ms(1);}//发送; 
 296   2              //  T_OK=0;              //为下一 次发送做准备
 297   2      
 298   2      
 299   2              temp1=0;
 300   2              while(temp1<264)          // 指定页据全发送
 301   2              {
 302   3                mem_buffer(0x55,56);//buf1命令53H,buf2:55H
 303   3                
C51 COMPILER V8.02   TEXT1                                                                 09/08/2008 08:59:36 PAGE 6   

 304   3                while((status_read(0x57) & 0x80)==0); //查询忙标志位
 305   3               
 306   3                buffer_read(0x56,temp1,8); //读buf1命令54H,buf2:56H
 307   3      
 308   3               // send_UART_string(UART_BUF,0);
 309   3                REN0=0;
 310   3                while(T_OK==0){SBUF0=UART_BUF[UART_T_COUNT];delay1ms(1);}//发送; 
 311   3                T_OK=0;                //为下一 次发送做准备
 312   3      
 313   3                temp1+=8;
 314   3              }
 315   2      
 316   2            
 317   2                
 318   2      
 319   2                /*查询方式发送数组*/
 320   2         // send_UART_string(str1,0); 
 321   2              }
 322   1      }
 323          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    715    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     89      15
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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