如何编程实现51单片机每隔 t 时间发出一个脉冲?求C语言详细编程。。。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何编程实现51单片机每隔 t 时间发出一个脉冲?求C语言详细编程。。。相关的知识,希望对你有一定的参考价值。
给你个基本框架,根据你的具体要求再修改吧。使用定时1中断实现,精度比较高。#include <reg52.h>
#define PERIODH (65536l-10000l)/0X100 //设10ms中断1次TH1初值
#define PERIODL (65536l-10000l)%0X100 //设10ms中断1次TL1初值
sbit P1_1 = 0x91; //假设从P1.1输出脉冲
unsigned int iCount; //延时间隔时间变量
unsigned int iPulseCount; //脉冲脉宽时间变量
void timer1() interrupt 3 using 1
//定时器每0.01秒一次中断
TH1 = PERIODH;
TL1 = PERIODL;
if(iCount)
//计数未到0,计数器-1
iCount--;
if(iPulseCount)
//计数未到0,计数器-1
iPulseCount--;
main()
TMOD = 0X10;//方式1
EA = 1;//总中断允许
ET1 = 1;//定时器1中断允许
TR1 = 1;//启动定时器1
P1_1 = 0; //脉冲输出端口,假设输出正脉冲,预置为低电平
while(1)
iCount = 200;//每间隔200*10ms = 2秒一个脉冲,t值变化改此处
while(iCount);//等待2秒中
P1_1 = 1; //置为高电平,输出正脉冲
iPulseCount = 10;//每间隔10*10ms = 100ms一个脉冲,脉宽变化改此处
while(iPulseCount);//高电平保持100ms
P1_1 = 0; //置为低电平,输出正脉冲结束
参考技术A 100K的方波对51来说要求太高了,尽量不要用,这个程序如果频率不对,对
“TH0=0XF6;//初始值246”这句里的0xf6调整下,向上增加数值会提高精度。
/**************************
MCU:S52
crystal:24M
****************************/
#include<reg52.h>
sbit output=P1^0;//P1.0脚输出100K
void timer0_init()
TMOD=0X02;//定时器0方式2
TH0=0XF6;//初始值246
ET0=1;//开中断
EA=1;//开总中断
TR0=1;//开定时器0
void main()
timer0_init();
while(1);
void timer_isvof()interrupt 1
output=!output;//中断翻转
另外,虚机团上产品团购,超级便宜
关于使用STM32单片机完成脉冲计数功能的问题
如题,想需要使用STM32单片机完成脉冲计数功能,被计数的脉冲是每隔50ms左右发送一组脉冲群,我需要记录这组脉冲群的频率和脉宽,脉冲群计数结束后隔50ms左右后再重新对下一组脉冲群进行计数。最好有个例程供参考,谢谢!
interrupt 外部中断ISR()定时器打开
T++;
interrupt 定时器中断()
关定时器;
time = 读取定时器值;
定时器初始化归零;
time 就是脉冲宽度;T就是脉冲数
具体实现就将我的汉字版翻译成你的C就行 参考技术A 用定时器计数,用中断就好,例程里有自己参考一下就好了。
以上是关于如何编程实现51单片机每隔 t 时间发出一个脉冲?求C语言详细编程。。。的主要内容,如果未能解决你的问题,请参考以下文章