请教1T和12T单片机的程序问题

2020-01-30 14:11发布

我写了一个超声波测距的程序,定时器1每间隔200ms使P1.0发送10us的高电平(此超声波测距模块需要输入最少10US的高电平才有反馈),超声波模块检测到返回的波时,反馈给单片机P1.1口一个高电平,用反馈的高电平的时间来计算距离。用普通的12T的51单片机来运行程序,显示和测距都正常,用1T的增强型51单片机 STC12C5A60S2来运行相同的程序时,已经把12C5A60S2程序中的延时换成1T模式下的10US以上的时间,运行后,测距不更新,貌似是超声波模块没有反馈给单片机信号。我把程序发上来,麻烦大大们帮忙看下。
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag;
uint num;
uchar i=0;
uint time=0;
unsigned long S=0;
sbit TX=P1^0;
sbit RX=P1^1;
uchar disbuff[4]={10,10,10,10};
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
void delay(uint z)//12C5A60S2单片机1T模式下 @11.0952MHz //延时子函数
{
uint a,b,c;
for(a=z;a>0;a--)
   for(b=10;b>0;b--)
    for(c=85;c>0;c--);
}
void delay20us(void)   //误差 -0.016637731481us
{
     unsigned char a,b;
     for(b=1;b>0;b--)
         for(a=52;a>0;a--);
     _nop_();  //if Keil,require use intrins.h
}
void conut()
{
    time=TH0*256+TL0;
    TH0=0;
TL0=0;
    S=(time*1.7)/100;
if((S>=700)||flag==1)
{
    flag=0;
    disbuff[0]=10;
    disbuff[1]=10;
    disbuff[2]=10;
}
else
{
    disbuff[0]=S/100;
    disbuff[1]=S%100/10;
    disbuff[2]=S%10;
}
}
void display()
{
P2=i;
    P0=table[disbuff[i]];
i++;
if(i==3) i=0;
}
void main()
{
   TX=0;
   RX=0;
   TMOD=0x11;
   TH0=0;
   TL0=0;
   TH1=0xf8;
   TL1=0x30;
   EA=1;
   ET0=1;
   ET1=1;
   TR1=1;
  while(1)
   {
     while(!RX);
   TR0=1;
   while(RX);
   TR0=0;
   conut();
   }
}
void timer0() interrupt 1
{
   flag=1;
}
void timer1() interrupt 3
{
   TH1=0xf8;
   TL1=0x30;
   display();
   num++;
   if(num>=100)
   {
     num=0;
   TX=1;
   delay20us(); //与普通的51唯一的区别就是这个延时,把51的延时换成1T的单片机的延时。
   TX=0;
   }
}
请大大们帮忙看下,我实在是不理解哪里出错了,用这个单片机运行原来的定时器程序时,都可以正常的运行。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。