单片机程序移植问题

2019-07-15 23:15发布

原本在89C52上能正常运行的CHAO SHENG BO测距程序放到12C5A60S2中就不能用了,考虑到单片机运行速度的不同相应的延时也作了相应的改动,可是一点反应没有;有哪位大神知道解决办法请帮一下忙。。。。。感激涕零!!!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
玩第八
1楼-- · 2019-07-16 03:01
#include<reg52.h>
#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();
        }
}


小咯咯怒
2楼-- · 2019-07-16 04:16
STC12C5A60S2的定时器可以配置为12T或1T模式的,io口也是可以配置为4种模式的,可能是需要配置相应的寄存器吧
dongyumin
3楼-- · 2019-07-16 08:35
完全兼容8051的指令,也就是说你8952可以运行的,12系列完全可以。
liwenbiao
4楼-- · 2019-07-16 08:41
 精彩回答 2  元偷偷看……
玩第八
5楼-- · 2019-07-16 14:09
小咯咯怒 发表于 2013-8-6 11:39
STC12C5A60S2的定时器可以配置为12T或1T模式的,io口也是可以配置为4种模式的,可能是需要配置相应的寄存器 ...

他和89c52是兼容的吧,定时器在不设置时应该是默认12T吧

玩第八
6楼-- · 2019-07-16 19:45
dongyumin 发表于 2013-8-6 12:09
完全兼容8051的指令,也就是说你8952可以运行的,12系列完全可以。

嗯,是程序存在一些问题,现在已经改好了

一周热门 更多>