历史上的今天
返回首页

历史上的今天

今天是:2024年09月03日(星期二)

正在发生

2020年09月03日 | 单片机INT0外部中断脉冲计数

2020-09-03 来源:51hei

主要是用单片机 INT0 的中断进行脉冲计数
脉冲是由Clock元器件产生。
INT0外部中断输入脉冲。

设置举例,设置高低高时钟,频率为10,则设置第一个边沿出现时间为1.1。
INT0是低电平触发,设置出现时间为1.1刚好每秒增加数为10,并且每次都是10的倍数。

开关型霍尔元器件刚好是低电平,可以直接使用。

仿真原理图如下

单片机源程序如下:

// 脉冲计数

// INT0中断计数

#include


sbit P2_0 = P2^0;//数码管选定位

sbit P2_1 = P2^1;//数码管选定位

sbit P2_2 = P2^2;//数码管选定位

sbit P2_3 = P2^3;//数码管选定位


//共阳极数码管

unsigned char code table[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e};


unsigned int motorspeed = 0;

unsigned char GE, SHI, BAI, QIAN;

unsigned int counter = 0;//脉冲数

unsigned int calsp;//设定多长时间计数一次


void display();//数码管显示

void delay();//延迟函数

void calspeed();


void main()

{

        EA = 1;//开启总中断

        EX0 = 1;//开启外部中断0

        IT0 = 1;//设置成下降沿触发方式

        TMOD = 0x01;//设置定时器0为模式1,即16位计数模式

        TH0 = (65536-10000)/256;//计数时间为10ms

        TL0 = (65536-10000)%256;


        ET0 = 1;//开启定时器0中断

        TR0 = 1;//启动定时器0


        P2 = P2&0xf0;//将P2的1~4置1


        while(1)

        {

                display();

                calspeed();

        }


        return ;

}


void calspeed()

{

        if (calsp == 100)//100*10=1s计算1次

        {

                motorspeed = motorspeed + counter;

                counter = 0;//清零脉冲数

                calsp = 0;//清零标志

        }

}


//数码管显示函数,依次点亮数码管

void display()

{

        GE = motorspeed%10;

        SHI = motorspeed/10%10;

        BAI = motorspeed/100%10;

        QIAN = motorspeed/1000%10;


        P2_0 = 1;

        P0 = table[QIAN];

        delay();

        P2_0 = 0;


        P2_1 = 1;

        P0 = table[BAI];

        delay();

        P2_1 = 0;


        P2_2 = 1;

        P0 = table[SHI];

        delay();

        P2_2 = 0;


        P2_3 = 1;

        P0 = table[GE];

        delay();

        P2_3 = 0;

}


//延迟函数

void delay()

{

        unsigned char i = 10;

        while(i--)

                ;

}


void _TIMER0() interrupt 1

{

        TH0 = (65536-10000)/256;//重新装入初值,计数时间为10ms

        TL0 = (65536-10000)%256;

        calsp++;

}


//INT0输入

void _INT0() interrupt 0

{

        counter++;

}



推荐阅读

史海拾趣

固得沃克(GOODWORK)公司的发展小趣事

固得沃克始终关注市场需求的变化,不断拓展产品线以满足不同客户的需求。公司从最初的二极管生产,逐步扩展到三极管、整流桥堆、TVS管、MOS管等多个领域,并实现了全面自主研发、生产和销售。此外,固得沃克还提供定制化服务,根据客户的具体需求提供个性化的解决方案。这种灵活多变的产品策略和服务模式,使公司在激烈的市场竞争中保持了竞争优势。

台湾远翔(Feeling Technology)公司的发展小趣事

乔光电子成立于2009年,起初专注于过压、过流保护元器件的研发、生产和销售。公司凭借对技术的执着追求和对市场的敏锐洞察,迅速在行业内站稳脚跟。在创立初期,乔光电子就建立了先进的EMC实验室,致力于为客户提供顶级性能的过压、过流保护元器件和完整的电路保护解决方案。这一时期,乔光电子在福建和东莞建立了生产基地,为后续的快速发展奠定了坚实基础。

Foxboro I C T Inc公司的发展小趣事

随着全球对绿色低碳发展的重视,乔光电子积极响应国家号召,于2021年底开始筹划绿色工厂创建项目。公司引入了产品全生命周期理念,持续开展节能低碳、环境保护工作,建立了质量管理体系、职业健康安全管理体系、环境管理体系和能源管理体系等。通过实施一系列绿色低碳、节能技改措施,如废气粉尘收集与处理系统、造粒珠磨机电机变频改造等,乔光电子实现了万元产值能耗和碳排放强度的逐步改善,为企业的可持续发展奠定了坚实基础。

Codeco Corporation Of Vermont公司的发展小趣事

在追求商业成功的同时,Codeco也积极履行企业社会责任。他们注重环保和可持续发展,在生产过程中采用环保材料和技术,减少对环境的影响。此外,Codeco还积极参与公益事业,为社会做出贡献。这些举措不仅提升了公司的社会形象,也赢得了员工和消费者的尊重与认可。


您可以根据这个框架,结合您对电子行业和Codeco Corporation Of Vermont的了解,撰写具体的故事内容。请注意,这些故事应基于事实或合理的推测,避免涉及未经证实的信息或夸大其词的描述。

Hexawave公司的发展小趣事

随着电子行业的快速发展和变革,Codeco面临着新的挑战和机遇。为了应对这些变革,公司及时调整战略,加大在人工智能、物联网等领域的投入。通过与高校、研究机构的合作,Codeco不断吸收新的技术和理念,推出了一系列符合市场需求的创新产品。这些举措使得Codeco在行业中保持了领先地位。

Holmes Co Inc公司的发展小趣事

Holmes Electronics Inc. 起初是一家小型电子元件制造商,专注于生产基础电阻器和电容器。然而,随着电子行业的快速发展,公司创始人意识到技术创新的重要性。他们投入大量资源进行研发,成功开发出一种新型的高精度温度传感器,这种传感器能够在极端环境下保持高精度,迅速被智能手机、医疗设备和工业自动化系统采用。这一技术创新不仅为公司赢得了市场份额,还奠定了Holmes Electronics在电子行业的技术领先地位。

问答坊 | AI 解惑

linux下i2c控制radio的问题

目前用ut6410想实现 radio的功能使用si47xx的模块 ut6410本身有提供i2c的接口和驱动 kernel linux2.6.24 硬件部份問題排除 有用示波器 sda sck脚位有讯号出来. 现在遇到的状况是想从user space透过i2c对si47xx丢cmd 但是write read回传都是-1 部 ...…

查看全部问答>

wince5.0 2440背光问题

背光代码 volatile S3C2440A_IOPORT_REG * v_pIOPregs= NULL; BOOL BacklightInitialize() {     BOOL    bRet = TRUE;     BL_PowerOn(TRUE);               & ...…

查看全部问答>

各位达人,有在上海ATMEL做软件工程师的吗

这个公司怎么样, 在里面的出来说说:)…

查看全部问答>

第三方控件如何部署到wince中,在运行时提示无法找到第三方控件的dll

第三方控件如何部署到wince中 在运行时提示无法找到第三方控件的dll…

查看全部问答>

如何以DSD模式将多个,Pcm4222,pcm1792,连接到Ti的dsp上?

如何以DSD模式将多个,Pcm4222,pcm1792,连接到Ti的dsp上? 还有个什么TDM模式是什么? Tms320vc5402如何连接到异步SRam?…

查看全部问答>

请问香主,如何找到寄存器地址?

                                 看完了STM32的数据手册和参考手册,无法找到某一个具体寄存器的地址,文档中给出的都是偏移地址,而且也没有基地址 ...…

查看全部问答>

版主,请教一下定时器捕获问题。

版主,请教一个问题。我用的是STM8S103K3的片子,由于是第一次使用ST单片机,所以很多的地方不明白。我现在用TIM2 的第三通道来捕获一个脉冲信号,并要把脉冲宽度读出来。我按着数据手册上一步一步的做,结果还是没有出来,能在进入捕获中断, ...…

查看全部问答>

TinyOS在MSP430F2618+CC2520平台上移植交流

目前TinyOS还仅支持MSP430低端的MCU比如f1611,以及CC2420等射频芯片。针对MSP430高端系列单片机,以及TI推出的第二代射频芯片CC2520还未能支持 前段时间把TinyOS移植到了上述平台上,基本功能都已经实现,针对无线协议栈还需要进一步优化!希望有 ...…

查看全部问答>

CC2500发射很正常,但是接收的数据异常

做了块CC2500模块,模块发射数据很正常,但是接收的数据全部异常,找了两天了还没找到原因,程序问题已经排除(用别人的模块发射和接受都正常),请懂的人帮下小弟,小弟搞开始搞RF…

查看全部问答>