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

📄 sram_cpld1.lst

📁 单片机与cpld总线方式通信
💻 LST
字号:
C51 COMPILER V7.06   SRAM_CPLD1                                                            08/20/2005 13:41:49 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE SRAM_CPLD1
OBJECT MODULE PLACED IN Sram_cpld1.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Sram_cpld1.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*mcu向通过fpga控制ram,写入时候,给地址a0ff分两次先后送如1和0,fpga向ram写入一定数据
   2          单片机从读数据时候,先向a0fe送入ram读取首地址,接着可以从此口读出数据 
   3          //*7218在硬件译码的时候,低四位数据进行译码,最高位控制小数点,其余三位无效*/
   4          // distab保存要显示的8位数据(每一位为一个字节)
   5          // ledtab为7218软件译码字型表 /dp,a,b,c,e,g,f,d
   6          #include<AT89X51.h>
   7          //#include<intrins.h>
   8          #include<absacc.h>
   9          #define DisCmd XBYTE [0xC100]                     //7218控制字地址
  10          #define DisData XBYTE [0xC000]                    //7218数据口地址
  11          #define LedMode P1_5
  12          #define scode 0xb0                                //7218软件译码方式命令字
  13          #define bcode 0x90                                //B码译码方式命令字
  14          #define hexcode 0xd0                              //软件译码方式命令字
  15          #define unchar  unsigned char 
  16          //sbit P3_0=P3^0;
  17          //sbit P1_0=P1^0;
  18          bit  enter=0;
  19          unchar keynum;                                       //按键号 
  20          unchar ledcursor=7;                                  //保存光标当前位置
  21          unchar distab[8]={0x12,0x13,0x14,0x00,0x12,0x12,0x0e,0x11} ; // 要显示的内容 hello-pp
  22          unchar temp[8];
  23          unchar code ledtab[]={ 0xfb,0xb0,0xed,0xf5,0xb6,0xd7,0xdf,0xf0,
  24                               //0,  1,   2,   3,   4,   5,   6,  7 
  25                               0xff,0xf7,0xfe,0x9f,0xcb,0xbd,0xcf,0xce,
  26                               //8    9   ,a   ,b    c    d    e    f  
  27                               0x80,0xbe,0x8b,0xee,0x84,0xca,0xf6,0x00, 
  28                              //灭   H    L    P    -   r     q    .
  29                                                   0xb7,0xbb,0xfa};
  30                                                  //y,   u   n
  31          unchar add;                                            // ram读取首地址
  32          //***************************************************************************************    
  33           //void KeyprgF1(void){}
  34          // void KeyprgF2(void ){}
  35           //void KeyprgClear(void){}
  36           //void KeyprgEnter(void){} 
  37           //***************************************************************************************  
  38          void display()
  39          {
  40   1         unchar i; 
  41   1         LedMode=1;
  42   1         DisCmd=scode;            //采用软件译码
  43   1         LedMode=0;
  44   1         for(i=0;i<8;i++)                    //将distab中的数据送如7218
  45   1         {
  46   2           
  47   2             DisData=ledtab[distab[i]];      //查表转化并将字型送入7218
  48   2         } 
  49   1        }
  50          //**************************************************************************************
  51          void KeyprgF2()                  //在光标当前位置设置小数点
  52          {
  53   1           unchar i;   
  54   1         DisCmd=scode;                //采用软件译码
  55   1         for(i=0;i<8;i++)             //将distab中的数据送如7218
C51 COMPILER V7.06   SRAM_CPLD1                                                            08/20/2005 13:41:49 PAGE 2   

  56   1         {
  57   2           if(i=ledcursor)
  58   2           temp[i]=ledtab[distab[i]]+0x80;
  59   2           temp[i]=ledtab[distab[i]]; //查表转化并将字型送入7218
  60   2               DisData=temp[i];
  61   2         }
  62   1          
  63   1      
  64   1      }
  65           //**************************************************************************************
  66          
  67          void keyprg(unchar key)                //键盘键值执行的程序
  68          {  
  69   1        unchar i;
  70   1        if((key<=9)&enter)
  71   1         {   
  72   2            distab[ledcursor]=keynum;        //键值送入distab最低位保存
  73   2                 if(ledcursor>0)                 //光标移位
  74   2                 ledcursor--;
  75   2             else 
  76   2                 ledcursor=7;
  77   2          display();                         //显示键值
  78   2              }
  79   1        
  80   1        else 
  81   1         {
  82   2          switch(key)
  83   2                 {
  84   3                   case 0x0D:  //加
  85   3                       if(distab[ledcursor]<0x09)
  86   3                            distab[ledcursor]++;
  87   3                else
  88   3                    distab[ledcursor]=0;
  89   3                    display();          //显示键值
  90   3                   break;     
  91   3                       case 0x0E:               //减
  92   3                        if(distab[ledcursor]>0)
  93   3                             distab[ledcursor]--;
  94   3                    
  95   3                       else
  96   3                     distab[ledcursor]=9;
  97   3                                 display(); //显示键值
  98   3                          
  99   3                   break;      
 100   3                       case 0x0A:             //KeyprgF1();
 101   3                       
 102   3               for(i=0;i<8;i++)      //将distab中的数据送如7218
 103   3                  {
 104   4                   distab[i]=0;
 105   4                   }
 106   3                            ledcursor=7;
 107   3                    display(); //显示键值
 108   3                   break;      
 109   3                       case 0x0B:            //功能键F2
 110   3                              KeyprgF2();
 111   3                   break;      
 112   3                       case 0x0C:           //KeyprgBack();
 113   3                       if(ledcursor<7)                //光标移位
 114   3                 ledcursor++;
 115   3             else 
 116   3                 ledcursor=0;
 117   3               display(); //显示键值
C51 COMPILER V7.06   SRAM_CPLD1                                                            08/20/2005 13:41:49 PAGE 3   

 118   3                   break;      
 119   3                       case 0x0F:       //KeyprgEnter();
 120   3                       enter=!enter;
 121   3                       display(); //显示键值
 122   3                   break;      
 123   3                       default:
 124   3                   break;      
 125   3                      }
 126   2               }
 127   1      
 128   1      }
 129          //**************************************************************************************
 130          void intt0() interrupt 0 
 131          { 
 132   1      unchar  xdata *cpld;
 133   1      // unchar i;
 134   1       EX0=0;              //关键盘中断,禁止相应其他按键
 135   1       keynum=P1;          //从p1口读入键盘值
 136   1       keynum=keynum&0x0f; //取低四位;
 137   1       // keyprg(keynum); 
 138   1       if(keynum==0x0d)       //地址加一
 139   1         { 
 140   2           add++;
 141   2               distab[7]=add/100;
 142   2           distab[6]=(add%100)/10;
 143   2           distab[5]=(add%100)%10;
 144   2           distab[4]=0x10;
 145   2           distab[3]=0x10;
 146   2               display();
 147   2          }
 148   1       if(keynum==0x0e)       //地址减一
 149   1         { 
 150   2           add--;
 151   2               distab[7]=add/100;
 152   2           distab[6]=(add%100)/10;
 153   2           distab[5]=(add%100)%10;
 154   2           distab[4]=0x10;
 155   2           distab[3]=0x10;
 156   2               display();
 157   2          }
 158   1       if(keynum==0x0a)        //F1,写数据
 159   1        {
 160   2          distab[7]=0x10;
 161   2          distab[6]=0x10;
 162   2          distab[5]=0x10;
 163   2          distab[4]=0x10;
 164   2          distab[3]=0x10;
 165   2              distab[2]=0x0e;
 166   2          distab[1]=0x1a;
 167   2          distab[0]=0x0d;
 168   2          cpld=0xa0ff;
 169   2              *cpld=1;
 170   2              *cpld=0;
 171   2               display();
 172   2        }
 173   1        if(keynum==0x0b)         //送入首地址
 174   1        {
 175   2         distab[7]=add/100;
 176   2         distab[6]=(add%100)/10;
 177   2         distab[5]=(add%100)%10;
 178   2         distab[4]=0x10;
 179   2         distab[3]=0x10;
C51 COMPILER V7.06   SRAM_CPLD1                                                            08/20/2005 13:41:49 PAGE 4   

 180   2         cpld=0xA0fe;
 181   2         *cpld=add;
 182   2         display();
 183   2         }
 184   1        if(keynum==0x0f)        //enter读入一个数据
 185   1         {
 186   2          cpld=0xA000+add;
 187   2              distab[2]=(*cpld)/100;
 188   2          distab[1]=((*cpld)%100)/10;
 189   2          distab[0]=((*cpld)%100)%10;
 190   2          display();
 191   2         }
 192   1         EX0=1;
 193   1      }
 194          
 195          void main()
 196          { 
 197   1         EX0=1;
 198   1         EA=1;
 199   1         display();
 200   1        while(1);
 201   1       }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    505    ----
   CONSTANT SIZE    =     27    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     19    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -