搜索
bottom↓
回复: 25

自己写的C51毫秒延时库函数

[复制链接]

出0入0汤圆

发表于 2011-7-31 20:47:25 | 显示全部楼层 |阅读模式
因为delay.c捆绑的delay.h需要编辑晶振频率,编译成库文件在编辑delay.h文件就不起作用了,没办法针对不同的晶振频率,分别编译了库函数.

000</font>1 //---------------------------------------------------------------------
000</font>2 //    File:        delay.h
000</font>3 //
000</font>4 //    Written By:    wangqh1983
000</font>5 //    Purpose:    delay include File
000</font>6 //---------------------------------------------------------------------
000</font>7 #ifndef __DELAY_H
000</font>8 #define __DELAY_H
000</font>9 /* 8051 software delay interface header */
00</font>10 #define Fosc 11059200                    //XTAL = 11.0592MHz
00</font>11 #define Fcy    (Fosc/12)                    //921600Hz
00</font>12 /*****   FUNCTION PROTOTYPES FOR 8051   *****/
00</font>13 void delay (unsigned short);
00</font>14 #endif


此次编译的库函数有4M,8M,11.0592M,12M.延时长度为1mS~65535mS
000</font>1 //---------------------------------------------------------------------
000</font>2 //    File:        main.c
000</font>3 //
000</font>4 //    Written By:    wangqh1983
000</font>5 //    Purpose:    delay
000</font>6 //---------------------------------------------------------------------
000</font>7 #include <reg51.h>
000</font>8 #include "delay.h"
000</font>9 int main (void)
00</font>10 {
00</font>11     while(1)
00</font>12     {
00</font>13         P1 = 0xff;
00</font>14         delay(500);
00</font>15         P1 = 0x00;
00</font>16         delay(500);
00</font>17     }
00</font>18     return 0;
00</font>19 }

点击此处下载 ourdev_662951PKSHY8.rar(文件大小:24K) (原文件名:Ys_mS.rar)

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

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2011-7-31 20:49:40 | 显示全部楼层
mark。谢谢楼主了

出0入0汤圆

 楼主| 发表于 2011-8-2 13:22:50 | 显示全部楼层
有人测算过精度吗?12M的晶振,精度为万分之45uS,也就是说形参输入10000(ms)误差仅有45us。唯有4M的做得不算理想……但已经做到尽可能小了。

出0入0汤圆

发表于 2011-8-2 13:59:32 | 显示全部楼层
这个……那各种加强版51怎么办……还有变态级的流水线 c8051f怎么办……
毫秒级的要精度直接定时器算了,不要精度大概临时做个也凑合……

建议楼主不要用简单的delay作为函数名

出0入0汤圆

发表于 2011-8-2 14:40:26 | 显示全部楼层
LZ 你的库文件时这么写的啊???

出0入0汤圆

 楼主| 发表于 2011-8-2 18:52:16 | 显示全部楼层
回复【4楼】majianjia  阿嘉^_^
-----------------------------------------------------------------------

这个问题……,有些时候用定时器未必好用,但是这个函数在开定时器时也不准了.也不是为证明什么就是为了自己使用方便!我还做了相应的PIC、dspic、我认为任何单片机都可以这样做(前期你要对此编译器C生成的汇编有所了解),移植的时候只需要修改一下Fosc就可以了;一次创作一劳永逸!至少我的源代码是这样子的,封装成库就没办法了.

出0入0汤圆

发表于 2011-8-2 21:57:09 | 显示全部楼层
有没有正确的检验过啊?

出0入0汤圆

 楼主| 发表于 2011-8-3 09:10:25 | 显示全部楼层
回复【5楼】yklstudent  无敌电子枪
-----------------------------------------------------------------------

对于你发在PIC板块的延时函数编译不通过的回复,我已经提醒过你;把要封装的函数单独创建一个*.c文件!
下面是对你写的函数库*.h修改成*.c重新编译。
点击此处下载 ourdev_663716O10MKP.rar(文件大小:44K) (原文件名:lib库文件.rar)

出0入0汤圆

发表于 2011-8-3 13:00:54 | 显示全部楼层
回复【9楼】wangqh1983 吴鸣
------------------------------------------------------------------
恩 谢谢你了
总算知道自己错在那里呢

出0入0汤圆

发表于 2011-8-3 14:17:49 | 显示全部楼层
回复【楼主位】wangqh1983 吴鸣
-----------------------------------------------------------------------

谢谢分享

出0入0汤圆

 楼主| 发表于 2011-8-5 23:51:45 | 显示全部楼层

(原文件名:2011-8-5 23-47-57.png)

帖子顶起来!

出0入0汤圆

发表于 2011-9-2 16:36:24 | 显示全部楼层
不错!支持下~

出0入0汤圆

发表于 2011-9-2 21:10:16 | 显示全部楼层
回复【楼主位】wangqh1983 吴鸣
-----------------------------------------------------------------------
谢谢了,收藏了。

出0入0汤圆

发表于 2011-9-3 14:57:14 | 显示全部楼层
延时函数一直是个很纠结的问题,不同的单片机运算速度不同,晶振不同,临时定义也很麻烦,写成头文件还好一点

出0入0汤圆

发表于 2011-9-4 19:26:43 | 显示全部楼层
确实,这就是汇编和c的差异的地方,c来软延时难得算啊,收下了先。

出0入0汤圆

发表于 2011-9-6 01:01:42 | 显示全部楼层
不错。

出0入0汤圆

 楼主| 发表于 2011-9-11 11:05:21 | 显示全部楼层
公布源代码:
<span class=line_num>        =====文件名:User_Delay_Ms.c=====</span>
#include "User_Delay_Ms.h"

void User_Delay_Ms (unsigned short number)//User_Delay = (((num*2+3)*num2+10)*number+number/256+6)/Fcy (12M)
{
    unsigned char    num1,
                                num2;
    do
    {
        num2 = 10;
        do
        {
            num1 = Fcy/20833;
            while(--num1);   
        }while(--num2);
        _nop_();
    }while(--number);
}

点击此处下载 ourdev_675881N701L3.rar(文件大小:13K) (源文件名:User_Delay_Ms.rar)

出0入0汤圆

发表于 2011-9-11 23:01:59 | 显示全部楼层
mark mark

出0入0汤圆

发表于 2011-9-13 18:49:12 | 显示全部楼层
学习ing

出0入0汤圆

 楼主| 发表于 2011-9-14 23:49:25 | 显示全部楼层
自己顶!用类似的方法,看看大家对其他晶振可否达到库文件的精度.

出0入0汤圆

 楼主| 发表于 2012-2-18 12:31:05 | 显示全部楼层
挂起~

出0入0汤圆

发表于 2012-2-18 13:42:14 | 显示全部楼层
mark

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-6-10 05:23

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

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