搜索
bottom↓
回复: 1

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

[复制链接]

出0入0汤圆

发表于 2013-2-28 21:25:16 | 显示全部楼层 |阅读模式
我写了一个超声波测距的程序,定时器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;
   }
}
请大大们帮忙看下,我实在是不理解哪里出错了,用这个单片机运行原来的定时器程序时,都可以正常的运行。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-3-1 00:08:50 来自手机 | 显示全部楼层
楼主的延时函数很难保证精确,建议改为定时器计时!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 18:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表