|
#include "ATC12C5A60S2.h"
#include <intrins.h>
sbit ADDO = P4^2;
sbit ADSK = P4^3;
void delayms(char ms);
void send_char(char txd);
void send_Achar(char *string);
void get_weight();
void init();
long a,weight;
char c[5],a1,a2,a3;
char tab[]="0123456789";
long ReadCount(void);
main()
{
delayms(500);
init();
while(1)
{
get_weight();
}
}
void init()
{
TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率
TH1 = 0xFD; // 波特率9600
TL1 = 0xFD;
SCON = 0x50; // 设定串行口工作方式
PCON &= 0xef; // 波特率不倍增
TR1 = 1; // 启动定时器1
IE = 0x0; //禁止任何中断
}
void send_char(char txd)
// 传送一个字符
{
SBUF = txd;
while(!TI); // 等特数据传送
TI = 0; // 清除数据传送标志
}
/**********************发送一个字符串******************************/
void send_Achar(char *string)
{
while(*string!='\0')
{
send_char(*string);
string++;
}
}
void delayms(char ms) // 延时子程序
{
char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
long ReadCount(void)
{
long Count;
char i;
ADSK=0; //使能AD(PD_SCK 置低)
Count=0;
while(ADDO); //AD转换未结束则等待,否则开始读取
for (i=0;i<24;i++)
{
ADSK=1; //PD_SCK 置高(发送脉冲)
Count=Count<<1; //下降沿来时变量Count左移一位,右侧补零
ADSK=0; //PD_SCK 置低
if(ADDO) Count++;
}
ADSK=1; //第25个脉冲到来
_nop_(); //延长一个机器周期
ADSK=0; //第25个脉冲结束
return(Count);
}
void get_weight() //获取被测物体重量
{
long count=0;
long sum=0;
for (count=0;count<5;count++)
{
a=ReadCount();
a=a>>8;
sum+=a;
}
a=sum/5;
// a1=a&0xff;//a低8位赋值给a1
// a2=a>>8;//a右移8位后再把此时的a的低八位赋值给a2
// send_char(a2); //串口输出a2
// send_char(a1);//串口输出a1
// send_char(0xab);//串口输出AB
weight=(long)((float)(a-791)*0.0378);//重量转换函数,传感器型号不同此函数要适当修改
c[0] = tab[weight/10000];
c[1] = tab[weight%10000/1000];
c[2] = tab[weight%1000/100];
c[3] = tab[weight%100/10];
c[4] = tab[weight%10];
// c[0] = tab[a/10000];
// c[1] = tab[a%10000/1000];
// c[2] = tab[a%1000/100];
// c[3] = tab[a%100/10];
// c[4] = tab[a%10];
if(c[0]==0x30)
{
send_char(0x20);
}
else
{
send_char(c[0]);
}
if((c[1]==0x30)&&(c[0]==0x30))
{
send_char(0x20);
}
else
{
send_char(c[1]);
}
if((c[2]==0x30)&&(c[1]==0x30)&&(c[0]==0x30))
{
send_char(0x20);
}
else
{
send_char(c[2]);
}
if((c[3]==0x30)&&(c[2]==0x30)&&(c[1]==0x30)&&(c[0]==0x30))
{
send_char(0x20);
}
else
{
send_char(c[3]);
}
send_char(c[4]);
send_char(0x20);
send_char(0x67);
send_Achar("\r\n");
}
/************************************************/
/* 由于称重传感器线性度参数的不同,而对获得的重量数据处理,
此处可能会根据不同称重传感器,程序的代码会有所不同 */
/************************************************/
|
|