我应该编写一个程序,将一些值发送到寄存器,然后等待一秒,然后更改值。问题是,我无法找到停止操作一秒钟的指令。
答案 0 :(得分:10)
如何设置定时器中断?
this Keil 8051应用说明中的一些有用的提示和代码段。
答案 1 :(得分:4)
我会设置一个计时器,使其每10ms中断一次。在该中断中,增加一个变量。
您还需要编写一个函数来禁用中断并读取该变量。
在你的主程序中,你将读取计时器变量,然后等到 10 比你开始时多100次。
不要忘记注意定时器变量的滚动。
答案 2 :(得分:3)
没有这样的“指示”。毫无疑问,至少有一个硬件定时器外设(确切的外设集取决于您使用的确切部分)。获取您正在使用的部件的数据表/用户手册,并找出如何编程定时器;然后你可以轮询它或使用中断。通常,您将配置定时器以生成周期性中断,然后递增计数器变量。
关于定时器中断你必须知道的两件事:首先,如果你的计数器变量大于8位,那么对它的访问将不是原子的,因此在中断上下文之外你必须暂时禁止中断来读取它,或者连续两次使用相同的值读取它以验证它。其次,必须将计时器计数器变量声明为volatile
,以防止编译器优化对它的访问;中断和线程之间共享的所有变量都是如此。
另一种选择是使用低功耗“睡眠”模式(如果支持);你设置一个定时器,在所需的时间段后唤醒处理器,并发出必要的睡眠指令(这可能是你的编译器提供的'内在',或者你可能是由外设寄存器控制的。这是一般的建议,不是8051具体;我不知道你的部分是否支持睡眠模式。
无论哪种方式,您都需要浏览特定于零件的文档。如果你能告诉我们确切的部分,你可能会得到帮助。
第三种解决方案是使用8051特定的RTOS内核,它将提供您正在寻找的周期性延迟功能,以及多线程和IPC。