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