如何用C语言对单片机进行精确延时

来源:百度知道 编辑:UC知道 时间:2024/09/22 15:45:01
KeilC51中,如何精确的计算时间,比如每条指令的指令周期,循环所用的时间等等,我是初学单片机,希望有高手们指点(说的具体点),谢谢了,有加分

用 定时器/计数器 实现, 给定时器 寄存器设个初值, 选个工作方式,

时间一到 溢出 产生中断, 在中断 子程序中 调用串口 可以输出延时的时间.

至于初值 设为多少, 那就要看你到底定时多少了.

12M晶震 的机器周期 是 1us
自己算酸

分单字节单周期指令, 双字节单周期指令, 单字节双周期指令.

单片机在执行 指令时 首先要取指令和执行指令2步.

单周期指令的执行时间 为一个机器周期.
比如:
如果想要知道 for(;;)这个循怀 到底用了多长时间来执行. 那么你可以 查编译器 这条语句所对应的 操作码和操作数. 然后再区分其到底是什么类型的指令.最后把时间加加 就可以了 .

首先你要先知道每个指令的周期,然后基本就是加法运算了,如果遇到循环就乘。

主要依靠晶振

用定时器!
设定定时器的初值 设变量C为0 开启定时器中断
定时器中断程序里 置变量C为1

在需要延时的时候 启动定时器
然后用WHILE(!c);等待定时器触发中断后跳出WHILE。

这就可以实现精确延时了 如果需要延时很长 可以在定时器中断程序里 循环调用演示程序

比如延时1分钟 每次定时器触发的时间是1秒 那么 在定时器中断程序里计数 每触发1次 NUM++
如果NUM++ = 60 C=1