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

📄 main.c

📁 C51二路采集,二路采信,既一路记数,一路A/D转换
💻 C
字号:
#include <reg52.h>
#include <absacc.h>
#define uint unsigned int
#define uchar unsigned char
#define ADCom XBYTE[0xff7c]	   /*使A0=0,R/C=0,CS=0*/
#define ADLo XBYTE[0xFF7F]	  /*使A0=1,R/C=1,CS=0*/
#define ADHi XBYTE[0xff7d]	 /*使A0=0,R/C=1,CS=0*/

sbit ISVF=P3^2;
sbit R=P3^7;
sbit W=P3^6;
uint idata  result;
uint idata rate;
int i,k,j;
uchar SendB[9]; //串口缓冲区
uint SNum;  //发送字符个数
bit SendOK;   // 发送完在标志
uint SPON; //串口控制开关

/*************ms延时函数**************/
void delay(unsigned int ms) 
{
  for(k=0;k<ms;k++)
   for(i=0;i<100;i++)
   	for(j=0;j<255;j++)
	{;}
}

/*************启动A/D转换,采集数据***********/
uint ADTran(void)
{ 
    ISVF=1;
 	R=0;
	W=0;
	ADCom=0;
	delay(5);
	ISVF=0; 
	return((uint)(ADHi<<4)+(ADLo&0x0f));       /* 返回12位采样值*/
 }

/************采集频率数据**************/
uint CntF(void)
{
	TMOD=0x15;	/*T0记数,T1定时,方式1*/
	TH0=0X00;  /*T0记数清0*/
    TL0=0X00;
	TH1=0X4c;	/*T1定时50ms,11.0592MHz*/
    TL1=0X00;
	PT1=1;	  //T1中断优先
    TR0=1;
	TR1=1;
    ET1=1;
    EA=1;
  //  TR0=0;
   // ET1=0; 
//	TR1=0;
 //   EA=0;
//	PT1=0;
	return(TH0*256+TL0);
}

void timer1(void) interrupt 3   //*50ms定时中断服务
{
	TH1=0X4C;
	TL1=0X00;
	TF1=0 ;
	EA=0;
} 

void timer0(void) interrupt 1
{
}

/*************串口初始化*******/
void SPInit()
{
  T2CON=0X35;   //T2波特率发生器,11.0592MHz下,设置串行口9600波特率,方式3*/
  TL2=0xDC;
  TH2=0XFF;
  RCAP2L=0XDC;
  RCAP2H=0XFF;
  SCON=0xda;	 //
  TR2=1;	//T2定时开始
  PS=1;    //串口中断优先
  EA=1;	  //开总中断
  ES=1;	   //开串口中断
}

/**********串口发送数据*************/
void SendData()
{
  SPInit();
  SNum=0;
 while(SNum<9)
 {
  SBUF=SendB[SNum];
   while(TI==0) ;
   TI=0;
   SNum++;
 }
  EA=0;
  ES=0; 
  PS=0;
}

void main(void)
 {
    SendB[1]=0x87;
	SendB[6]=0x99;
	SendB[7]=0x55;
    ISVF=1;
	SPON=0; 
  while(1)
     {
		if(ISVF==1)
		{
			result=ADTran();
			SendB[2]=result>>8;
			SendB[3]=result&0xff;
			delay(2);
			ISVF=0;
			SPON++;
		}
	    else
		{
			rate=20*CntF();	 //1s频率
			rate=10*rate;  //返回原值,10分频
			SendB[4]=rate>>8;
			SendB[5]=rate&0xff;
			delay(2);
			ISVF=1;
			SPON++;
    	}
	    while((SPON%2)==0)
		{
	        SendData();
			delay(3);
      	}
      }
 }
 

⌨️ 快捷键说明

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