标题:
单片机延时问题 用定时器代替
[打印本页]
作者:
不将就123
时间:
2021-10-23 21:29
标题:
单片机延时问题 用定时器代替
举例
for(i = 0; i<10; i++)
{
PCA_PIN_LV_UPDETE(10); //更新频率函数
Delay100ms(); //延时函数
PCA_PIN_LV_UPDETE(50); //更新频率函数
Delay100ms(); //延时函数
}
就上面这样的效果 我想让这两个函数定时器执行 用定时器可以实现吗 可否知道一下 谢谢 ;
我的定时器中断函数里面就一个变量在 自己++ 名称是 count++;
作者:
188610329
时间:
2021-10-23 23:12
没太看明白,那个for什么意思?
我就瞎猜吧,定时器定时2ms一般都能做到吧?然后中断这样写:
void T0_INT() interrupt 1
{
if(++count == 50) // 全局 Uchar 变量 50次等于100ms
{
count = 0;
if(PCA10)
{
PCA10 = 0; //全局 bit标志
PCA_PIN_LV_UPDETE(10); //更新频率函数
}
else
{
PCA10 = 1;
PCA_PIN_LV_UPDETE(50); //更新频率函数
}
}
}
作者:
npn
时间:
2021-10-23 23:20
定时器中断延时,你可以这样写:
#include "reg51.h"
unsigned int delay_ms;
bit delay;
sbit LED = P3 ^ 2;
void InitTimer0(){
TMOD = 0x01;
TH0 = 0xFC;
TL0 = 0x18;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void main(){
InitTimer0();
while (1) {
delay_ms = 500;
delay = 1;
while (delay);
LED = !LED;
}
}
void Timer0Interrupt() interrupt 1 { //12Mhz 1mS定时器中断
TH0 = 0xFC;
TL0 = 0x18;
if (delay && !--delay_ms) {
delay = 0;
}
}
复制代码
作者:
188610329
时间:
2021-10-23 23:23
还是把 for 10 给忘了……
void T0_INT() interrupt 1
{
if(countA != 0) //全局变量, 代替你for 循环里的次数,主程序里 countA = 10 就跑10次
{
if(++count == 50) // 全局 Uchar 变量 50次等于100ms
{
count = 0;
if(!PCA50)
{
PCA50 = 1; //全局 bit标志
PCA_PIN_LV_UPDETE(10); //更新频率函数
}
else
{
PCA50 = 0;
PCA_PIN_LV_UPDETE(50); //更新频率函数
CountA--;
}
}
}
}
作者:
不将就123
时间:
2021-10-25 18:40
非常感谢大家 已经弄好了 谢谢 哈哈哈 我要是描述的意思就是 用定时器写一个可以随时调用的延时函数
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1