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

📄 main.c

📁 DS12C887在MSP430上读写操作程序
💻 C
字号:
#include <reg51.h>
#include <MODBUSCR.H>
typedef unsigned char BYTE;

sbit WDI = P3^4;
sbit PFO = P3^5;
sbit Light=P1^2;
sbit V_cont=P3^7;


bit mark_data;
BYTE SBUFlen, rxdata[7];    //接收数据缓存1
void slavetr_int(void) interrupt 4 using 1
{
  if (RI)
  {
    if (SBUFlen == 0 && SBUF == 0x7e)
      SBUFlen ++;
    else if (SBUFlen == 1 && SBUF == rxdata[0])
      SBUFlen ++;
    else if (SBUFlen == 8)
    {
      if (SBUF != 0xaa)
        SBUFlen = 0;
      else if (!make_crc_rbank_1(rxdata, 7))
      {
         mark_data = 1;
         SBUFlen ++;
      }
      else  SBUFlen = 0;
    }
    else if (SBUFlen == 9)
      0;          //no action
    else if (SBUFlen > 1)
    {
      rxdata[SBUFlen - 1] = SBUF;  //SBUFlen:1-5为数据,6,7为CRC校验。
      SBUFlen ++;
    }
    RI = 0;
  }
  return;
}

#define AppendCRC(dataBlock, num) { make_crc_rbank_0((dataBlock), (num)); (dataBlock)[(num)] = (byte)crc; (dataBlock)[(num)+1] = crc >> 8;}

BYTE tx[24]="\x01\x11\x11";       //发送数据缓存
void send_data(BYTE data *temp, BYTE num)
{
  EA = 0;                 //关中断;
  AppendCRC(temp, num);
  num += 2;

  SBUF = 0X7E;  while(TI == 0);  TI = 0;
  while (num --)
  {
    SBUF = *temp ++;
    while(TI == 0);  TI=0;
  }
  SBUF = 0XAA;  while(TI == 0); TI = 0;
  EA = 1;                 //开中断;
}

void main()
{
  bit dec_mark,dec_ok;
  BYTE order_ok,act_ok;   //接收数据存
  BYTE i,dec_num,order_type,adc_step;
  int count;

  mark_data = 0;  SBUFlen = 0;
  tx[0] = rxdata[0] = 0x01;

  /*串口232初始化*/
  TMOD = 0x20;
  TL1  = 0xfd;
  TH1  = 0xfd;
  SCON = 0x50;
  PCON = 0x00;
  TR1= 1;
  ES = 1;                //使用串口中断;
  EA = 1;                //开中断;
  dec_mark = 0; order_ok = 0x00;
  act_ok = 0xFF;   dec_num  = 0x00;
  send_data(tx, 3);            //串口发数据
  Light = !Light;
  while(1)              //进入循环
  {
    WDI = !WDI;

    if (mark_data == 1)
    {
      switch (rxdata[1])
      {
        case 0xEE:     //数据请求指令
        {
          if (rxdata[2] == 0xEE)
          {
            tx[1] = 0xEE; tx[2] = 0x0A;
            send_data(tx, 18);            //串口发数据
          }
        }     break;
        case 0xB9:    //确认减压后保压指令
        {
           tx[1] = 0xC4; tx[2] = rxdata[2]; tx[3] = 0xFF;
           send_data(tx, 4);          //串口发确认未执行保压
           if(rxdata[2] == 0x11)  V_cont=1;
           else  if(rxdata[2] == 0x22)  V_cont=0;
        }     break;
        default:        break;
      }
      SBUFlen = 0;   mark_data = 0;
    }

    if (PFO == 0)                   //低压报警
    {
      tx[1] = 0xE7;  tx[2] = 0xD8;  tx[3] = 0xD8;
      send_data(tx, 4);             //串口发请求低压报警
    }

    if (count > 12000)
    {
      count = 0;
      Light = !Light;
    }
    count ++;
  }
}

⌨️ 快捷键说明

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