单片机脉冲怎么写

1. 如何用单片机记脉冲数 1、用单片机产生200ms,占空比为50%的周期信号,即高低电平各100ms;
2、将该200ms信号接到INT0或INT1上,将外部脉冲信号接到T0或T1上,注意要对应接,即INT0与TO一起用或INT1和T1一起用 。
3、设置定时器/计数器工作方式控制寄存器TMOD的GATE = 1(门控方式) ,C/T = 1 (计数方式) 。
这样,就可以用100ms作为一个控制门,在这个门有效(相应外部中断)时,外部计数脉冲就可以进入这个门,定时器/计数器计数初值设为加1就溢出,中断服务程序中计数就可以了 。
2. 向51单片机里写发出脉冲信号的c程序怎么编啊【单片机脉冲怎么写】 //用ADC0808控制PWM输出
//通过可变电阻调节脉冲宽度
#include
#define uchar unsigned char
#define uint unsigned int
sbit CLK =P2^4;
sbit ST=P2^5;
sbit EOC=P2^6;
sbit OE=P2^7;
sbit PWM=P3^0;
//延时
void Delay(uchar x)
{
uchar i;
while(x--)
for(i=0;i
3. 单片机C编程:计算脉冲数为何这么写 程序不全,但我推测程序原理大致是这样的,2个定时器,1个计内部脉冲是定时器,一个计外部脉冲,是计数器,定时器每中断一次将 int_flag=1
主程序里将其清0,并且读计数器当前的值(读之前程序里应加TR0=0),加上中断次数所代表计数值即为总计数值(由于计数器中断一次是65536个脉冲,所以有T0Count*65536),然后分离出 个 十 百 千 万 十万等即可,程序里只分离出 个 十 百 千 是不对的,是舍大取小,如果数码管不够,可只显示高位部分,除非计数器所测脉冲频率很低,那时计数器不会溢出T0Count=0,但 sum值也有可能上万
4. 51单片机测周C程序怎么写,计算两个脉冲之间的时间,程序怎么写 转速?那你参考下我的这个程序吧 参看你卡盘的精度怎么样了 。
仅供参考#include"reg52.h"#include"intrins.h"#define uchar unsigned char#define uint unsigned int#define BIT(x) (1 << (x)) //定义位操作 uchar code SMG[10]={0X3F,/*0*/ //数码管字符表 0X06,/*1*/ 0X5B,/*2*/ 0X4F,/*3*/ 0X66,/*4*/ 0X6D,/*5*/ 0X7D,/*6*/ 0X07,/*7*/ 0X7F,/*8*/ 0X6F,/*9*/};// 显示段码值0123456789 sbit dula=P2^6; //数码管段先端 sbit wela=P2^7; //数码管位先端 unsigned int v; //储存电机转速 unsigned char count,num,num1,time[3]; //储存定时器T0中断次数 bit flag; //计满1秒钟标志位 void delayms(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void Display(uint x) //显示正常状态 { uint dx[4]; unsigned char i,j,k,l; //j,k,l分别储存温度的百位、十位和个位 i=x/1000; //取千位 x/1000 j=(x%1000)/100; //取百位 x/100%10 k=(x%100)/10; //取十位 x/10%10 l=x%10; //取个位 x%10 time[0]=i; time[1]=j; time[2]=k; time[3]=l; for(i=0;i<4;i++) dx[i]=SMG[time[i]]; P0=dx[0]; P2|=BIT(6); //开段选 P2&=~BIT(6); P2|=BIT(7); //开位选 P0=0XFE; //1111 1110 P2&=~BIT(7); delayms(5); P0=dx[1]; P2|=BIT(6); //开段选 P2&=~BIT(6); P2|=BIT(7); //开位选 P0=0XFD; //1111 1101 P2&=~BIT(7); delayms(5); P0=dx[2]; P2|=BIT(6); //开段选 P2&=~BIT(6); P2|=BIT(7); //开位选 P0=0XFB; //1111 1011 P2&=~BIT(7); delayms(5); P0=dx[3]; P2|=BIT(6); //开段选 P2&=~BIT(6); P2|=BIT(7); //开位选 P0=0XF7; //1111 0111 P2&=~BIT(7); delayms(5); } void main(void) { TMOD=0x61; //计数器T1工作于计数模式1 0101,定时器T0工作于计时模式1; 0001 TH0=(65536-46083)/256; //定时器T0的高8位设置初值,每50ms产生一次中断 TL0=(65536-46083)%256; //定时器T0的低8位设置初值,每50ms产生一次中断 TH1=0; TL1=0; ET0=1; //定时器T0中断允许 ET1=1; //计数器T1中断允许 TR0=1; //启动定时器T0 EA=1; //开总中断 count=0; //将T0中断次数初始化为0 while(1) //无限循环 { Display(v); //显示速度 } }/******************************************************* 函数功能:定时器T0的中断服务函数********************************************************/ void Time0(void ) interrupt 1 using 1 //定时器T0的中断编号为1,使用第1组工作寄存器 { TH0=(65536-46083)/256; //定时器T0高8位重新赋初值 TL0=(65536-46083)%256; //定时器T0低8位重新赋初值 count++; TR1=1; //T0每中断1次,count加1 if(count==20) //若累计满20次,即计满1秒钟 { // flag=1; //计满1秒钟标志位置1 count=0; //清0,重新统计中断次数 TR1=0; num1=TL1; v=((TH1*256)+TL1); // n=60f/Z TH1=0; TL1=0; P1=~P1; } } void Time1(void) interrupt 3 { ; } 。