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

📄 sram_cpld.c

📁 单片机与cpld总线方式通信
💻 C
字号:
/*单片机通过cpld向sram写数据,然后通过cpld将数据从ram读出来*/


//SA13---SA18由373锁存器提供,373的所存控制信号由P3.5提供,373的输入数据由P0口提供。373为下降沿锁存
//SRAM每个页面有0X1FFF个单元,每个页面的地址从0X2000到0X3FFF。
#include<reg51.h>
#include<intrins.h>
#include<absacc.h>
#define unchar unsigned char 
#define unint unsigned int 
#define DisCmd XBYTE [0xC100]                     //7218控制字地址
#define DisData XBYTE [0xC000]                    //7218数据口地址
#define SRAMPage 0x00
unchar keynum;
sbit  P3_5=P3^5;
//#define SRAM  XBYTE[0x2000]  //SRAM首地址
//unchar a[10]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
char distab[8]={0x13,0x13,0x14,0x00,0x12,0x12,0x0e,0x11} ; // 要显示的内容 hello-pp
char code ledtab[]={ 0xfb,0xb0,0xed,0xf5,0xb6,0xd7,0xdf,0xf0,
               //0,   1,    2,   3,   4,   5,   6,   7 
                0xff,0xf7,0xfe,0x9f,0xcb,0xbd,0xcf,0xce,
               //8    ,9   ,a   ,b   ,c    ,d  ,e    ,f  
                0x80,0xbe,0x8b,0xee,0x84 };
               //熄灭 H    L    P    -

//***********************************************************************
void delay100us(void)
{
	unchar n;
	for(n=0;n<100;n++);

}

//***********************************************************************
void display()
{
   unchar i;      
   DisCmd=0xb0;            //采用软件译码
   for(i=0;i<8;i++)      //将distab中的数据送如7218
   {
     DisData=ledtab[distab[i]]; //查表转化并将字型送入7218
   }
    
}
//***********************************************************************
SRAM_Initial(unchar Page)  //SRAM初始化程序,向指定的页面写入8k字节
{
   unchar  n,k;
   unchar xdata * SRAM;
   SRAM=0x2000;
    P3_5=0;
	_nop_();
	P3_5=1;
    _nop_();
	_nop_();
	P0=Page;    //选中SRAM第一页
	_nop_();
	_nop_();
	P3_5=0;    //下降沿锁存页地址
	 for(n=0;n<20;n++)
		{	
		 for(k=0;k<0xff;k++)
	   	{ 
		      *SRAM++=n;
         }
           delay100us();	
         }
}	

//***********************************************************************
unchar SRAM_Read(unchar Page,int add)    //从指定的页中,读出指定地址连续8个字节的值,送到distab保存
  {
    unchar xdata * SRAM;
   	//unchar  n;
	//SRAM=0x2000;
	 SRAM=0xA000;
   P3_5=0;
    _nop_();
	P3_5=1;
    _nop_();
	_nop_();
	P0=Page;    //选中SRAM第一页
	_nop_();
	_nop_();
	P3_5=0;  //下降沿锁存页地址
    SRAM=0xA000+add;
    //for(n=0;n<8;n++)
 	 //{
       //distab[n]=*SRAM;
	  // SRAM++;
	//  }
	return *SRAM;
    }

//***********************************************************************
SRAM_Write(unchar Page,int add,unchar dataa)    //从指定的页中,指定地址写入一个字节
  {
    unchar xdata * SRAM;
   //SRAM=0x2000;
    SRAM=0xA000;
   P3_5=0;
    _nop_();
	P3_5=1;
    _nop_();
	_nop_();
	P0=Page;    //选中SRAM第一页
	_nop_();
	_nop_();
	P3_5=0;  //下降沿锁存页地址
    SRAM=0xA000+add;
    *SRAM=dataa;
    }
//***********************************************************************
void intt0() interrupt 0 
{ 
 unchar i;
 EX0=0;              //关键盘中断,禁止相应其他按键
 keynum=P1;          //从p1口读入键盘值
 keynum=keynum&0x0f; //取低四位;
 //keyprg(keynum);
 if(keynum==0x0f)
  {
    for(i=0;i<8;i++)
    distab[i]=SRAM_Read(0,i);
    display();
  }
 if(keynum<10)
  {  
    for(i=0;i<8;i++)
    SRAM_Write(0,i,keynum);
  }

 EX0=1;                    //开中断
}

//***********************************************************************
void main(void)
{
    
	 display();
     EX0=1;
	 EA=1;
	
     while(1);

}
	

⌨️ 快捷键说明

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