wl008.lst

来自「单片机开发资料 基于51单片机的单片机开发板 包括《实验例程」· LST 代码 · 共 361 行 · 第 1/2 页

LST
361
字号
 169          //* 返回值: 读取的字节
 170          
 171          unsigned char byte_read()
 172          {
 173   1              unsigned int addr; 
 174   1              unsigned char read_data;
 175   1              
 176   1              addr = BYTE_ADDR;               // 设置要读取的地址
 177   1              SCK = 0;                        
 178   1              CS = 0;
 179   1              if(addr & 0x100)
C51 COMPILER V7.08   WL008                                                                 11/03/2004 11:09:37 PAGE 4   

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

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

 304   2                      SCK = 1;
 305   2              }
 306   1              SI = 0;
 307   1      }
 308                  
 309          //********************************************************************************************
 310          //* 从EEPROM接收数据, 高位在前
 311          //* 传入参数: 无
 312          //* 返回值: A --- 接收到的字节
 313          
 314          unsigned char inbyt()
 315          {
 316   1              
 317   1              unsigned char i;
 318   1              unsigned char read_data;
 319   1              for(i = 0; i < 8; i++)
 320   1              {
 321   2                      SCK = 0;
 322   2                      read_data <<= 1;
 323   2                      SCK = 1;
 324   2                      read_data |= (unsigned char)SO;
 325   2              }
 326   1              return read_data;
 327   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    351    ----
   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 + =
减小字号Ctrl + -
显示快捷键?