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

📄 rs485.c

📁 RS485测控模块
💻 C
字号:
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define Tim 65536-50000

sbit DAT0 =P2^2;
sbit DAT1 =P2^3;
sbit DICS =P2^4;
sbit DOCS =P2^5;
sbit CLK  =P2^6;

sbit ADCS =P1^5;
sbit DAT3 =P1^6;
sbit DAT4 =P1^7;

sbit DACS =P3^5;
sbit DAT2 =P3^4;

bit KeyOn;
uchar disp[6];
uint para[8],ptr;
uchar ts;
uchar DO[3],DI[3],DA[4];
uint AD[16];

void time(uint t)
{
  uint i;
  for(i=0;i<t;i++);
}

void write8(uchar x)  
{                           
  uchar i; 
  CLK=1;
  for(i=0;i<8;i++)
  {
    x=x<<1; DAT0=CY;
    CLK=0; CLK=0; CLK=0;  
	CLK=1; CLK=1; CLK=1;      
  }
}  

void DO24()
{ 
  write8(DO[2]);
  write8(DO[1]);
  write8(DO[0]);
  DOCS=1; DOCS=0;
}

uchar read8()
{
  uchar x=0,i;
  DAT1=1; CLK=1;
  for(i=0;i<8;i++)
  {
    CLK=0;CLK=0;CLK=0;
	x=x<<1;
	if(DAT1) x++;
	CLK=1;CLK=1;CLK=1;
  }
  return x;
}

void DI24()
{
  DICS=0; DICS=1;
  DI[2]=read8();
  DI[1]=read8();
  DI[0]=read8();
}

void TLC5620(uchar ch,uchar x)
{
   uchar i,p;
   //p=ch<<6; 
   CLK=0;  
   p=(ch*2+1)<<5;
   for (i=0; i<3; i++) 
    {
     p=p<<1; DAT2=CY; 
     CLK=1;  CLK=0;
    }
   p=x;
   for (i=0; i<8; i++) 
    {
     p=p<<1; DAT2=CY; 
     CLK=1;  CLK=0;
    }
   DACS=0; DACS=1; CLK=1;
}

uint TLC1543(uchar p) 
{
  uint  res=0;
  uchar i; CLK=0;
  ADCS=0;  p=p<<4;
  for (i=0;i<10;i++) //把通道号打入1543
  {
    p=p<<1; DAT4=CY; 
    CLK=1; CLK=0;
  }
  ADCS=1;              //等待AD转换
  time(50);
  ADCS=0;       
  for (i=0;i<10;i++) //取D9--D5
  {
    CLK=1; res<<=1;
    DAT3=1; if(DAT3) res++;
    CLK=0;
  } 
  ADCS=1; CLK=1;
  return res;
}


void tim0() interrupt 1 //定时中断
{
  static uchar i,j;
  TH0=Tim>>8;TL0=Tim&0xff;
  DI24();  DO24();
  if(++i>3) i=0;
  if(++j>15) j=0;
  TLC5620(i,DA[i]);
  AD[j]=TLC1543(j);
  if(ts<255) ts++;
}

⌨️ 快捷键说明

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