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

📄 up51s011.lst

📁 X5045读写演示程序 先用字节写入: 写入11H到地址55H (字节写入) 读取55H
💻 LST
📖 第 1 页 / 共 2 页
字号:
 180   1              SCK = 0;                        
 181   1              CS = 1;                 
 182   1              wip_poll();                     // 检测写入进度
 183   1      }
 184                  
 185          //********************************************************************************************
 186          //* 单一字节读取
 187          //* 传入参数: 无
 188          //* 返回值: 读取的字节
 189          
 190          unsigned char byte_read()
 191          {
 192   1              unsigned int addr; 
 193   1              unsigned char read_data;
 194   1              
 195   1              addr = BYTE_ADDR;               // 设置要读取的地址
 196   1              SCK = 0;                        
 197   1              CS = 0;
 198   1              if(addr & 0x100)
 199   1              {
 200   2                      outbyt(READ_INST | 0x08);// 传送读取指令和地址最高位"1"
 201   2              }
 202   1              else
 203   1              {
 204   2                      outbyt(READ_INST);      // 传送读取指令和地址最高位"0"
 205   2              }                                 
 206   1              outbyt((unsigned char)addr);            // 传送地址低字节                       
 207   1              read_data = inbyt();            // 读取字节
 208   1              SCK = 0;                        
 209   1              CS = 1;                 
 210   1              
 211   1              return read_data;
 212   1      }
 213          
 214          //********************************************************************************************
 215          //* 页写入
 216          //* 传入参数: 无
 217          //* 返回值: 无
 218          
 219          void page_write()
 220          {
 221   1              unsigned int addr;
 222   1              addr = PAGE_ADDR;               // 设置要写入的地址
 223   1              SCK = 0;                        
 224   1              CS = 0;
 225   1              if(addr & 0x100)
 226   1              {
 227   2                      outbyt(WRITE_INST | 0x08); //传送写入指令和地址最高位"1"
 228   2              }
 229   1              else
 230   1              {
 231   2                      outbyt(WRITE_INST);     // 传送写入指令和地址最高位"0"
 232   2              }                                 
 233   1              outbyt((unsigned char)addr);            // 传送地址低字节                    
 234   1              outbyt(PAGE_DATA1);             // 传送第一个字节数据             
 235   1              outbyt(PAGE_DATA2);             // 传送第二个字节数据          
 236   1              outbyt(PAGE_DATA3);             // 传送第三个字节数据
 237   1              SCK = 0;                        
 238   1              CS = 1;                 
 239   1              wip_poll();                     // 检测写入进度
 240   1      }
 241                  
C51 COMPILER V7.08   UP51S011                                                              03/20/2005 18:17:36 PAGE 5   

 242          //********************************************************************************************
 243          //* 连续读取3个字节
 244          //* 传入参数: 无
 245          //* 返回值: 最后一次读取的字节
 246          
 247          unsigned char sequ_read()
 248          {
 249   1              unsigned int addr; 
 250   1              unsigned char read_data;
 251   1      
 252   1              addr = PAGE_ADDR;               // 设置第一个字节的地址
 253   1              SCK = 0;                        
 254   1              CS = 0;
 255   1              if(addr & 0x100)
 256   1              {
 257   2                      outbyt(READ_INST | 0x08); //传送读取指令和地址最高位"1"
 258   2              }
 259   1              else
 260   1              {
 261   2                      outbyt(READ_INST);      // 传送读取指令和地址最高位"0"
 262   2              }                                 
 263   1              outbyt((unsigned char)addr);            // 传送地址低字节                       
 264   1      
 265   1              inbyt();                        // 读取第一个字节
 266   1              inbyt();                        // 读取第二个字节
 267   1              read_data = inbyt();            // 读取第三个字节
 268   1              
 269   1              SCK = 0;                        
 270   1              CS = 1; 
 271   1              
 272   1              return read_data;               
 273   1      }
 274                  
 275          //********************************************************************************************
 276          //* 复位看门狗定时器
 277          //* 传入参数: 无
 278          //* 返回值: 无
 279          
 280          void rst_wdog()
 281          {
 282   1              CS = 0;
 283   1              _nop_();
 284   1              _nop_();        
 285   1              CS = 1;                 
 286   1      }
 287                  
 288          //********************************************************************************************
 289          //* 写入进度查询 
 290          //* 传入参数: 无
 291          //* 返回值: 无
 292          
 293          void wip_poll()
 294          {
 295   1              unsigned char i;                // 设置最大的查询次数
 296   1              
 297   1              //// 如果WIP位为'1'并且未达到最大查询次数, 则继续查询
 298   1              //// 如果WIP位为'0', 则写入周期完成, 返回
 299   1              for(i = 0; i < MAX_POLL; i++)
 300   1              {
 301   2                      if(rdsr_cmd() & 0x01)           // 读取状态寄存器
 302   2                      {
 303   3                              continue;
C51 COMPILER V7.08   UP51S011                                                              03/20/2005 18:17:36 PAGE 6   

 304   3                      }
 305   2                      return;
 306   2              }
 307   1      }
 308          
 309          
 310          //********************************************************************************************
 311          //* 传送字节数据到EEPROM, 高位在前
 312          //* 传入参数: write_data --- 要传送的字节
 313          //* 返回值: 无
 314          
 315          void outbyt(unsigned char write_data)
 316          {
 317   1              unsigned char i;
 318   1              for(i = 0; i < 8; i++)
 319   1              {
 320   2                      SCK = 0;
 321   2                      SI = (bit)(write_data & 0x80); //传送一个位到SI
 322   2                      write_data <<= 1;
 323   2                      SCK = 1;
 324   2              }
 325   1              SI = 0;
 326   1      }
 327                  
 328          //********************************************************************************************
 329          //* 从EEPROM接收数据, 高位在前
 330          //* 传入参数: 无
 331          //* 返回值: A --- 接收到的字节
 332          
 333          unsigned char inbyt()
 334          {
 335   1              
 336   1              unsigned char i;
 337   1              unsigned char read_data;
 338   1              for(i = 0; i < 8; i++)
 339   1              {
 340   2                      SCK = 0;
 341   2                      read_data <<= 1;
 342   2                      SCK = 1;
 343   2                      read_data |= (unsigned char)SO;
 344   2              }
 345   1              return read_data;
 346   1      }//********************************************************************************************
 347          void delay()
 348          {
 349   1        unsigned int i,j;
 350   1        for(i=0;i<200;i++)
 351   1          for(j=0;j<1000;j++)
 352   1                ;
 353   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    410    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       9
   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 + -