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

📄 bujin.c

📁 一个关于步进电机的应用
💻 C
字号:
//实验目的:熟悉MSSP通信协议。
//当按键RB0按下时,把6个连续的数据写入到6个连续的单元内
//写完成后数码管显示单个2,做为完成标志位
//当按键RB1按下后读取EEPROM连续六个单元
//读取结果送6位数码管显示
//硬件要求:拨码开关S8、S5、S6全部置ON,
#include<pic.h>

 #define address  0xa
 #define nop() asm("asm")
 //__CONFIG(0x1832);        
//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡
 
 const char ee_data_write[]={0x6,0x5,0x4,0x3,0x2,0x1};
 unsigned char ee_date[6];
 const char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};

void write();
void read();
void wrtacktest();
void i2c_idle();
void delay();
void display();
void init();

void main()
 {
   init();
   while(1)
     {
      if(!RB0)
         {
           write();
         }
      if(!RB1)
         {
           read();
           while(1)
             {
             display();
             }
         }
      }
  }

void init()
  {
   OPTION=0;
   STATUS=0X0;
   PORTD=0XFF;
   ADCON1=0X07;
   TRISC=0XFF;
   TRISA=0X00;
   TRISB=0X03;
   TRISD=0X00;
   SSPADD=0X9;
   SSPSTAT=0X80;
   SSPCON=0X38;
  }
  
void write()
  {
    int i;
    i2c_idle();
    SEN=1;
    while(!SSPIF);
    SSPIF=0;
    SSPBUF=0XA0;
    wrtacktest();
    while(STAT_BF);
    SSPBUF=address;
    wrtacktest();
    while(STAT_BF);
 
    for(i=0;i<6;i++)
      {
         SSPBUF=ee_data_write[i];
         wrtacktest();
      }
    PEN=1;
    nop();
    SSPIF=0;
    delay();
    delay();
    PORTD=0XA4;
    PORTA=0X3E;
 }

void read()
 {
    static volatile unsigned int i;
    i2c_idle();
    SSPIF=0;
    SEN=1;
    while(!SSPIF);
    SSPIF=0;
    SSPBUF=0XA0;
    wrtacktest();
    SSPBUF=address;
    wrtacktest();
    
    i2c_idle();
    SSPIF=0;
    RSEN=1;
    while(!SSPIF);
    SSPIF=0;
    SSPBUF=0XA1;
    wrtacktest();
   
    for(i=0;i<6;i++)
       {
          RCEN=1;
          while(!SSPIF);
          ee_date[i]=SSPBUF;
          while(!SSPIF);
          SSPIF=0;
          if(i>=5) 
              {
                ACKDT=1;
              }
          else     
              {
                ACKDT=0;
              }
          ACKEN=1;
          while(!SSPIF);
          SSPIF=0;
       }
   
    PEN=1;
    while(!SSPIF);
    SSPIF=0;
 }
     
void wrtacktest()
 {
   while(!SSPIF);
   SSPIF=0;
 }

void i2c_idle()
 {
   while(STAT_RW);
   ZERO=0;
   while(ZERO)
     {
       SSPCON2&0x1f;
     }
 }
    
void display()
   { 
     int i;
     i=ee_date[0]&0x0f;
     PORTD=table[i];
     PORTA=0x1f;
     delay();
     i=ee_date[1]&0x0f;
     PORTD=table[i];
     PORTA=0x2f;
     delay();
     
     i=ee_date[2]&0x0f;
     PORTD=table[i];
     PORTA=0x37;
     delay();
     i=ee_date[3]&0x0f;
     PORTD=table[i];
     PORTA=0x3b;
     delay();

     i=ee_date[4]&0x0f;
     PORTD=table[i];
     PORTA=0x3d;
     delay();
     i=ee_date[5]&0x0f;
     PORTD=table[i];
     PORTA=0x3e;
     delay();
   }

void delay()
 {
    int i;
    for(i=0;i<100;i++)
       {;}
 }

⌨️ 快捷键说明

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