微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机测脉宽

51单片机测脉宽

时间:10-02 整理:3721RD 点击:
最近做了一个51单片机测试脉宽的例子,但是发现只能测试f=20以上的脉宽,而f=0.1-10发现测试不了,求帮助。



#include<reg51.h>
sbit in=P3^2;
sbit RS=P2^6;
sbit RW=P2^5;
sbit E=P2^7;
char x[6];
int js,cc=0;
void delay(int);
void zh();
void display();
void init();
void wr_inst(char);
void wr_char(char);
void main()
{
TMOD=0x09;
TH0=0;
TL0=0;
EA=1;
TR0=0;

while(in);
while(in==0);
TR0=1;
while(in);
TR0=0;
js=cc*65536+TH0*256+TL0;
P1=cc;
zh();
display();
}
void time0() interrupt 1
{
    cc++;
        
}
void zh()
{ x[0]=js/100000+0x30;
  x[1]=js%100000/10000+0x30;
  x[2]=js%100000%10000/1000+0x30;
  x[3]=js%100000%10000%1000/100+0x30;
  x[4]=js%100000%10000%1000%100/10+0x30;
  x[5]=js%10+0x30;
}
void display()
{ char k;
  init();
  wr_inst(0x80);
  for(k=0;k<6;k++)
  { wr_char(x[k]);}
}
void init()
{ wr_inst(0x30);
  wr_inst(0x30);
  wr_inst(0x30);
  wr_inst(0x38);
  wr_inst(0x08);
  wr_inst(0x01);
  wr_inst(0x06);
  wr_inst(0x0c);
}
void wr_inst(char inst)
{ P0=inst;
  RS=0;RW=0;E=1;delay(2);E=0;
}
void wr_char(char chardata)
{ P0=chardata;
  RS=1;RW=0;E=1;delay(2);E=0;
}  
void delay(int x)
{int i,j;
for(i=0;i<x;i++)
    for(j=0;j<120;j++);
}

正确


用中断触发,然后开计数器 可以精确到几us级别

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top