本文目录一览

1,汇编语言怎么精确算延时由于初学51请拿一个简单的程序详细说明

可见:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/37d8c6fb9b91e1849f51462f.html
用stc系列带ad转换的单片机(例如stc12c5410ad)在p1.0接上电位器,经ad转换得到控制值,再用定时中断产生基准信号,由控制值修改计数值达到调整时间的目的。 例如0电压对应20秒,5v电压对应80秒。

汇编语言怎么精确算延时由于初学51请拿一个简单的程序详细说明

2,如何用汇编语言写出可调频率程序

500、510、520、530...单片机输出脉冲的频率,不是很理想的值。往往都是很琐碎的值。
频率用定时器调节(改变计数器初值和中断等待次数即可);占空比的话,可用中断次数分配实现,如果是类似于二分之一,四分之一等简单的,也可直接用查表实现,更加方便。举个例子,led灯点亮占空比为25%,频率为10hz那么,周期为100ms,可将计数器定时为25ms,设一计次的变量,从1计到4,前三次为暗,后一次为亮,即实现 。用此方法,也可以实现占空比的“嵌套”,即在点亮状态也可以加入一定的占空比,因频率高,肉眼无法看出,看到的只是亮度变暗,这在电池的节能应用上相当有用。

如何用汇编语言写出可调频率程序

3,汇编延迟代码

这要看你的CPU的主频了,计算执行周期,一般nop指令就一个时钟周期,你可以据此估算一下1秒钟要执行多少次nop指令 设置一个循环就可以了。
指令周期:CPU执行一条指令所需要的时间称为指令周期,它是以机器周期为单位的,指令不同,所需的机器周期也不同。时钟周期:也称为振荡周期,一个时钟周期 = 晶振的倒数。MCS-51单片机的一个机器周期 = 6个状态周期 = 12个时钟周期。MCS-51单片机的指令有单字节、双字节和三字节的,它们的指令周期不尽相同,一个单周期指令包含一个机器周期,即12个时钟周期,所以一条单周期指令被执行所占时间为12*(1/12000000) = 1μs。 例子:晶振12M主频时,单周期指令时间是1us50ms 延时子程序:FOR: MOV R7, #200FOR1: MOV R6, #125DJNZ R6, $DJNZ R7,FOR1RET精确延时时间为:1 +(1*200)+(2*125*200)+(2*200)+2 = 50603μs ≈ 50ms子程序共有五条指令,现在分别就 每一条指令 被执行的次数和所耗时间进行分析。  第一句:MOV R7, #200 在整个子程序中只被执行一次,且为单周期指令,所以耗时1μs  第二句:MOV R6, #125 循环执行了R7次,共耗时200μs  第三句:DJNZ R6, $ 只要R6-1不为0,就反复执行此句(内循环R6次),又受外循环R7控制,所以共执行R6*R7次,因是双周期指令,所以耗时 2*R6*R7 μs。 1秒延时子程序:FOR0: MOV R7, #10FOR1: MOV R6, #200FOR2: MOV R5, #248DJNZ R5, $DJNZ R6,FOR2DJNZ R7,FOR1RET对每条指令进行计算得出精确延时时间为:1 + (1*10) + (1*200*10) + (2*248*200*10) + (2*200*10) + (2*10) +2 = 998033μs ≈ 1s以此类推,控制好循环次数即可实现延时。
不用空等待吧。一秒是很长的时间了。可以设立计数器,然后在时钟中断中累加,达到1秒后就执行动作。那些nop之类的也就是延迟极短时间采用的。

汇编延迟代码


文章TAG:汇编程序如何改变计数快慢  汇编语言怎么精确算延时由于初学51请拿一个简单的程序详细说明  
下一篇