📄
字号:
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit adcDO=P1^6; //定义I/O口控制
sbit adcCS=P1^7;
sbit adcLK=P1^5;
sbit Key=P3^2;
sbit com1=P1^4;
sbit com2=P1^3;
uint data_0=0;
uchar code table[]={
0x01,0x02,0x04,0x08,
0x10,0x20,0x40,0x80};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--);
for(y=10;y>0;y--);
}
void initUart(void) //串口初始化
{
TMOD|=0x20; //方式2,8位自动重装
SCON=0x50;
PCON|=0x80; //波特率加倍
TH1=0xfa; //9600
TL1=0xfa;
TR1=1; //开定时器1
}
void initTimer(void) //定时器0初始化
{
ET0=1; //定时器T0中断开
TMOD|=0x01; //方式1,16位定时器
TH0=0x3c;
TL0=0xb0;
TR0=1; //开定时器0
}
uint readadc(void)
{
uchar H,L,i;
uint count; //16位变量
adcCS=1; //高电平转换数据
delay(20); //延时8.5μ等待转换结?
adcCS=0; //低电平有效,开始准备读数
// adcLK=0; //开始读数
H=0; //高位变量清零
for(i=0;i<8;i++) //读高8位
{
adcLK=0;
if(adcDO)
H++; //位标量,如为1则H加1,如为0则跳过
adcLK=1;
if(i!=7) //如果i=7,则为第8位,不左移
H<<=1;
}
L=0; //低位变量请零
for(i=0;i<8;i++) //读低8位
{
adcLK=0;
if(adcDO)
L++; //位标量,如为1则L加1,如为0则跳过
adcLK=1;
if(i!=7) //如果i=7,则为第8位,不左移
L<<=1;
}
adcCS=0; //读数结束,片选至低,停止转换
adcLK=1;
count=0;
count=(H<<8)|L; //高低位相加
return count;
}
void send()
{
SBUF=(data_0>>8)&0xff; //发高8位
while(!TI);
TI=0;
SBUF=data_0&0xff; //发低8位
while(!TI);
TI=0;
}
void init() //采集数据
{
uchar num1=0;
for(num1=0;num1<8;num1++)
{
P0=table[num1];
delay(20);
data_0=readadc(); //读数
send(); //发数
}
}
void timer0(void) interrupt 1 //定时(50*num)ms
{
uchar num;
TH0=0x3c;
TL0=0xb0;
num++;
if(num==1)
{
num=0;
init();
}
}
/*
void int0(void) interrupt 0
{
init();
}
*/
void main(void)
{
P0=0;
adcCS=0;
com1=0; //打开串口1
initUart(); //串口初始化
initTimer(); //定时器初始化
EA=1; //总中断开
// IT0=1; //外部中断触发方式为下降沿
// EX0=1; //外部中断0开
while(1)
{;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -