历史上的今天
今天是: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++; }
史海拾趣
|
目前用ut6410想实现 radio的功能使用si47xx的模块 ut6410本身有提供i2c的接口和驱动 kernel linux2.6.24 硬件部份問題排除 有用示波器 sda sck脚位有讯号出来. 现在遇到的状况是想从user space透过i2c对si47xx丢cmd 但是write read回传都是-1 部 ...… 查看全部问答> |
|
背光代码 volatile S3C2440A_IOPORT_REG * v_pIOPregs= NULL; BOOL BacklightInitialize() { BOOL bRet = TRUE; BL_PowerOn(TRUE); & ...… 查看全部问答> |
|
如何以DSD模式将多个,Pcm4222,pcm1792,连接到Ti的dsp上? 如何以DSD模式将多个,Pcm4222,pcm1792,连接到Ti的dsp上? 还有个什么TDM模式是什么? Tms320vc5402如何连接到异步SRam?… 查看全部问答> |
|
版主,请教一个问题。我用的是STM8S103K3的片子,由于是第一次使用ST单片机,所以很多的地方不明白。我现在用TIM2 的第三通道来捕获一个脉冲信号,并要把脉冲宽度读出来。我按着数据手册上一步一步的做,结果还是没有出来,能在进入捕获中断, ...… 查看全部问答> |
|
TinyOS在MSP430F2618+CC2520平台上移植交流 目前TinyOS还仅支持MSP430低端的MCU比如f1611,以及CC2420等射频芯片。针对MSP430高端系列单片机,以及TI推出的第二代射频芯片CC2520还未能支持 前段时间把TinyOS移植到了上述平台上,基本功能都已经实现,针对无线协议栈还需要进一步优化!希望有 ...… 查看全部问答> |
|
做了块CC2500模块,模块发射数据很正常,但是接收的数据全部异常,找了两天了还没找到原因,程序问题已经排除(用别人的模块发射和接受都正常),请懂的人帮下小弟,小弟搞开始搞RF… 查看全部问答> |




