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

📄 wl008.lst

📁 周立功的51单片机试验例程,我当年就是靠这个学会单片机的
💻 LST
📖 第 1 页 / 共 2 页
字号:
 170          //* 单一字节读取
 171          //* 传入参数: 无
 172          //* 返回值: 读取的字节
 173          
 174          unsigned char byte_read()
 175          {
 176   1              unsigned int addr; 
 177   1              unsigned char read_data;
 178   1              
 179   1              addr = BYTE_ADDR;               // 设置要读取的地址
C51 COMPILER V7.08   WL008                                                                 02/17/2004 12:04:27 PAGE 4   

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

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

 304   2                      SCK = 0;
 305   2                      SI = (bit)(write_data & 0x80); //传送一个位到SI
 306   2                      write_data <<= 1;
 307   2                      SCK = 1;
 308   2              }
 309   1              SI = 0;
 310   1      }
 311                  
 312          //********************************************************************************************
 313          //* 从EEPROM接收数据, 高位在前
 314          //* 传入参数: 无
 315          //* 返回值: A --- 接收到的字节
 316          
 317          unsigned char inbyt()
 318          {
 319   1              
 320   1              unsigned char i;
 321   1              unsigned char read_data;
 322   1              for(i = 0; i < 8; i++)
 323   1              {
 324   2                      SCK = 0;
 325   2                      read_data <<= 1;
 326   2                      SCK = 1;
 327   2                      read_data |= (unsigned char)SO;
 328   2              }
 329   1              return read_data;
 330   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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -