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

📄

📁 16为ad转换的c程序 我自己已经调试成功的
💻
字号:
#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 + -