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

📄 main.lst

📁 周立功单片机上的源程序
💻 LST
字号:
C51 COMPILER V7.09   MAIN                                                                  07/03/2006 13:45:36 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*
   2                  main.c
   3                  CAT1021 EEPROM读写实验
   4          */
   5          
   6          
   7          #include "I2C.h"
   8          #include <reg51.h>
   9          #include <string.h>
  10          #include <stdlib.h>
  11          
  12          
  13          //定义I/O端口
  14          sbit SCL = P3^4;
  15          sbit SDA = P3^5;
  16          
  17          
  18          /*
  19          函数:Delay()
  20          功能:延时0.001~65.536s
  21          参数:
  22                  t>0时,延时(t*0.001)s
  23                  t=0时,延时65.536s
  24          */
  25          void Delay(unsigned int t)
  26          {
  27   1              do
  28   1              {
  29   2                      TH0 = 0xFC;
  30   2                      TL0 = 0x66+17;
  31   2                      TR0 = 1;
  32   2                      while ( !TF0 );
  33   2                      TR0 = 0;
  34   2                      TF0 = 0;
  35   2              } while ( --t != 0 );
  36   1      }
  37          
  38          
  39          /*
  40          函数:Feed()
  41          功能:清除CAT1021内部WDT定时器(喂狗)
  42          说明:如果没有在1.6秒(典型值)内喂狗,则CAT1021会输出复位信号
  43          */
  44          void Feed()
  45          {
  46   1              unsigned char t = 10;
  47   1              I2C_SDA = 0;
  48   1              while ( --t != 0 );
  49   1              I2C_SDA = 1;
  50   1      }
  51          
  52          
  53          /*
  54          函数:UartInit()
  55          功能:串行口初始化
C51 COMPILER V7.09   MAIN                                                                  07/03/2006 13:45:36 PAGE 2   

  56          */
  57          void UartInit()
  58          {
  59   1              RXD = 1;
  60   1              TXD = 1;
  61   1              SCON = 0x50;    //串口方式1(8位Uart),允许接收
  62   1              PCON |= 0x80;   //波特率加倍
  63   1              TMOD &= 0x0F;
  64   1              TMOD |= 0x20;   //T1设置为8位自动重装定时器
  65   1              TH1 = TL1 = 0xFA;       //设置波特率为9600
  66   1              TR1 = 1;
  67   1      }
  68          
  69          
  70          /*
  71          函数:PutChar()
  72          功能:从串行口输出字符c
  73          */
  74          void PutChar(char c)
  75          {
  76   1              SBUF = c;
  77   1              while ( !TI ) Feed();
  78   1              TI = 0;
  79   1      }
  80          
  81          
  82          /*
  83          函数:PutStr()
  84          功能:从串行口输出字符串*s
  85          */
  86          void PutStr(char *s)
  87          {
  88   1              unsigned char c;
  89   1              for (;;)
  90   1              {
  91   2                      c = *s++;
  92   2                      if ( c == '\0' ) break;
  93   2                      PutChar(c);
  94   2              }
  95   1      }
  96          
  97          
  98          /*
  99          函数:GetStr()
 100          功能:从串行口接收一个字符串
 101          参数:
 102                  *s:返回输入的字符串
 103                  n:最大长度限制
 104          说明:输入的字符串以回车键结束
 105          */
 106          void GetStr(char *s, unsigned char n)
 107          {
 108   1              unsigned char c;
 109   1              for (;;)
 110   1              {
 111   2                      while ( !RI ) Feed();
 112   2                      c = SBUF;
 113   2                      RI = 0;
 114   2                      if ( c == '\n' ) break;
 115   2                      if ( c == '\0' ) break;
 116   2                      if ( (n != 0) && (c >= ' ') )
 117   2                      {
C51 COMPILER V7.09   MAIN                                                                  07/03/2006 13:45:36 PAGE 3   

 118   3                              *s++ = c;
 119   3                              n--;
 120   3                      }
 121   2              }
 122   1              *s = '\0';
 123   1      }
 124          
 125          
 126          /*
 127          函数:SysInit()
 128          功能:系统初始化
 129          */
 130          void SysInit()
 131          {
 132   1              unsigned char c;
 133   1              I2C_Init();
 134   1              TMOD &= 0xF0;
 135   1              TMOD |= 0x01;
 136   1              UartInit();
 137   1              Delay(300);             //上电后必须先延时200ms以上才能对CAT1021进行操作
 138   1              if ( I2C_Get(0xA0,0,&c) )
 139   1              {
 140   2                      PutStr("\r\nCAT1021 not found!");
 141   2                      for (;;)
 142   2                      {
 143   3                              Feed();
 144   3                              Delay(800);
 145   3                      }
 146   2              }
 147   1      }
 148          
 149          
 150          /*
 151          函数:BytetoHex()
 152          功能:字节c转换成16进制字符串
 153          */
 154          void ByteToHex(char *s, unsigned char c)
 155          {
 156   1              code unsigned char Tab[] = "0123456789ABCDEF";
 157   1              *s++ = Tab[c / 16];
 158   1              *s++ = Tab[c & 0x0F];
 159   1              *s = '\0';
 160   1      }
 161          
 162          
 163          /*
 164          函数:Read()
 165          功能:读取CAT1021内部EEPROM的数据
 166          参数:
 167                  addr:起始地址,取值0~255
 168                  len:读取的数据长度,取值1~256
 169          */
 170          void Read(unsigned char addr, unsigned char len)
 171          {
 172   1              unsigned char c;
 173   1              unsigned char s[3];
 174   1              PutStr("addr data ASCII\r\n");
 175   1              do
 176   1              {
 177   2                      ByteToHex(s,addr);
 178   2                      PutStr(s);
 179   2                      PutStr("   ");
C51 COMPILER V7.09   MAIN                                                                  07/03/2006 13:45:36 PAGE 4   

 180   2                      I2C_Get(0xA0,addr++,&c);
 181   2                      ByteToHex(s,c);
 182   2                      PutStr(s);
 183   2                      if ( (c > ' ') && ( c != 0xFF ) )
 184   2                      {
 185   3                              PutStr("   ");
 186   3                              PutChar(c);
 187   3                      }
 188   2                      PutStr("\r\n");
 189   2              } while ( --len != 0 );
 190   1      }
 191          
 192          
 193          /*
 194          函数:Write()
 195          功能:向CAT1021内部的EEPROM写入一个字符串
 196          参数:
 197                  addr:起始地址,取值0~255
 198                  *s:输入的字符串
 199          */
 200          void Write(unsigned char addr, char *s)
 201          {
 202   1              unsigned char c;
 203   1              for (;;)
 204   1              {
 205   2                      c = *s++;
 206   2                      I2C_Put(0xA0,addr++,c);
 207   2                      Delay(5);
 208   2                      if ( c == '\0' ) break;
 209   2              }
 210   1      }
 211          
 212          
 213          /*
 214          函数:Input()
 215          功能:从串行口输入一个字符串
 216          参数:
 217                  *s1:输入前显示的提示语
 218                  *s2:保存输入的字符串
 219                  len:最大长度限制
 220          */
 221          void Input(char *s1, char *s2, unsigned char len)
 222          {
 223   1              PutStr(s1);
 224   1              GetStr(s2,len);
 225   1              PutStr(s2);
 226   1              PutStr("\r\n");
 227   1      }
 228          
 229          
 230          void main()
 231          {
 232   1              unsigned char addr;
 233   1              unsigned char len;
 234   1              char s[41];
 235   1              SysInit();
 236   1              for (;;)
 237   1              {
 238   2                      PutStr("\r\n");
 239   2                      Input("cmd>",s,40);
 240   2                      if ( !strcmp(s,"read") )
 241   2                      {
C51 COMPILER V7.09   MAIN                                                                  07/03/2006 13:45:36 PAGE 5   

 242   3                              Input("address = ",s,40);
 243   3                              addr = atoi(s);
 244   3                              Input("length = ",s,40);
 245   3                              len = atoi(s);
 246   3                              Read(addr,len);
 247   3                      }
 248   2                      else if ( !strcmp(s,"write") )
 249   2                      {
 250   3                              Input("address = ",s,40);
 251   3                              addr = atoi(s);
 252   3                              Input("string = ",s,40);
 253   3                              Write(addr,s);
 254   3                      }
 255   2                      else
 256   2                      {
 257   3                              PutStr("error!");
 258   3                      }
 259   2              }
 260   1      }
 261          


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