找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9246|回复: 8
收起左侧

求助:单片机从89C52改到STC12C5A60S2时延时函数的更改问题

[复制链接]
ID:72559 发表于 2016-5-16 21:41 | 显示全部楼层 |阅读模式
单片机本来选取的是89C52,后来因为串口原因改到了STC12C5A60S2,也就是MCU从12T改到了1T,我知道需要更改延时韩式,但是不知道要怎么改,请教一下需要怎么改。延时函数如下:
/**************************************
延时5微秒(STC90C52RC@12M)
不同的工作环境,需要调整此函数,注意时钟过快时需要修改
当改用1T的MCU时,请调整此延时函数
**************************************/
void Delay5us()
{
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();
}

/**************************************
延时5毫秒(STC90C52RC@12M)
不同的工作环境,需要调整此函数
当改用1T的MCU时,请调整此延时函数
**************************************/
void Delay5ms()
{
    WORD n = 560;

    while (n--);
}

回复

使用道具 举报

ID:7485 发表于 2016-5-16 22:13 | 显示全部楼层
这个要看c语言程序最终使用了那些汇编指令。如:void Delay5us()  里面仅仅使用了“NOP”指令,这个指令对于STC12C5A60S2来说是传统8051的速度的12倍(其他指令的速度倍数从3~12不等),所以需要执行12次Delay5us函数才能达到原来设定的延时时间。
另一个延时程序,最终的汇编指令用了哪些不清楚(当然你可以查看一下),最好使用keil4仿真运行中确定。
回复

使用道具 举报

ID:7485 发表于 2016-5-16 22:22 | 显示全部楼层
(接上一帖子),最终的汇编代码可以打开“*.lst”文件查看(需要在/工程/为目标设置选项/清单/...中勾选“汇编代码”才能查看),不过这需要你有汇编的基础才行。
回复

使用道具 举报

ID:72559 发表于 2016-5-16 22:29 | 显示全部楼层
ahshmj 发表于 2016-5-16 22:13
这个要看c语言程序最终使用了那些汇编指令。如:void Delay5us()  里面仅仅使用了“NOP”指令,这个指令对 ...

感谢,十分感谢
回复

使用道具 举报

ID:119239 发表于 2016-5-17 23:13 | 显示全部楼层
直接从STC-ISP软件的延时程序中输入你的参数,生成代码即可使用,很准的。
回复

使用道具 举报

ID:456441 发表于 2018-12-27 14:42 | 显示全部楼层
请问您这个问题解决了吗  我也是用这个单片机的   有问题想请教您
回复

使用道具 举报

ID:523982 发表于 2019-4-29 20:00 | 显示全部楼层
楼主还在吗?我最近也在做这个东西,也是51改为stc12串口收到的数据是乱码,延时也改了,还是没用,楼主能提供下程序吗?
回复

使用道具 举报

ID:447439 发表于 2022-1-11 22:20 | 显示全部楼层
时序问题,看我的帖子
回复

使用道具 举报

ID:1018269 发表于 2022-4-14 09:42 | 显示全部楼层
小丑only 发表于 2022-1-11 22:20
时序问题,看我的帖子

如果89c52单片机程序转换成STC12C5A32S2程序还需要修改什么,改了延时不行
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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