微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机程序移植问题

单片机程序移植问题

时间:10-02 整理:3721RD 点击:
原本在89C52上能正常运行的CHAO SHENG BO测距程序放到12C5A60S2中就不能用了,考虑到单片机运行速度的不同相应的延时也作了相应的改动,可是一点反应没有;有哪位大神知道解决办法请帮一下忙。感激涕零!

#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();
        }
}

STC12C5A60S2的定时器可以配置为12T或1T模式的,io口也是可以配置为4种模式的,可能是需要配置相应的寄存器吧

完全兼容8051的指令,也就是说你8952可以运行的,12系列完全可以。

楼上说得对     

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

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

请问你是怎么改的?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top