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

📄 ad7862.c

📁 能够实现上下位机的通讯
💻 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 + -