{
long int l1=0x00
long int h1=0x00
float tt=0 //tt用于计算频率
TMOD=(TMOD&0x0F)|0x90 //定时器1工作于模式1(16位计数器),TR1控制运行
TH1=0x00 //计数器初值设为0x0000
TL1=0x00
ET1=1 //timer1 使能
EA=1 //开中断
while(fw==1) 测得引脚P3^5为高电平
TR1=1 //timer1 开始计数注:1
while(fw==0) 测得引脚P3^5为低电平
while(fw==1) 测得引脚P3^5为高电平
TR1=0 //timer1 停止计数
l1=TL1 //读当前计数值
h1=TH1
uu=h1*256+l1+inte*65536 //计算总计数值 这里写成 uu=inte*65536+h1*256+l1 会比较直观一些 注:1
inte=0 //清累计溢出计数
tt=uu/(11.0592*1000000.0/12.0) 求振荡周期
ff=(unsigned long int)(1.0/tt)//频率值 求震荡频率
}
注1:另外还有一个timer1的中断函数你没给出来。该中断函数功能就是当timer的计数值超过0xffff的时候触发中断,在中断内部将对全局变量inte 进行加一 *** 作,以记录timer1的溢出次数,实际也可以理解为16位计数器溢出后的进位,相当于第17位到32位的计数值。
起目的是当被测频率值很低的时候,16位的计数值不足以存放待测频率值的周期,所以需要额外的计数值。
把定时器设置成50ms一次定时中断,作为时间基准,在定时中断里再每次对一个变量计数加加得到想要的0.5秒和2秒时间基准 define uint unsigned int //定义无符号整数 void delay(uint)//声明延时函数 void main(void){ uint iuchar tempwhile(1){ temp=0xFEfor(i=0i<8i++) //8个流水灯依次全部点亮 { P1=tempdelay(500...用定时器实现流水灯从左到右双位循环,跳动频率为1秒。程序怎么编啊... —— 用定时器实现流水灯,跳动频率为1秒。用定时器定时50ms,采用中断方式,对定时中断计数,计数20次就是1秒。如下仿真图,P1口接8个LED灯。
有关于单片机的一段程序,是用定时器做流水灯的 —— 要用定时器 就得用定时器中断。。至于全亮的原因 是因为 delay1s 没有起到延时1s的作用 二十极其短的延时 导致流水灯太快 给人感觉是全亮的。。你可以改成 long a while(a<500000)(值大小自己调试)...
如何用定时器中断实现流水灯1秒定时流水? —— 可以中断50ms一次(不一定非要50ms),每次中断计数一次,等计数时间到1s,就执行一次流水动作
求助,用定时器控制流水灯循环 —— 将定时器中断时间设置为一秒一次。声明一个全局的变量temp 在初始化的时候赋初值,在中断服务函数中
用定时器控制16路流水灯循环单片机,且定时时间可调,谢谢! —— interrupt1{uchari//循环变量//重装定时器初值,50ms中断一次p++if(p>=20)//一秒钟改变一次状态{for(i=0i<8i++){P1=temptemp<<=1//左移一位,流水灯}p=0}}呵呵,这就是简单的后台任务处理思想 ...
51单片机定时器实现流水灯,并用按键外部中断控制改变流水灯的流向,这个... —— EA=1;//开总中断 EX0=1;//开外部中断0 IT0=1;//下降沿触发 while(1){ if(flag==0){ for(i=0i<8i++){ P0=0X01<<idelayms(500)} } if(flag==1){ for(i=0i<8i++){ P0=0X80...
51单片机用定时器,怎么编程流水灯一秒闪烁一次, —— 先写一个延时子函数delay,延时时间1秒。然后写LED=0;delay(1);LED=1;这样就可以做到一亮一灭,再把这段程序加入到循环中就可以,循环函数很简单不用再说了吧,如果还不懂回复我给你程序 ...
plc怎么用计时器做3个流水灯程序 —— 计数器,定时器……用计数器,就数值1点亮一个,2点亮一个,3点亮一个,加完复位,加个循环;定时器,定时一秒,二秒,三秒,每个对应一个灯,加个循环
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)