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