📄 ad7862.c
字号:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar data_hi,data_lo;
//uchar ad_data[32];
//uchar data_hi[16];
uchar i;
//uchar num_ad;
//对AD 管脚的 定义
sbit A0 = P2^4; //通道选择用P2^4来控制
sbit rd = P3^7;
sbit cs = P2^5;
sbit CONVST = P1^0;
char temp;
char num;
/*//频率测量初始化
void frequency_init(void)
{
TMOD |= 0x01; //T0均工作于方式1(16位定时/计数器),T0用于对脉冲计数
TH0 = 0x00; //写入T0计时初值
TL0 = 0x00;
ET0 = 0; //关断T0中断
// EA = 1; //开放CPU中断
TR0 = 1; //启动T0工作
IT1 = 1; //设置INT1为边沿触发
EX1 = 1; //开INT1中断
EA = 1; //开全局中断
}
//频率结果读取
void frequency_read(void)
{
TR0 = 0; //停止T0工作
frequency[0] = TL0; //读取频率结果
frequency[1] = TH0;
TH0 = 0x00; //写入T0计时初值
TL0 = 0x00;
TR0 = 1; //启动T0工作
}
void freq_int(void) interrupt 2
{
frequency_read();
count = frequency[1]*256+frequency[0];
num++;
}*/
//串口初始化
void seril_init(void)
{
TMOD|=0x20; //设置波特率为9600的定时器1方式合初始化值
TL1=0xfd;TH1=0xfd;
SCON=0xd8;PCON=0x00;//设置串行口方式
TR1=1;
}
//定时器0初始化
/*void timer0_init(void) //系统初始化
{
TMOD |= 0x01; //选择定时器0
TH0 = (65536-count/16)/256; //装初值
TL0 = (65536-count/16)%256;
EA = 1; //开中断
ET0 = 1;
TR0 = 1;
}
void timer0() interrupt 1
{
TR0 = 0;
TH0 = (65536-count/16)/256; //重新装初值
TL0 = (65536-count/16)%256;
TR0 = 1;
tflag = 1; //定时标志位 置1
}
*/
//AD7862 初始化
void AD7862_init(void)
{
A0 = 0; //选择用A通道 只读A通道数据
rd = 1;
cs = 1;
CONVST = 1;
IT0 = 1; //设置INT0为边沿触发
//EX0=1; //开外部中断0
//EA = 1; //开全局中断
}
//AD7862 转换
void AD_on(void)
{
CONVST = 0;
CONVST = 1;
}
//AD7862 转换 外部中断0读数据
void INT0_adrd(void) interrupt 0
{
cs = 0;
rd = 0;
temp=P0;
P0>>=2;
P0=P0&0x3f;
data_hi = P0;//高6位,标志位为00
temp<<=4;
temp=temp&0x30;
P2=P2&0x0f;
num=P2;
data_lo =(temp|num)|0x40;//低6位,标志位为01
while(1)
{
SBUF = 0x5a;
while(TI==0);
TI=0;
while(1)
{
for(i=0;i<8;i++) //此处i该为8;
{
SBUF = data_hi;
while(TI==0);
TI=0;
SBUF = data_lo;
while(TI==0);
TI=0;
}
}
}
rd = 1;
cs = 1;
}
void main(void)
{
//num =0;
seril_init();
AD7862_init();
//EX0=1;
AD_on();
EA = 1;
EX0=1;
//while(num < 10);
//EX0 = 0;
// timer0_init();
/* while(1)
{
SBUF = 0x5a;
while(TI==0);
TI=0;
/* while(num_ad < 16)
{
while(tflag == 0);
{
AD_switch();
tflag = 0;
}
}
while(1)
{
for(i=0;i<8;i++) //此处i该为8;
{
SBUF = data_hi;
while(TI==0);
TI=0;
SBUF = data_lo;
while(TI==0);
TI=0;
}
}
//num_ad = 0;
} */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -