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

📄 1225.txt

📁 这是一个单片机的16位AD转换
💻 TXT
字号:
#include<reg51.h>
#include <intrins.h>
#include<absacc.h>
#define uint unsigned int
sbit CAL=P2^0;
sbit SAMPLE=P2^2;
sbit BUSY=P2^1;
sbit P24=P2^4;
sbit P25=P2^5;
sbit P26=P2^6;
int data array[12];//ad转换结果存储数组
int * read;//
static int i=0;
static int m=0;
unsigned char th,tl; 
void delay(unsigned char a);
void Multichange(int j)///////////////6路转换,用3个管脚控制多路转换//////采样未占用时钟中断,采用计数////////
	{
		P24=j&&00000100;// j十进制变二
		P25=j&&00000010;
		P26=j&&00000001;
	}
void ad676_read(void)  /*转换一路数据,并读取*/
	{
	 read=array;
	 * (read++)=P0;//*读p0数据低8位	 
	 * (read++)=P1;/*读p1数据高8位*/
	}
//////延迟函数////
void delay(unsigned char a)  //微秒延时子程序 延时时间 t=3+2a us
{ 	 
	while(--a); 
}
void AD676_start()////////////////////////转换6路数据
{
	int j;
	for(j=0;j<6;j++)
	{
	    Multichange(j); //多路转换控制
	    SAMPLE=1;/*置位1*/
	    SAMPLE=0;/*下降沿触发启动A/D转换*/		
	    delay(1);//延时1ms				
	    while(BUSY==0);/*读取转换结果*/		
	    ad676_read();//读AD数据
	}
	m=1;
}
void datacollect()//数据采集
{
	do
	{	
	  AD676_start();//AD转换
	}while(!m);
}
void com_baudrate()//波特率设置
	{
		EA=0;//close interrupt
		TI=0;//clear 
		TR1=0;//启动T/C1
		ET1=0;
		PCON=0x00;//波特率不变SMOD=0
		TMOD=0x20;//T/C1定义方式2
		TH1=0xFD;//定时参数
		TR1=1;//关闭T/C1
		EA=1;//开中断
	}
void cominitialize()//串口初始化函数
{
	com_baudrate();//use time T1 as the badu generater
	EA=0;//close the interrupt
	for(i=0;i<12;i++)
	{
	  array[i]=0;
	}
	//SM0=0;SM1=1;//串口方式1
	SCON=0x50;//串口方式1,8位,一个起始位,一个停止位
	TI=0;
	ES=1;
	PS=0;
	EA=1;//中断	
}
void initialize(void)
{	cominitialize();//调用串口初始化函数
	CAL=0;
	CAL=1;//AD校准
	delay(5);//延时2×5+3=13us,AD校准用
	CAL=0;		
}
/////////////////////////////主函数//////////////////////////
Main()
{
	initialize();//初始化
	do 
     {
	datacollect();//数据采集
	m=0;
	SBUF=0x55;//发送头帧数据
	SBUF=0x55;//发送头帧数据
	while(TI)
	TI=0;
	do
	{
	  SBUF=array[i++];
	}while (i<12);
	if(i==12)
	i=0;
     }while(1);
}

⌨️ 快捷键说明

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