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

📄 ee9346_h.c

📁 PIC单片机SPI通信C语言程序(93LS46)
💻 C
字号:
 //实验目的:熟悉SPI总线以及9346EEPROM的读写
 //RBO键按下时把DATA和DATA2写入到EEPROM中以EE—ADDR为地址的单元内,
 //完成后,单个数码观显示“9”做为完成标志
 //RB1键按下时,读取EEPROM中以EE—ADDR为地址的单元,并送数码管显示
 //硬件要求:S3、S5、S6拨码管置ON,S1第7、8位置ON。
 //若使用的是ATMEL公司的93C46,必须把“WORD SIZE”跳线选择16位端。
 #include<pic.h>
 __CONFIG(0x1832);        
//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡
 
 #define   c_s      RC2
 #define   clk      RC3
 #define   d_i      RC5
 #define   d0       RC4
 #define   ee_addr  0x5
 #define   nop() asm("nop")
 const char ee_data_write[]={0x56,0x78};
 unsigned char ee_date[4];
 const char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};

 unsigned int  temp;

 void      init();
 void      ee_write();
 void      ee_read();
 void      display();
 void      delay();
 void      ee_write_enable();
 void      spi_comm(unsigned char x);

void  main()
  {
     init();
     while(1)
       {
           if(!RB0)
              {
                ee_write();
              }
           if(!RB1)
              {
                ee_read();
                while(1)
                  {
                    display();
                  }
              }
       }
   }

void init()
   {
     ADCON1=0X07;
     TRISA=0X30;
     TRISB=0X03;
     TRISC=0X10;
     TRISD=0X00;
     PORTD=0XFF;
     SSPSTAT=0X80;
     SSPCON=0X31;
     INTCON=0X00;
     PIR1=0X00;
     c_s=0;
   }

void ee_write()
   {
     int i,j;
     ee_write_enable();
     c_s=1;
     spi_comm(0x1);
     spi_comm(ee_addr|0x40);
     for(i=0;i<2;i++)
        {
          j=ee_data_write[i];
          spi_comm(j);
        }
     c_s=0;
     nop();
     nop();
     c_s=1;
     nop();
     nop();
     while(!d0);
     c_s=0;
     nop();
     nop();
     PORTD=0X90;
     PORTA=0X3E;
   }

void ee_read()
   {
     int i;
     c_s=1;
     nop();
     nop();
     spi_comm(0x01);
     spi_comm(ee_addr|0x80);
     for(i=0;i<2;i++)
        {
         spi_comm(0);
         ee_date[i]=temp;
        }
     nop();
     c_s=0;
     nop();
   }
     
void ee_write_enable()
   {
     c_s=1;
     spi_comm(0x01);
     spi_comm(0x30);
     c_s=0;
     nop();
     nop();
   }

void spi_comm(unsigned char x)
   {
     SSPBUF=x;
     while(!SSPIF);
     SSPIF=0;
     temp=SSPBUF;
   }

void display()
   { 
     int i;
     i=ee_date[0]&0xf0;
     i=i>>4;
     PORTD=table[i];
     PORTA=0x3e;
     delay();
     i=ee_date[0]&0x0f;
     PORTD=table[i];
     PORTA=0x3d;
     delay();
     
     i=ee_date[1]&0xf0;
     i=i>>4;
     PORTD=table[i];
     PORTA=0x3b;
     delay();
     i=ee_date[1]&0x0f;
     PORTD=table[i];
     PORTA=0x37;
     delay();
   }

void  delay()
   {
     int i;
     for(i=100;i>0;i--);
   }

⌨️ 快捷键说明

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