找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3111|回复: 6
收起左侧

AT89C52替换成STC12C5A60S2应该怎样修改啊请大神指导抱歉粘贴不完

[复制链接]
ID:416495 发表于 2019-3-14 01:12 来自手机 | 显示全部楼层 |阅读模式
这是延时函数* 输入 : q
* 输出 : 无
***********************************************************************/
void delay_1ms(uint q)
{
        uint i,j;
        for(i=0;i<q;i++)
                for(j=0;j<110;j++);
}
这是定时函数
/*********************定时器0、定时器1初始化******************/
void time0_init()          
{
        TMOD = 0X11;          //定时器0、定时器1工作方式1
        ET0 = 1;                  //开定时器0中断
        TR0 = 1;                  //允许定时器0定时
//        ET1 = 1;                  //开定时器1中断
//        TR1 = 1;                  //允许定时器1定时       
}
这是中断函数
/*********************定时器0中断服务程序************************/
void time0_int() interrupt 1  
{                                                  
        static uchar value;                         //定时10ms中断一次
        TH0 = 0x3c;
        TL0 = 0xb0;     //50ms
        value ++;
        flag_5m_value++;
        if(flag_5m_value % 10 == 0)
                flag_500ms = ~flag_500ms;
        if(value >= 20)
        {
                value = 0;
                flag_1s = 1;
        }
}
这是主函数
***********************************************************************/
void main()
{
        P0 = P1 = P2 = P3 = 0XFF;    //IO口全部输出为1
        time0_init();
        dx_s = nb_time;          //南北时间
        while(1)
        {
                key();
                if(key_can < 20)
                        key_with();
                che_liuliang();         //车计流量程序
                if((menu_1 == 0) && (flag_jdgz == 0))
                        jiaotongdeng_dis();
                if(flag_che == 1)
                {
                        dis_smg[3] = smg_du[nb_che_value / 10 % 10] ;        //显示为B
                        dis_smg[2] = smg_du[nb_che_value % 10] ;        //显示为B
                        dis_smg[1] = smg_du[dx_che_value / 10% 10] ;                //显示东?魃柚玫氖焙?
                        dis_smg[0] = smg_du[dx_che_value % 10 ] ;       
                }
                display();       
        }
}  
回复

使用道具 举报

ID:317383 发表于 2019-3-14 07:35 | 显示全部楼层
根据程序看,主要涉及到delay
stc12是1T,stc89是12T
stc12指令执行要快,比如你的delay函数
回复

使用道具 举报

ID:100826 发表于 2019-3-14 08:04 | 显示全部楼层
12T 1T  延时少个10倍左右就可以了  你可以到宏晶官方网站看看  里面有例程 好像是DS18B20
回复

使用道具 举报

ID:94031 发表于 2019-3-14 08:36 | 显示全部楼层
一般来说牵扯定时的部分要修改,方法,先完全移植,然后碰到什么问题解决什么问题,难度不小于从头开发。
回复

使用道具 举报

ID:202748 发表于 2019-3-14 08:41 | 显示全部楼层
没用到12C5A60S的一些特殊功能的话,程序不用改变,可以直接换。我有一次使用STC89C52,因为程序有点大,装不下。后面就直接用STC12C5A60S烧录,完全正常运行。
回复

使用道具 举报

ID:426861 发表于 2019-3-14 10:08 | 显示全部楼层
STC12的12T模式可以兼容STC89的,如果用此模式的话就不用修改。但这也就浪费了1T的功能
回复

使用道具 举报

ID:285591 发表于 2019-3-14 10:15 | 显示全部楼层
用stc-isp的功能。添加12系列的头文件。用stc-isp里面的延时计算器,直接替换掉源码里面的延时函数。
QQ图片20190314084035.png
QQ图片20190314101325.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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