STC12延时函数的探究

发布者:心灵之舞最新更新时间:2015-02-09 来源: 51hei关键字:STC12  延时函数 手机看文章 扫描二维码
随时随地手机看文章

这种写法是C中嵌套了汇编。精确延时时间=2*t*T+5*T,T为一个机器周期。对于8051,



如果t=1,那么这个函数执行应该是7us。如果是STC12,那么这个延时函数的延时应该是:若t=1,精确延时=2*1*1/12+5*1/12=(7/12)us啊。
昨天也查了STC12手册 手册上对时钟写的很笼统,其中一句话是:与8051指令执行时间对比,一共有12个指令,一个时钟就可以执行完成,工作在相同频率下运行速度提高8~12倍
难道这里应该是(7/8)us?而不是(7/12)us?
这个是uint型函数时间是近似的
那么可以用延时时间=8*t*T
应该是8*1*(1/12)=8/12
根据程序分析猜想t=1时这个延时函数应该为1us最为合理。
用示波器测试过 执行一个delay(5000)大约5.8ms。51执行一个delay(5000)大约40064us
嗯,用示波器测得那个IO口的频率变化为85.47HZ,那么一个delay(5000)就是(1/85.47)/2*1000=5850us
这里的t设的uint型,有误差,加上 LED=1;LED=0;执行也会消耗时间 结果存在误差 。
最后总结得出这条延时语句在51上执行一次大约花7us,在12上花1us。示波器测试通过!和我计算符合。

关键字:STC12  延时函数 引用地址:STC12延时函数的探究

上一篇:松翰单片机c语言的中断处理问题
下一篇:外部中断(IT0,IT1)触发方式

推荐阅读最新更新时间:2024-03-16 13:53

stm8s 定时器1 延时_STM8S_库函数_定时器自动装载TIM1
这里说下使用库函数方式控制STM8S103F3P6片上的定时器1,也就是TIM1,这是个高级定时器。 首先,咱们看一下STM8S103F3P6上有几个定时器,打开数据手册,可以看到如下内容: 可以看到,咱们使用的单片机,有三个定时器:TIM1、TIM2、TIM4。而TIM1是一个高级控制定时器。具体有多高级,咱们看下介绍。由于内容比较多,我这里直接放数据手册里的截图: 可以看到,TIM1的功能是非常丰富的,从基本的定时、自动装载、PWM输出、输入捕获、输出比较、单脉冲输出到各种事件的中断,都有相应的功能。 稍后的几节内容,会依次展示三个例程: 1、自动装载计时 2、测量输入信号的脉冲宽度 3、输出PW
[单片机]
stm8s 定时器1 <font color='red'>延时</font>_STM8S_库<font color='red'>函数</font>_定时器自动装载TIM1
STM32F10x 使用SysTick的延时函数
整个工程下载: http://www.rayfile.com/files/66369fee-d80c-11df-ac1d-0015c55db73d/ 关键代码: UART.h: /******** 串口收发 环形缓冲区实现 ******** * 版本.........: 1.0 * 作者.........: 陈利栋 * 目标.........: ATmega128 * 文件名.......: UART.h * 编译器.......: IAR for AVR V5.5 * 创建时间.....: 2010.10.15 * 最后修改.....: 2010.10.15 ***************************
[单片机]
STC12C5A60S2的PCA模块输出PWM波
PCA是一个模块,是一个硬件结构,具体的如下图所示 16位PCA定时器/计数器相当于定时器0/1。每经过一个时钟周期会自动加1,时钟周期来源与下图几部分: 一个时钟周期可能为(SYSclk/1,SYSclk/2...),最后一个外部输入指的是给他外接的晶振源。 模块0/1是十六位的捕获/比较模块。这个模块的工作方式有四种: 1、上升/下降沿捕获 2、软件定时器 3、高速脉冲输出 4、克调制脉冲输出 至于要在哪一个模式下工作,可以通过配置寄存器来进行完成 在手册中有一个配置表格,我们按自己的要求来进行选择即可。例如我们选择 8位PWM,无中断模式 这是最简单的模式,去掉那些烦人的中断,对了虽然PC
[单片机]
<font color='red'>STC12</font>C5A60S2的PCA模块输出PWM波
单片机中C语言延时函数
单片机C语言延时程序计算2009-11-02 22:15单片机C语言延时程序用C语言写出来程序非常的简练,它是一种模块化的语言,一种比汇编更高级的语言,但是就是这样一种语言也还是有它不足之处:它的延时很不好控制,我们常常很难知道一段延时程序它的精确延时到底是多少,这和汇编延时程序没法比。但有时后写程序又不得不要用到比较精确的延时,虽然说可以用混合编程的方式解决,但这种方式不是每个人都能掌握,且写起来也麻烦。所以,通过测试我给大家提供一个延时子程序模块,并以此给一个出我们经常用到的延时的数据表格。(注意:表格中的数据只适合我的延时模块,对其他的延时程序不适用,切忌!!!!!!!!别到时候延时不对来骂我) 延时模块:其中问号代
[单片机]
STC12C5A60S2_PWM
#include reg52.h #include intrin.h #define uint unsigned int #define uchar unsigned char sfr CCON = 0XD8; sbit CCFO = CCON^0; sbit CCF1 = CCON^1; sbit CR = CCON^6; sbit CF = CCON^7; sfr CMOD = 0XD9; sfr CL = 0XE9; sfr CH = 0XF9; sfr CCAPM0 = 0XDA; sfr CCAP0L = 0XEA; sfr CCAP0H = 0XFA; sfr CCAMP1 = 0XDB; sfr CCAP1L
[单片机]
MSP430F5438内部延时函数的用法
今天看示例程序中出现了__delay_cycles()这个函数,在查找msp430x54x.h这个头文件的时候,发现这个头文件中没有该函数的声明,原来这个函数已经在IAR这个编译器中集成,这里总结一下__delay_cycles();这个函数的具体用法 第一步,复制代码: #define CPU_F ((double)8000000) #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((lo
[单片机]
基于STC12C5A60S的直流电子负载的设计方案
1.方案设计与论证 1.1 整体方案设计 基于手动调节单片机控制的直流电子负载。     本方案通过两个自锁开关来控制电路的工作状态,在恒压、横流、恒阻之间进行切换,通过stc12c5a60s单片机通过D/A芯片控制恒压、恒流等的值,stc12c5a60s是高速、低功耗、超强抗干扰的新一代8051单片机,指令代码完全兼容传统的8051,但速度快8-12倍,8路高速10位A/D转换。采用大功率NMOS管IRF540,该管导通电阻足够小,源漏抗击穿能力足够强。软硬件结的方式,方便简洁实现了不同模块之间的转换,很好的完成了恒压、恒流等基本功能,并完成了恒阻等附加功能。 由单片机采集电压、电流值,检测电路过载控制继电器工作,实现电路的过
[电源管理]
基于<font color='red'>STC12</font>C5A60S的直流电子负载的设计方案
编写延时函数的简单方法
如果从keil里看了c语言的反汇编代码然后根据晶振和指令计算延时的时间这样虽然非常的准确但是相当的麻烦而且容易搞错,我这里介绍一个最简单的方法.可以验证你的延时函数 这里用一个例程详细介绍一下。 过程参考如下: 在编译器下建立一个新项目,也可以利用已有项目。此过程中需要注意,单片机晶振的选择,因为for循环里指令的执行时间和晶振有直接关系,本例中晶振使用11.0592M。 编写一段关于延时的函数,主要利用for循环,代码如下: void delay_ms(unsigned int ms) { unsigned int i; unsigned char j; for(i=0;i { for(j=0;j 200;
[单片机]
编写<font color='red'>延时</font><font color='red'>函数</font>的简单方法
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved