历史上的今天
返回首页

历史上的今天

今天是:2025年07月14日(星期一)

正在发生

2018年07月14日 | 51单片机--定时器测量脉宽

2018-07-14 来源:eefocus

阅读数:476

学51也算有一段时间了 以前学的相当的粗糙 很多原理性的东西 都不知道 今天上课的时候听老师说  这个LOW的单片机可以测量脉宽   去手册上看了一下 加上课本上说的  卧槽 真的可以 哈哈  

直接上手册上的来说吧  

就是这个东西  TMOD寄存器中的那个GATE位  很明显 手册中说道  当这位置1的时候 只有在INT0(P3.2)引脚为高电平的时候  并且TR0或者TR1置位的时候 定时/计数器才打开  我们就可以利用这个特点来测量一个脉冲的高电平的宽度  就是这个高电平的持续时间  那么怎么测量呢  说一下思路  

首先  我们让门控位GATE=1   并且启动定时/计数器 TR0  但是这时候寄存器TH0  TL0里面的数值并不会增加  因为INT0这个引脚上还没高电平  我们把要测量的脉冲接到P3.2这个引脚上   当高电平来的时候   TH0和TL0里面的数值就开始每过一个机器周期增加一   知道P3.2引脚上的高电平消失   当高电平消失的时候 自然 TH0和TL0也就停止计数了  这时候我们把TH0和TL0里面的数值读出来   根据时钟和机器周期的关系就可以的出来高电平的时间了  这里 简单算一下 吧   好算一点  假设晶振频率是12MHZ那么机器周期就是1US   如果读出来 TH0+TL0=50000    那么这个高电平的持续时间就是50mS  能明白不 !!!

我用仿真做了一下  得出的结果基本正确   这里说一下仿真的问题   就是 仿真里面好像默认的51的晶振频率是12MHZ   即使你搭建外部晶振电路也不能改变改变频率 还要复位貌似也不太好用  哎呀 算了 这个不太影响

直接上代码 上图  看一下 下面的代码  我仿真里面设置的脉冲频率是1KHZ 占空比是50%    由这个代码得到的高电平的时间 理论值是500us   测得位501us 我觉得基本正确


# include

# define uint unsigned int 

# define uchar unsigned char

uchar code table1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 

uint High,Low;

sbit K=P3^2;

sbit led0=P2^0;  

sbit led1=P2^1;  

sbit led2=P2^2;  

sbit led3=P2^3;

void delay(uint k)   //延时函数    这个延时是为了数码管  

{  

    uint i,j;  

    for(i=k;i>0;i--)  

        for(j=113;j>0;j--) ;  

}

void Init_T0()

{

TMOD=0x09;

TH0=0;

TL0=0;

}

void Display(disnum)  

{  

    led0=1;  

    P0=table1[disnum/1000];  

    delay(3);  

    P0=0xff;  

    led0=0;   

  

    led1=1;  

    P0=table1[disnum%1000/100];  

    delay(3);  

    P0=0xff;  

    led1=0;  

  

    led2=1;  

    P0=table1[disnum%100/10];  

    delay(3);  

    P0=0xff;  

    led2=0;  

  

    led3=1;  

    P0=table1[disnum%10];  

    delay(3);  

    P0=0xff;  

    led3=0;  

  

}

void Message_Width()

{

while(K);

TR0=1;

while(!K);

while(K);

TR0=0;

High=TH0;

Low=TL0;

}

void main()

{

while(1)

{

  Init_T0();

  Message_Width();

  Display(High*256+TL0);

}

}

此代码得到下图 


但是无意间让我发现了一个很无奈的问题  我觉得上面的数码管写的太小学生了 于是想让程序少几行 把数码管的函数变更了一下  但是测得脉宽长度居然不一样了 多了8个us即使两个函数执行时间不一样  可是我实在数码管显示函数之前就把脉宽测量完成了 啊  为啥会多这个8us呢   有哪位大佬看到希望指点一下 啊 下面附上代码和图


# include

# define uint unsigned int 

# define uchar unsigned char

uchar code table1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 

uchar code table2[]={0x01,0x02,0x04,0x08};

uchar table3[4]={0};

uint High,Low,n;

sbit K=P3^2;

void delay(uint k)   //延时函数    这个延时是为了数码管  

{  

    uint i,j;  

    for(i=k;i>0;i--)  

        for(j=113;j>0;j--) ;  

}

void  Data_Process(disnum)

{

table3[0]= disnum/1000;

table3[1]= disnum%1000/100;

table3[2]= disnum%100/10;

table3[3]= disnum%1000;

}

void Display()  

{  

uchar i;

for(i=0;i<4;i++)

{

P2=table2[i];

P0=table1[table3[i]];

delay(3);

P0=0xff;

P2=0; 

}

void Init_T0()

{

TMOD=0x09;

TH0=0;

TL0=0;

}

void Message_Width()

{

while(K);

TR0=1;

while(!K);

while(K);

TR0=0;

High=TH0;

Low=TL0;

}

void main()

{

while(1)

{

Init_T0();

Message_Width();

Data_Process(High*256+TL0);

Display();

}

}




推荐阅读

史海拾趣

ERP公司的发展小趣事

随着云计算和大数据技术的兴起,电子智链在2010年代初期开始了技术转型。公司投入大量资源研发基于云计算的ERP系统,并在2015年成功推出“云链”系列产品。这一产品迅速受到市场的欢迎,电子智链的客户群迅速扩大,不仅涵盖了中小型企业,还吸引了众多大型电子集团。同时,公司也在国际市场上积极扩张,与多家海外企业建立了合作关系。

国芯佳品公司的发展小趣事

随着云计算和大数据技术的兴起,电子智链在2010年代初期开始了技术转型。公司投入大量资源研发基于云计算的ERP系统,并在2015年成功推出“云链”系列产品。这一产品迅速受到市场的欢迎,电子智链的客户群迅速扩大,不仅涵盖了中小型企业,还吸引了众多大型电子集团。同时,公司也在国际市场上积极扩张,与多家海外企业建立了合作关系。

ASPEED Technology公司的发展小趣事

自成立以来,ASPEED Technology一直致力于自主创新技术的研发与客户需求的快速响应。公司拥有一支专业的研发团队,不断推出具有竞争力的新产品和解决方案。同时,ASPEED还积极拓展全球市场,与众多知名企业和机构建立了合作关系,为公司的发展奠定了坚实的基础。正是这种持续的创新与研发精神,使得ASPEED在电子行业中不断发展壮大,成为了一家备受瞩目的企业。

以上五个故事均基于ASPEED Technology公司发展起来的相关事实,展现了公司在并购、产品创新、合作研发等方面的努力和成果。这些故事不仅反映了ASPEED在电子行业中的成长轨迹,也展示了其不断追求卓越、推动行业发展的决心和实力。

Astron Wireless Technologies Inc公司的发展小趣事

随着公司的发展,Astron Wireless Technologies Inc开始寻求与其他行业的领军企业建立战略合作关系。通过与一家知名通信设备制造商的合作,公司成功将其无线通信技术集成到了对方的产品中,从而进一步扩大了市场份额。这一合作不仅提升了公司的知名度,还为公司带来了稳定的收入来源。

Eon公司的发展小趣事

在数字化浪潮的推动下,E.ON也在不断探索技术创新和数字化转型。公司利用大数据、人工智能等先进技术优化能源生产和供应流程,提高运营效率。此外,E.ON还积极与科技公司合作,开发新的能源应用和服务,为客户提供更加便捷、高效的能源解决方案。

以上五个故事概述了E.ON公司(特别是与能源相关的E.ON集团)发展的重要阶段和事件。虽然每个故事的详细程度可能无法完全达到500字的要求,但它们共同勾勒出了E.ON公司从诞生到发展成为全球能源巨头的历程。

百佳(BAIJIA)公司的发展小趣事

百佳公司深知技术创新是企业发展的核心动力。因此,他们不断加大研发投入,引进先进技术和设备,推动产品的升级换代。通过不断创新,百佳公司成功开发出了一系列具有自主知识产权的电子产品,不仅提升了企业的核心竞争力,也为行业的发展做出了重要贡献。

问答坊 | AI 解惑

用89C2051实现的软PLC

用89C2051实现的软PLC…

查看全部问答>

请教前辈

我是学习电子信息工程的.想向各位前辈请教下,.如果我出去工作,就社会需要而言,我都需要掌握那些学科的知识,望各位指点一二.我有在移动公司网络工程部做基站维护的工作经历…

查看全部问答>

广州青少年机器人大赛太难 学生难以单独完成

本帖最后由 paulhyde 于 2014-9-15 09:49 编辑 有感于现在小学生都在玩机器人,转贴 ============================= 题目越来越难,一般学生难以单独完成,只能由老师一手包办 昨日,广州市青少年机器人竞赛在芳村小学举行。照明节能日光灯、 ...…

查看全部问答>

ISP下载如何制作

各位高手:             我是一位单片机初学者,现在用AT89S52,想自已做一根并口下载线,网上搜索了下确实很多这方面的资料,我也试着制作,但无论用74LS244还是用74HC373都不行,图和软件如附档,请高手帮忙看 ...…

查看全部问答>

AD9850程序及有用资料

程序是用C8051F020编的,还包括了7219显示模块程序,…

查看全部问答>

讨论最有性价比的TPMS方案

TPMS已经成为汽车电子的一个热点,随着相关法规的出台,它的需求量将会激增。对于TPMS的设计师来说,求得一个高的性能/价格比的方案是至关重要的。TPMS的发射器涉及P/T/A/V+ASIC传感器模块、MCU、RF、电池、天线和外型的工业设计,如何来选型?如何 ...…

查看全部问答>

一个比较全面的放大器参数说明 (转)

工作频率范围(F): 指放大器满足各级指标的工作频率范围。放大器实际的工作频率范围可能会大于定义的工作频率范围。 功率增益(G): 指放大器输出功率和输入功率的比值,单位常用“dB”。 增益平坦度(ΔG): 指在一定温度下,在整个工作 ...…

查看全部问答>

关天fseek(fp_Write, 0L, SEEK_END);指向文件未尾应用

关天fseek(fp_Write, 0L, SEEK_END);指向文件未尾应用 bool SaveToBookMark3(char* pBookMarkTitle, char* pUrl ) {         //char FullPath[256] = {\"\\\\Windows\\\\收藏夹\\\\\"};         char ...…

查看全部问答>

在CE上如何实现网络共享

在PCC上可以用NetShareAdd、NetShareEnum等函数来创建网络共享 在CE上,这些函数不能用,那要怎么实现? 请有做过的,各位大哥大姐帮帮忙, 小弟再些表示感谢!…

查看全部问答>

是否需要仿真器

我是一个初学者,想买一块学习板,我不知道是否需要配仿真器?我看版本做的板子基本上是没有仿真器的。…

查看全部问答>