2019-07-15 23:15发布
小咯咯怒 发表于 2013-8-6 11:39 STC12C5A60S2的定时器可以配置为12T或1T模式的,io口也是可以配置为4种模式的,可能是需要配置相应的寄存器 ...
dongyumin 发表于 2013-8-6 12:09 完全兼容8051的指令,也就是说你8952可以运行的,12系列完全可以。
最多设置5个标签!
#include<intrins.h>
//#include"CSB.H"
sbit Tring=P0^6;
sbit Echo=P0^7;
void delay(uint z) //延时子函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/* 功能描述:1T单片机us级延时,2us~85us,精度1us */
void DelayUs1T(uchar delayUsVal)
{
while (--delayUsVal);
}
void CSB_init()
{
TMOD=0X10;
TH1=0;
TL1=0;
EA=1;
ET1=1;
TR1=0;
Tring=0;
Echo=0;
}
void send_data()
{
Tring=1;
// _nop_();
// _nop_();
// _nop_();
// _nop_();
// _nop_();
// _nop_();
// _nop_();
// _nop_();
// _nop_();
// _nop_();
// _nop_();
// _nop_();
DelayUs1T(40);
Tring=0;
}
uint distance()
{
uint time;
uint dis;
// while(Echo==1);
while(Echo==0);
TR1=1;
while(Echo==1);
TR1=0;
time=TH1*256+TL1; //us
dis=(int)(time*1.7/100); //dis=(time/1000000)*340*100(cm)
TH1=0;
TL1=0;
return dis;
}
void check()
{
if(Dis>=100)
{
P1=0X0F;
}
else if(Dis>=15)
{
P1=0X0F;
}
else if(Dis>0)
{
P1=0X0c;
}
}
void main()
{
CSB_init();
P1=0;
while(1)
{
send_data();
Dis=distance(); //厘米
delay(700);
check();
}
}
他和89c52是兼容的吧,定时器在不设置时应该是默认12T吧
嗯,是程序存在一些问题,现在已经改好了
一周热门 更多>