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

📄 93c46.lst

📁 QH_MCU_V1.1单片机C源码. 内含实验程序 这是修改版.
💻 LST
字号:
C51 COMPILER V7.07   93C46                                                                 09/21/2007 13:14:00 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE 93C46
OBJECT MODULE PLACED IN 93c46.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 93c46.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg52.h>
   2          #include <sys.h>
   3          #include <intrins.h>
   4          
   5          const   unsigned char   LedCode[]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0xF7,0xFC,0xB9,0XDE,0xF9,
             -0xF1};
   6          const   unsigned int    LedCode1[]={0xBFBF,0x8686,0xDBDB,0xCFCF,0xE6E6,0xEDED,0xFDFD,0x8787,0xFFFF,0xEFEF,0xF7F
             -7,0xFCFC,0xB9B9,0XDEDE,0xF9F9,0xF1F1};
   7          //const unsigned char   Sel[]={0x80,0x81,0x82,0x83};
   8          
   9          
  10          
  11          
  12          //“93c46读写程序”
  13          
  14          sbit CS=P3^7;
  15          sbit SK=P3^6;
  16          sbit DI=P3^5;
  17          sbit DO=P3^4; 
  18          
  19          /*
  20          extern unsigned char ReadChar(unsigned char address);
  21          extern void WriteChar(unsigned char address,unsigned char InData);
  22          extern void ReadString(unsigned char data *RamAddress,unsigned char RomAddress,
  23          unsigned char Number);
  24          extern void WriteString(unsigned char data *RamAddress,unsigned char RomAddress,unsigned char Number);
  25          */
  26          
  27          void sel_bit0(void)
  28          {
  29   1               P2 = 0x00;
  30   1               P2 = 0x10;
  31   1               P0 = 0x0f;
  32   1         P2 = 0x00;
  33   1         P0 = 0x00;
  34   1               P2 = 0x80;
  35   1      }
  36            
  37          void sel_bit1(void)
  38          {
  39   1               P2 = 0x00;
  40   1               P2 = 0x10;
  41   1               P0 = 0x1f;
  42   1         P2 = 0x00;
  43   1         P0 = 0x00;
  44   1               P2 = 0x80;
  45   1      }
  46              
  47          
  48          void delay()
  49          {
  50   1          uchar i = 0;
  51   1      
  52   1         uchar j = 0;
  53   1        for (j=0;j<255;j++)
C51 COMPILER V7.07   93C46                                                                 09/21/2007 13:14:00 PAGE 2   

  54   1         {
  55   2          for (i=0; i<250; i++)
  56   2                ;
  57   2         }
  58   1      }
  59          
  60          void clkdelay()
  61           {
  62   1          uchar i=0;
  63   1       
  64   1              for(i=0;i<50;i++) 
  65   1                { 
  66   2                   ;
  67   2                 }
  68   1        }
  69          
  70          // Write enable must precede all programming modes.
  71          void Ewen(void)
  72          {
  73   1       unsigned char temp,InData;
  74   1       CS=0; 
  75   1       SK=0;
  76   1       CS=1;
  77   1       clkdelay();
  78   1       InData=0x98; // 10011XXXX
  79   1       for(temp=9;temp!=0;temp--) // 9
  80   1       { 
  81   2        DI=(bit)(InData&0x80);
  82   2        SK=1; 
  83   2        clkdelay();
  84   2        SK=0;
  85   2        clkdelay();
  86   2        InData<<=1;
  87   2       }
  88   1       SK=1;// by lh
  89   1       CS=0; clkdelay();
  90   1      
  91   1       
  92   1      }
  93          
  94          // Disables all programming instructions.
  95          void Ewds(void)
  96          {
  97   1       unsigned char temp,InData;
  98   1       CS=0;
  99   1       SK=0;
 100   1       CS=1;
 101   1       clkdelay();
 102   1       InData=0x80; // 10000XXXX
 103   1       for(temp=9;temp!=0;temp--) // 9
 104   1       { 
 105   2        DI=(bit)(InData&0x80);
 106   2        SK=1;
 107   2        clkdelay();
 108   2        SK=0;
 109   2        clkdelay();
 110   2        InData<<=1;
 111   2       }
 112   1       SK=1; //by lh
 113   1       CS=0; clkdelay();
 114   1      
 115   1      }
C51 COMPILER V7.07   93C46                                                                 09/21/2007 13:14:00 PAGE 3   

 116          
 117          // Reads data stored in memory, at specified address.
 118          unsigned int Read(unsigned char address) {
 119   1       unsigned char temp;
 120   1       unsigned int result=0;
 121   1       Ewen();
 122   1       SK=0; 
 123   1       DI=1; // 110 A5-A0
 124   1       CS=0; 
 125   1       CS=1;
 126   1       clkdelay();
 127   1       SK=1;
 128   1       clkdelay();
 129   1       SK=0;   // 1
 130   1       clkdelay();
 131   1       address=((address&0x3f)|0x80);  //? 
 132   1       for(temp=8;temp!=0;temp--) 
 133   1       { // 8
 134   2        DI=(bit) (address&0x80);
 135   2        SK=1;
 136   2        clkdelay();
 137   2        SK=0;
 138   2        clkdelay();
 139   2        address<<=1;
 140   2       }
 141   1      
 142   1        DO=1;
 143   1       for(temp=16;temp!=0;temp--)
 144   1       { // 16
 145   2        SK=1;
 146   2        result=(result<<1);
 147   2        result=result | ((unsigned int)(DO));  // 
 148   2        clkdelay();
 149   2        SK=0;
 150   2        clkdelay();
 151   2       }
 152   1       CS=0;
 153   1       Ewds();
 154   1       return(result);
 155   1      }
 156          
 157          // Writes memory location An - A0.
 158          void Write(unsigned char address,unsigned int InData) {
 159   1       unsigned char temp;
 160   1       Ewen();
 161   1       SK=0;
 162   1       DI=1; // 101 A5-A0
 163   1      
 164   1       CS=0;
 165   1       CS=1;
 166   1       clkdelay();
 167   1       SK=1;
 168   1       clkdelay();
 169   1       SK=0;   // 1
 170   1       clkdelay();
 171   1       address=((address&0x3f)|0x40);
 172   1       for(temp=8;temp!=0;temp--) { // 8
 173   2        DI=(bit) (address&0x80);
 174   2        SK=1;
 175   2        clkdelay();
 176   2        SK=0;
 177   2        clkdelay();
C51 COMPILER V7.07   93C46                                                                 09/21/2007 13:14:00 PAGE 4   

 178   2        address<<=1;
 179   2       }
 180   1       for(temp=16;temp!=0;temp--) { // 16
 181   2        DI=(bit)(InData&0x8000);
 182   2        SK=1;
 183   2        clkdelay();
 184   2        SK=0;
 185   2        clkdelay();
 186   2        InData<<=1;
 187   2       }
 188   1       CS=0; 
 189   1       DO=1;
 190   1       CS=1;
 191   1       SK=1;
 192   1       clkdelay();
 193   1       CS=0;
 194   1       CS=1;
 195   1       while(DO==0)
 196   1       {   // busy test
 197   2        SK=0;
 198   2        clkdelay();
 199   2        SK=1;
 200   2        clkdelay();
 201   2       }
 202   1       SK=0;
 203   1       CS=0;
 204   1       Ewds();
 205   1      }
 206          
 207          /*
 208          // Erase memory location An - A0.
 209          void Erase(unsigned char address) {
 210           unsigned char temp;
 211           Ewen();
 212           SK=0; DI=1; // 111 A5-A0
 213           CS=0; CS=1;
 214           SK=1; SK=0;   // 1
 215           address =0xc0;
 216           for(temp=8;temp!=0;temp--) { // 8
 217            DI=address&0x80;
 218            SK=1; SK=0;
 219            address<<=1;
 220           }
 221           CS=0; DO=1;
 222           CS=1; SK=1;
 223           while(DO==0) {
 224            SK=0; SK=1;
 225           }
 226           SK=0; CS=0;
 227           Ewds();
 228          }
 229          
 230          // Erases all memory locations. Valid only at VCC = 4.5V to 5.5V.
 231          void Eral(void) {
 232           unsigned char temp,InData;
 233           Ewen();
 234           CS=0;
 235           SK=0;
 236           CS=1;
 237           InData=0x90; // 10010XXXX
 238           for(temp=9;temp!=0;temp--) { // 9
 239            DI=InData&0x80;
C51 COMPILER V7.07   93C46                                                                 09/21/2007 13:14:00 PAGE 5   

 240            SK=1; SK=0;
 241            InData<<=1;
 242           }
 243           CS=0; DO=1;
 244           CS=1; SK=1;
 245           while(DO==0) {
 246            SK=0; SK=1;
 247           }
 248           SK=0; CS=0;
 249           Ewds();
 250          }
 251          
 252          // Writes all memory locations. Valid only at VCC = 4.5V to 5.5V.
 253          void Wral(unsigned int InData) {
 254           unsigned char temp,address;
 255           Ewen();
 256           CS=0;
 257           SK=0;
 258           CS=1;
 259           address=0x88; // 10001XXXX
 260           for(temp=9;temp!=0;temp--) { // 9
 261            DI=address&0x80;
 262            SK=1; SK=0;
 263            address<<=1;
 264           }
 265           for(temp=16;temp!=0;temp--) { // 16
 266            DI=InData&0x8000;
 267            SK=1; SK=0;
 268            InData<<=1;
 269           }
 270           CS=0; DO=1;
 271           CS=1; SK=1;
 272           while(DO==0) {
 273            SK=0; SK=1;
 274           }
 275           SK=0; CS=0;
 276           Ewds();
 277          }
 278          
 279          */
 280          
 281          /*unsigned char ReadChar(unsigned char address) {
 282           unsigned char temp=address>>1;
 283           if(address&0x01) return((unsigned char)(Read(temp)>>8));
 284           else return((unsigned char)(Read(temp)));
 285          }
 286          
 287          void WriteChar(unsigned char address,unsigned char InData) {
 288           unsigned char temp=address>>1;
 289           if(address&0x01) Write(temp,(unsigned int)(Read(temp)&0x00ff (InData<<8)));
 290           else Write(temp,(unsigned int)(Read(temp)&0xff00 InData));
 291          }
 292          
 293          void ReadString(unsigned char data *RamAddress,unsigned char RomAddress,unsigned char Number) {
 294           while(Number!=0) {
 295            *RamAddress=ReadChar(RomAddress);
 296            RamAddress++;
 297            RomAddress++;
 298            Number--;
 299           }
 300          }
 301          
C51 COMPILER V7.07   93C46                                                                 09/21/2007 13:14:00 PAGE 6   

 302          void WriteString(unsigned char data *RamAddress,unsigned char RomAddress,unsigned char Number) {
 303           unsigned int temp;
 304           if(Number==0) return;
 305           if(RomAddress&0x01) {
 306            WriteChar(RomAddress,*RamAddress);
 307            RamAddress++;
 308            RomAddress++;
 309            Number--;
 310           }
 311           if(Number==0) return;
 312           while(Number>>1) {
 313            temp=*RamAddress;
 314            RamAddress++;
 315            temp=temp (*RamAddress)<<8;
 316            RamAddress++;
 317            Write(RomAddress>>1,temp);
 318            RomAddress++;
 319            RomAddress++;
 320            Number--;
 321            Number--;
 322           }
 323           if(Number) WriteChar(RomAddress,*RamAddress);  */
 324          
 325          
 326          
 327          
 328          void ISRit0(void) interrupt 0
 329            {
 330   1         uchar i;
 331   1         unsigned int databuf;
 332   1      
 333   1              IE0=0;
 334   1          for(i=0; i<16; i++)
 335   1       
 336   1                   {
 337   2                         // P0=LedCode[i];
 338   2                           databuf=Read(i);
 339   2                               P0=(uchar)(databuf&0x00FF);
 340   2                               delay();
 341   2                               delay();
 342   2                         delay();
 343   2                               delay();
 344   2                       delay();
 345   2             sel_bit0();
 346   2                               P0=(uchar)(databuf>>8);
 347   2             sel_bit1();
 348   2                               delay();
 349   2                               delay();
 350   2                         delay();
 351   2                               delay();
 352   2                       delay();
 353   2                               
 354   2                        }
 355   1      
 356   1                        P2=0xFF;
 357   1      
 358   1         }
 359          
 360          
 361          void main()
 362          {
 363   1          uchar i;
C51 COMPILER V7.07   93C46                                                                 09/21/2007 13:14:00 PAGE 7   

 364   1              EA=1;
 365   1              IT0=1;
 366   1          EX0=1;
 367   1          for(i=0; i<16; i++)
 368   1       
 369   1                 {
 370   2                      Write(i,LedCode1[i]);
 371   2                       
 372   2                        //   writebyte(0,0xFF);
 373   2                              delay();
 374   2                  }
 375   1      
 376   1      
 377   1      
 378   1              while(1)
 379   1              {
 380   2                      P0 = 0xff;
 381   2          sel_bit0();
 382   2          P0 = 0xff;
 383   2          sel_bit1();
 384   2      
 385   2              }
 386   1      }
 387          
 388          
 389          
 390          


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