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

📄 4.2.4.lst

📁 51单片机开发与应用技术详解(珍藏版)PPT及源码
💻 LST
字号:
C51 COMPILER V8.08   4_2_4                                                                 06/29/2008 11:30:02 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE 4_2_4
OBJECT MODULE PLACED IN 4.2.4.OBJ
COMPILER INVOKED BY: C:\Program Files\keil\C51\BIN\C51.EXE 4.2.4.c DEBUG OBJECTEXTEND

line level    source

   1          #include <reg52.h>                                              //头文件
   2          #include <stdio.h>
   3          
   4          #define uchar unsigned char
   5          #define High 1                                                  //定义高电平
   6          #define Low 0                                                   //定义高电平
   7          #define READCode 0x0C                                   //AT93C66读指令
   8          #define WRITECode 0x0A                          //AT93C66写指令
   9          #define ERASECode 0x0E                          //AT93C66擦除指令
  10          #define EWENCodeH 0x09                          //AT93C66擦/写允许指令
  11          #define EWENCodeL 0x80
  12          
  13          sbit CS=P2^0;                                                   //CS为P2.0
  14          sbit SK=P2^3;                                                   //SK为P2.3
  15          sbit DI=P2^2;                                                   //DI为P2.2
  16          sbit DO=P2^4;                                                   //DO为P2.4
  17          
  18          void Delay(uchar n);                                            //延时
  19          void MicrowareClock(void);                              //时钟函数
  20          void MicrowareSend(uchar senddata);             //字节输入函数
  21          uchar MicrowareReceive(void);                           //字节接收函数
  22          uchar MicrowareRead(uchar addr);                        //读数据函数
  23          void MicrowareEnable(void);                             //擦写允许函数
  24          void MicrowareErase(uchar addr);                        //擦除函数
  25          void MicrowareWrite(uchar addr,uchar Wdata);    //写数据函数
  26          
  27           void main()
  28           {
  29   1       uchar Select_Menu;                                     //功能选择
  30   1       uchar rd;
  31   1       SCON=0x50;                                                     //初始化串行口模式1
  32   1      TMOD=0x20;                                                      //初始化T1为定时功能,模式2
  33   1      PCON=0x80;                                                      //设置SMOD=1
  34   1      TL1=0xF4;                                                       //波特率4800bit/s,初值
  35   1      TH1=0xF4;
  36   1      
  37   1        TR1 = 1;                                                      //启动T1
  38   1        TI = 1;                                                               //启动发送
  39   1      while(1)
  40   1      {
  41   2        printf("Microware AT93C66 Write and Read!");
  42   2        printf (" Select Control Menu Option\n");             //菜单信息
  43   2        printf (" 1. Enable AT93C66.\n");
  44   2        printf (" 2. Read AT93C66.\n");
  45   2        printf (" 3. Write AT93C66.\n");
  46   2        printf (" 4. Erase AT93C66.\n");
  47   2        printf (" 5. EXIT.\n");
  48   2        printf (" Please Input Menu Option:\n");
  49   2      
  50   2              Select_Menu = _getkey();                        //从键盘输入选择数字
  51   2              switch(Select_Menu)
  52   2      {
  53   3                      case '1':                                               //擦写使能AT93C66
  54   3                              printf ("\n You Select 1. Enable AT93C66\n");
  55   3                              MicrowareEnable();
C51 COMPILER V8.08   4_2_4                                                                 06/29/2008 11:30:02 PAGE 2   

  56   3                              printf ("\n Enable over\n");
  57   3                              break;
  58   3                      case '2':                                               //读AT93C66
  59   3                              printf ("\n You Select 2. Read AT93C66\n");
  60   3                              rd=MicrowareRead(0x12);
  61   3                              printf("AT93C66 data at 0x12=%d\n",rd);
  62   3                              break;
  63   3                      case '3':                                               //写AT93C66
  64   3                              printf("\n You Select 3. Write AT93C66\n");
  65   3                              MicrowareWrite(0x12,0x56);
  66   3                              printf ("\n Write over\n");
  67   3                              break;
  68   3                      case '4':                                               //搜索擦除AT93C66
  69   3                              printf ("\n You Select 4. Erase AT93C66\n");
  70   3                              MicrowareErase(0x12);
  71   3                              printf ("\n Erase over\n");
  72   3                              break;
  73   3                      case '5':                                               //退出程序
  74   3                              printf ("\n You Select 5. Exit\n");
  75   3                              goto Exit;                              //转向Exit标号处
  76   3                              break;
  77   3                      default: 
  78   3      printf ("\n Error: Please Select Right Menu Option\n");
  79   3                              break;
  80   3                      }; 
  81   2        }
  82   1      Exit: printf("Exit the program!");                              //退出
  83   1      }
  84          
  85          
  86          
  87          
  88          
  89          void Delay(uchar n)
  90          {
  91   1        int i;
  92   1        for(i=0;i<n;i++);                                             //空延时
  93   1      }
  94          
  95          
  96          
  97          void MicrowareClock(void)
  98          {
  99   1        SK=Low;                                                       //SK=0
 100   1        Delay(2);
 101   1        SK=High;                                                      //SK=1
 102   1        Delay(2);
 103   1      }
 104          
 105          
 106          void MicrowareSend(uchar senddata)
 107          {
 108   1        int i;
 109   1       for(i=0;i<8;i++)                                               //循环输出一个字节的数据
 110   1         {
 111   2           DI=(bit)(senddata&0x80);
 112   2           senddata<<=1;                                              //移位
 113   2           MicrowareClock();                                  //构造时钟
 114   2         }
 115   1      }
 116          
 117          
C51 COMPILER V8.08   4_2_4                                                                 06/29/2008 11:30:02 PAGE 3   

 118          
 119          uchar MicrowareReceive(void)
 120          {
 121   1       uchar receivedata=0;                                   //接收的字节数据
 122   1        int i;
 123   1       MicrowareClock();                                              //构造时钟
 124   1       for(i=0;i<8;i++)                                               //循环接收
 125   1         {
 126   2          receivedata*=2;
 127   2          if(DO)receivedata++;                                        //判断DO,接收位数据
 128   2          MicrowareClock();
 129   2          Delay(2);
 130   2         }
 131   1        return receivedata;                                   //返回数据
 132   1      }
 133          
 134          
 135          uchar MicrowareRead(uchar addr)
 136            {
 137   1          uchar ReadData;
 138   1          CS=1;                                                       //选通
 139   1          MicrowareSend(READCode);                    //READ指令
 140   1          MicrowareSend(addr);                                //指定地址
 141   1          ReadData=MicrowareReceive();                        //接收数据
 142   1          CS=0;                                                       //选通禁止
 143   1          return ReadData;                                    //返回数据
 144   1        }
 145          
 146          
 147          
 148          void MicrowareEnable(void)
 149            {
 150   1          CS=1;                                                       //选通
 151   1          MicrowareSend(EWENCodeH);                   //EWEN指令
 152   1          MicrowareSend(EWENCodeL);
 153   1          CS=0;                                                       //选通禁止
 154   1        }
 155          
 156          
 157          void MicrowareErase(uchar addr)
 158          {
 159   1      DO=1;
 160   1          CS=1;                                                       //选通
 161   1      MicrowareSend(ERASECode);                       //ERASE指令
 162   1      MicrowareSend(addr);                            //地址
 163   1          CS=0;                                                       //选通禁止
 164   1      Delay(4);
 165   1          CS=1;                                                       //选通
 166   1      while(!DO)                                                      //判断擦除完毕
 167   1      {
 168   2      }
 169   1          CS=0;                                                       //选通禁止
 170   1      }
 171          
 172          void MicrowareWrite(uchar addr,uchar Wdata)
 173            {
 174   1          MicrowareEnable();                                  //擦除/写允许
 175   1          MicrowareErase(addr);                               //擦除对应地址的数据
 176   1          CS=1;                                                       //选通
 177   1          MicrowareSend(WRITECode);                   //写指令
 178   1          MicrowareSend(addr);                                //指定地址
 179   1          MicrowareSend(Wdata);                               //写数据
C51 COMPILER V8.08   4_2_4                                                                 06/29/2008 11:30:02 PAGE 4   

 180   1          CS=0;                                                       //选通禁止
 181   1          Delay(4);
 182   1          CS=1;                                                       //选通
 183   1          Delay(4);
 184   1      while(!DO);                                             //查询DO引脚等待写完
 185   1      {
 186   2      }
 187   1          CS=0;                                                       //选通禁止
 188   1        }
 189          
 190          
 191          


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