📄 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 + -