精华内容
下载资源
问答
  • simulink设计的循环计数器

    热门讨论 2010-06-25 10:43:47
    参考别人的想法设计的一个循环整数计数器,上升沿触发,到达最高值之后自动返回最小值。使用时,需将constant设置成你需要的最大值,然后将触发式积分器的上下限分别射程需要的就好。其中上限=constant
  • STM32CubeMX:ETR外部脉冲计数器

    万次阅读 2016-11-09 18:11:21
    使用TIM定时器ETR管脚对外部脉冲进行计数,用PA0模拟产生脉冲进行计数。 芯片:STM32F103C8T6 输出:PA0、PA12(TIM1_ETR)、USART1 配置界面 TIM1配置 Period为计数溢出周期 代码应用 /* USER ...

    使用TIM定时器ETR管脚对外部脉冲进行计数,用PA0模拟产生脉冲进行计数。

    芯片:STM32F103C8T6

    输出:PA0、PA12(TIM1_ETR)、USART1

    配置界面


    TIM1配置


    Period为计数溢出周期

    代码应用

      /* USER CODE BEGIN 2 */
    	HAL_TIM_Base_Start(&htim1);
      /* USER CODE END 2 */
    
      /* Infinite loop */
      /* USER CODE BEGIN WHILE */
      while (1)
      {
      /* USER CODE END WHILE */
    
      /* USER CODE BEGIN 3 */
    	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,(GPIO_PinState)!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0));
    	HAL_Delay(500);
    	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,(GPIO_PinState)!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0));
    		
    	printf("num=%d\r\n",htim1.Instance->CNT);
      }
      /* USER CODE END 3 */
    标准库获取计数器值用TIM_GetCounter函数,HAL函数中,直接调用值即可,好一顿找……





    展开全文
  • STM32F1通用定时器实现脉冲计数器 通过TIM3实现定时,我设计的一秒计数一次,然后在数码管(光阳极)上显示。数码不仅记录脉冲,还可以通过按键来调节: 按键1 清零 按键2加一 按键3减一 按键4选择暂停/开始...

    STM32F1通用定时器实现脉冲计数器

    通过TIM3实现定时,我设计的一秒计数一次,然后在数码管(光阳极)上显示。数码不仅记录脉冲,还可以通过按键来调节:

    按键1 清零

    按键2加一

    按键3减一

    按键4选择暂停/开始启动 两个功能

    需要注意的是:按键1-按键3 的功能必须在按键4选择暂停功能时才能完成,其他情况失效。

    接线:

    1.PE0接LED灯,放置在中断函数中,起到中断执行提示

    2.四个数码管的数据口分别接在PD8- PD15    片选口分别接在PA0-PA3口

    3.四个按键分别接在PC0-PC4

     

    代码如下:

    main.c

    /*
    创建时间:2019.9.17
    创建人:王艇
    功能:四个数码管循环显示0000 - 9999
    
    接线:
    	每个数码管分别接在PD8-PD15
    	四个数码管的驱动口(com)分别接在 PA0-PA3
    
    实现步骤:
    	
    	
    数码管共阳与共阴的区别
    */
    #include "stm32f10x.h"                  // Device header
    #include "led.h"
    #include "key.h"
    #include "delay.h"
    #include "time.h"
    
    int main(void)
    {
    	
    	GPIOD_init_wt();
    	GPIOA_init_wt();
    	GPIOC_Init_key();
    	
    	GPIOE_init_led();
    	TIM3_Init(999,35999);	//	0.5s    T = (999+1)*(35999+1)/72MHz = 0.5s
    
    	while(1)
    	{
    		key_scan();
    		display();
    	}
    }

    time.h

    #include "stdint.h"
    
    void TIM3_Init(uint16_t per,uint16_t psc);

    time.c

    
    #include "stm32f10x_tim.h"
    
    int temp = 1;
    extern int cnt;
    void TIM3_Init(uint16_t per,uint16_t psc)
    {
    	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
    	NVIC_InitTypeDef NVIC_InitStruct;
    	
    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
    	
    	TIM_TimeBaseInitStructure.TIM_Period=per; //自动装载值
    	TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //分频系数
    	TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
    	TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //设置向上计数模式
    	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
    	
    	TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); 
    	
    	NVIC_InitStruct.NVIC_IRQChannel=TIM3_IRQn;
    	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2;
    	NVIC_InitStruct.NVIC_IRQChannelSubPriority=3;
    	NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
    	NVIC_Init(&NVIC_InitStruct);
    	
    	TIM_Cmd(TIM3,ENABLE);
    }	
    
    void TIM3_IRQHandler(void)
    {
    	if(TIM_GetITStatus(TIM3,TIM_IT_Update) == SET)
    	{
    		TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
    		temp = (-1)*temp;
    		if(temp == -1)
    		{
    			GPIO_WriteBit(GPIOE, GPIO_Pin_0, Bit_SET);
    			cnt++;
    			if(cnt>9999)
    			{
    				cnt = 0;
    			}
    		}
    		else
    		{
    			GPIO_WriteBit(GPIOE, GPIO_Pin_0, Bit_RESET);
    			
    		}
    			
    	}
    	
    }
    

    led.h

    void GPIOD_init_wt(void);
    void GPIOA_init_wt(void);
    void GPIOE_init_led(void);
    void display(void);
    

    led.c

    
    
    /*
    
    函数名:void GPIOA_init_wt(void)
    又无参数:	无参
    功能:开启GPIOA口
    	 低8位推挽输出,50MHz
    创建人:王艇
    创建时间:2019.9.12
    
    函数名:void GPIOA_init_wt(int x)
    又无参数:有参
    功能:开启GPIOA口
    	 低8位推挽输出,50MHz
    修改人:王艇
    工号:0111001
    创建时间:2019.9.13
    
    */
    #include "stm32f10x_gpio.h"
    #include "delay.h"
    
    
    unsigned short int table1[]={
    0xc000,0xf900,0xa400,0xb000,
    0x9900,0x9200,0x8200,0xf800,
    0x8000,0x9000,0x8800,0x8300,
    0xc600,0xa100,0x8600,0x8e00};		//	共阳
    
    unsigned short int table2[]={		//	0-F
    0x3f00,0x0600,0x5b00,0x4f00,
    0x6600,0x6d00,0x7d00,0x0700,
    0x7f00,0x6f00,0x7700,0x7c00,
    0x3900,0x5e00,0x7900,0x7100};		//	共阴
    
    
    int cnt;	//	全局变量,计数
    //extern int flag;	//	全局变量,标记位
    
    void GPIOD_init_wt(void)
    {
    	GPIO_InitTypeDef GPIO_InitStruct;	//	GPIO初始化结构体	
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
    	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11
    								|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
    	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOD,&GPIO_InitStruct);
    }
    
    void GPIOA_init_wt(void)
    {
    	GPIO_InitTypeDef GPIO_InitStruct;	//	GPIO初始化结构体	
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3; //0000 0000
    	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOA,&GPIO_InitStruct);
    }
    
    void GPIOE_init_led(void)
    {
    	GPIO_InitTypeDef GPIO_InitStruct;	//	GPIO初始化结构体	
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
    	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; //0000 0000
    	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOE,&GPIO_InitStruct);
    }
    
    
    /* 显示1234 */
    /*void display(void)
    {
    	GPIO_Write(GPIOA,0X000E);	// 片选第一个数码管0000 0000 0000 1110
    	GPIO_Write(GPIOD,table1[1]);	//	显示1
    	delay();
    	
    	GPIO_Write(GPIOA,0X000D);	// 片选第一个数码管0000 0000 0000 1101
    	GPIO_Write(GPIOD,table1[2]);	//	显示1
    	delay();
    	
    	GPIO_Write(GPIOA,0X000B);	// 片选第一个数码管0000 0000 0000 1011
    	GPIO_Write(GPIOD,table1[3]);	//	显示1
    	delay();
    	
    	GPIO_Write(GPIOA,0X0007);	// 片选第一个数码管0000 0000 0000 0111
    	GPIO_Write(GPIOD,table1[4]);	//	显示1
    	delay();
    }*/
    /* 
    
    数码管动态显示 - 0000 - 9999
    创建人:王艇
    
    方法一
    */
    //void display(void)
    //{
    //	int i,j,k,m,n;	//	分别控制个十百千为
    //	
    //	for(m=0;m<10;m++)
    //	{		
    //		for(k=0;k<10;k++)
    //		{			
    //			for(j=0;j<10;j++)
    //			{				
    //				for(i=0;i<10;i++)
    //				{
    //					for(n=0;n<10;n++)	//	起延时作用
    //					{
    //						GPIO_Write(GPIOA,0X000E);	// 片选第一个数码管0000 0000 0000 1110
    //						GPIO_Write(GPIOD,table1[m]);	//	显示
    //						delay();
    //						
    //						GPIO_Write(GPIOA,0X000D);	// 片选第一个数码管0000 0000 0000 1110
    //						GPIO_Write(GPIOD,table1[k]);	//	显示
    //						delay();
    //						
    //						GPIO_Write(GPIOA,0X000B);	// 片选第一个数码管0000 0000 0000 1110
    //						GPIO_Write(GPIOD,table1[j]);	//	显示
    //						delay();
    //						
    //						GPIO_Write(GPIOA,0X0007);	// 片选第一个数码管0000 0000 0000 1110
    //						GPIO_Write(GPIOD,table1[i]);	//	显示
    //						delay();
    //					}
    //					
    //				}
    //			}
    //		}
    //	}
    //	
    //}
    /* 
    
    数码管动态显示 - 0000 - 9999
    创建人:王艇
    
    方法二
    */
    //void display(void)
    //{
    //	int cnt;	//	计数
    //	int i;	//	循环变量
    //	int g,s,b,q;
    //	for(cnt=0;cnt<10000;cnt++)
    //	{
    //		g = cnt%10;
    //		s = cnt%100/10;
    //		b = cnt/100%10;
    //		q = cnt/1000;
    //		for(i=0;i<10;i++)
    //		{
    //			GPIO_Write(GPIOA,0X000E);	// 片选第一个数码管0000 0000 0000 1110
    //			GPIO_Write(GPIOD,table1[q]);	//	显示
    //			delay();
    //			
    //			GPIO_Write(GPIOA,0X000D);	// 片选第一个数码管0000 0000 0000 1110
    //			GPIO_Write(GPIOD,table1[b]);	//	显示
    //			delay();
    //			
    //			GPIO_Write(GPIOA,0X000B);	// 片选第一个数码管0000 0000 0000 1110
    //			GPIO_Write(GPIOD,table1[s]);	//	显示
    //			delay();
    //			
    //			GPIO_Write(GPIOA,0X0007);	// 片选第一个数码管0000 0000 0000 1110
    //			GPIO_Write(GPIOD,table1[g]);	//	显示
    //			delay();
    //		}
    //	}		
    //}
    
    /*
    数码管动态显示 - 0000 - 9999
    创建人:王艇
    
    方法三
    */
    void display(void )
    {
    	int g,s,b,q;
    //	if(-1 == flag)
    //	{
    //		
    //	}
    //	else if(1 == flag)
    //	{
    //		cnt++;
    //	}
    	g = cnt%10;
    	s = cnt%100/10;
    	b = cnt/100%10;
    	q = cnt/1000;
    	GPIO_Write(GPIOA,0X000E);	// 片选第一个数码管0000 0000 0000 1110
    	GPIO_Write(GPIOD,table1[q]);	//	显示
    	delay();
    	
    	GPIO_Write(GPIOA,0X000D);	// 片选第一个数码管0000 0000 0000 1101
    	GPIO_Write(GPIOD,table1[b]);	//	显示
    	delay();
    	
    	GPIO_Write(GPIOA,0X000B);	// 片选第一个数码管0000 0000 0000 1011
    	GPIO_Write(GPIOD,table1[s]);	//	显示
    	delay();
    	
    	GPIO_Write(GPIOA,0X0007);	// 片选第一个数码管0000 0000 0000 0111
    	GPIO_Write(GPIOD,table1[g]);	//	显示
    	delay();		
    }
    
    

    key.h

    void GPIOC_Init_key(void);
    void key_scan(void);

    key.c

    /*
    创建时间:2019.9.20
    创建人:王艇
    修改时间:2019.9.23
    接线:key1-key4 分别接在PC0-PC3
    步骤:
    	1.开启时钟
    	2.设置工作模式
    	3.数据的输入
    */
    #include "stm32f10x_rcc.h"
    #include "delay.h"
    
    int	flag=1;	//	标记位
    extern int cnt;
    void GPIOC_Init_key(void)	//	PC0-PC2
    {
    	GPIO_InitTypeDef GPIO_InitStruct;
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
    	
    	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
    	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU ;
    	GPIO_Init(GPIOC,&GPIO_InitStruct);	
    }
    
    
    void key_scan(void)
    {
    	//	key1
    	if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_0) == 0 &&(-1 == flag))
    	{
    		delay_wt();	//	消除抖动
    		if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_0) == 0 &&(-1 == flag))
    		{
    			cnt=0;
    		}
    		while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_0) == 0);	//	判断按键是否松开
    	}
    	// key2	加1操作
    	if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1) == 0 &&(-1 == flag))
    	{
    		delay_wt();	//	消除抖动
    		if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1) == 0 &&(-1 == flag))
    		{
    			cnt++;
    			if(cnt>=10000)
    			{
    				cnt=0;
    			}
    		}
    		while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1) == 0);	//	判断按键是否松开
    	}
    	
    	// key3	减1操作
    	if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2) == 0 &&(-1 == flag))
    	{
    		delay_wt();	//	消除抖动
    		if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2) == 0 &&(-1 == flag))
    		{
    			cnt--;
    			if(cnt<0)
    			{
    				cnt=9999;
    			}
    		}
    		while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2) == 0);	//	判断按键是否松开
    	}
    
    	if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_3) == 0)
    	{
    		delay_wt();	//	消除抖动
    		if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_3) == 0)
    		{
    			flag = (-1)*flag;
    			if(flag == 1)
    			{
    				TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
    				//TIM_Cmd(TIM3, ENABLE);
    			}
    			else
    			{
    				TIM_ITConfig(TIM3,TIM_IT_Update,DISABLE);
    				//TIM_Cmd(TIM3, DISABLE);
    			}
    		}
    		while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_3) == 0);	//	判断按键是否松开
    	}
    }
    

    delay.h

    void delay(void);	//	函数声明
    void delay_wt(void);

    delay.c

    
    void delay(void)
    {
    	int i,j;
    	for(i=0;i<100;i++)
    	{
    		for(j=0;j<400;j++);
    	} 
    }
    
    void delay_wt(void)
    {
    	int i,j;
    	for(i=0;i<100;i++)
    	{
    		for(j=0;j<400;j++);
    	} 
    }
    

    效果如下:

     

    展开全文
  • 基于555定时器的计数器设计 1)计数以秒为单位步进 2)任意时刻,点按按键 1,计数器可置数为 n1 3)点按按键 2,计数器可...停止计数,再次点按又开始计数,如此循环 4)计数器计到 n2 会自行停止 此例中n1=26,n2=90
  • 循环查找对称两个点为一个脉冲,具体看简陋的程序框图(哈哈,需要的自己优化)。其实用计数器就没我的事了。 下载VI地址 https://download.csdn.net/download/qq_33820491/13062497 请摧残我 ...

    记录

    最近项目有个需求,计算产品输出的脉冲数量。所以示波器抓取波形,然后根据波形计算脉冲数量。

    原理

    循环查找对称两个点为一个脉冲,具体看简陋的程序框图(哈哈,需要的自己优化)。其实用计数器就没我的事了。

    下载VI地址

    https://download.csdn.net/download/qq_33820491/13062497
    请摧残我

    在这里插入图片描述

    展开全文
  • 使用Verilog语言描述...计数器在数字系统中主要是对脉冲的个数进行计数,以实现测量、计数和控制的功能,同时兼有分频功能。(百度) 自己对计数器的理解。 计数器就是一个简简单单具有计数功能的模块(module)。不

    使用Verilog语言描述计数器——脉动计数器。

    内容说明:

    本次设计的计数器属于脉动计数器。使用Verilog语言设计,并且设计方法采用模块设计和简单的行为级设计。会有这两种设计的对比测试。最后,会有对这次设计计数器过程中的一些小心得。

    计数器

    什么是计数器?

    计数是一种最简单基本的运算。计数器就是实现这种运算的逻辑电路。计数器在数字系统中主要是对脉冲的个数进行计数,以实现测量、计数和控制的功能,同时兼有分频功能。(百度)

    自己对计数器的理解。

    计数器就是一个简简单单具有计数功能的模块(module)。不过,这个原理简单的计数模块在芯片和计算机中却是不可或缺的部分。计数器虽然是对脉冲个数进行计数,但是如果把脉冲个数进行某种运算,而且这种运算可以具有某种含义,那么“计数”便可以统计“某种关键量”的次数(数量)。

    计数器分类:

    按照触发条件:同步计数器和异步计数器。
    按照功能:加法计数器、减法计数器,移位计数器、可以记录固定数值的计数器。
    本次设计的脉动计数器属于减法计数器。

    脉动计数器

    脉动计数器是由4个T触发器组成的计数模块。具体逻辑图如图1
    图1:脉动计数器逻辑图
    图1:脉动计数器逻辑图

    设计思想:

    这次设计给出了电路的逻辑图。在这个图中,我们可以看出需要调用4个T触发器,用时钟信号和复位信号把4个T触发器连接起来,4个T触发器的输出组成了最终的输出结果。需要先设计出T触发器,一个T触发器是由一个D触发器和一个非门构成,而D触发器之前设计过。这样设计逻辑就很简单了,先设计D触发器,之后和非门组成T触发器,最后构成脉动计数器。
    这次的设计方面继续采用模块化设计。

    设计代码:

    D触发器设计代码:
    这个D触发器功能比较完善,具有复位、置数功能。

    module dff (clk,rst,load,d,q);
    input	clk,rst,load;
    input	d;
    output	q;
    reg	q;
    
    always @ (posedge clk or negedge rst or negedge load)
    	if(!rst)
    		q<=0;
    	else if (!load)
    		q<=1;
    	else
    		q<=d;
    
    endmodule
    

    T触发器设计代码:

    module	tff (clk,rst,q);
    input	clk,rst;
    output	q;
    //wire	a;
    //not (a,q);
    //dff u1 (clk,rst,1'b1,a,q);
    dff u1 (clk,rst,1'b1,~q,q);
    
    endmodule
    
    

    T触发器设计时,可以有两种想法。一种是如同注释一样,调用一个非门;另一种是在模块调用总直接取非。两种各自选取。
    注:在dff u1 (clk,rst,1'b1,~q,q);中,1'b1不可偷懒写成1。因为,前者代表1位二进制的1;后者代表十进制的1,具体几位看自己的计算机,一般是32位。在赋值的时候,有时会忽略数字的位数和进制,这样只要你自己可以理解不出错误,都可以(开心就好)。但是模块调用是“很严肃”的事情,这样“无所谓”会让模块调用(实例化)出现问题。

    顶层模块设计代码:

    module counter (clk,rst,q);
    input		clk,rst;
    output	[3:0]	q;
    tff u1 (.clk(clk),.rst(rst),.q(q[0]));
    tff u2 (.clk(q[0]),.rst(rst),.q(q[1]));
    tff u3 (.clk(q[1]),.rst(rst),.q(q[2]));
    tff u4 (.clk(q[2]),.rst(rst),.q(q[3]));
    endmodule
    
    

    在使用模块设计之后,使用行为级编写一个简单的计数器,功能和上面设计的脉动计数器一样。不过,代码长度和难度完全不一样。
    代码如下:

    module counter_1 (clk,rst,q);
    input		clk,rst;
    output	[3:0]	q;
    reg	[3:0]	q;
    always @ (posedge clk or negedge rst)
    begin
    	if(!rst)
    		q<=0;
    	else
    		q<=q-1;
    end
    endmodule
    

    测试代码:

    module counter_tb;
    reg		clk,rst;
    wire	[3:0]	q1,q2;
    counter   t1 (clk,rst,q1);
    counter_1 t2 (clk,rst,q2);
    initial
    begin
    	clk=0;rst=0;
    #10	rst=1;
    #50	rst=0;
    #10	rst=1;
    #200	rst=0;
    #10	$stop;
    #10	$finish;
    end
    
    always	#6 clk=~clk;
    
    endmodule
    

    运行结果:

    两中不同设计方法的计数器测试结果如图2所示。
    十进制输出结果如图3所示。
    异步复位部分如图4所示。
    图2:两中不同设计方法的计数器测试结果
    图2:两中不同设计方法的计数器测试结果
    注:图上显示的数值是把二进制转换为了无符号的数值。就是输出没有负数。但是如果改变输出数值的格式,比如改成十进制,结果如图3所示。
    图3:十进制输出结果
    图3:十进制输出结果
    对于为什么会有-8后面是7这个现象的解释。
    0到(-1))
    可以这样理解,0000减1,但是减不了。向“远方”借1,最后变成了1111。这种理解方式只是让你“强行”明白减法。这里的标准回答是补码,十进制中的4位二进制数中规定最高一位是标志位。“1”表示负数;“0”表示正数。有关补码的知识之后再说。
    这样也可以解释(-8)的下一位为什么是(7)。
    (-8)到7

    图4:异步复位部分
    图4:异步复位部分
    可以看出异步复位不需要等待时钟的到来,就可以把输出结果复位(置零)。但是新的输出的出现需要等待时钟。

    总结

    本次主要介绍计数器和如何使用Verilog编写一个计数器。两种设计方法的区别,使用分模块(复杂)设计可以控制模块内部功能,自主性强一些,通过修改内部代码可以实现功能的“微调”;但是编写代码难度加大,对设计者素质要求高。使用行为级(容易)设计最大的优点简单、方便;同时缺点无法做到“窥看”内部。

    预告

    其他计数器的设计。计数器也有新花样。

    感想

    不入其行,不知其难。
    入了其行,方知世界之大!!!

    展开全文
  • 用AT89S51的定时/计数器T0产生2秒钟的定时,每当2秒定时到来时,更换指示灯闪烁,每个指示闪烁的频率为0.2秒,也就是说,开始L1指示灯以0.2秒的速率闪烁,当2秒定时到来之后,L2开始以0.2秒的速率闪烁,如此循环下去...
  • 4位数码管计数器程序

    2009-02-08 18:27:49
    C语言计数器程序,键盘用165并转串,数码管用595串转并,三个按键功能分别可以实现加、减、归零功能,每加减一次写入24C02作断电保护
  • 环形计数器 扭环形计数器 顺序脉冲发生器 环形计数器 将移位寄存器首位相接,连续不断的数据将在... 1000 ,可以把这个电路作为时钟脉冲计数器。 状态利用:n个 反馈逻辑函数: \begin{align}\notag D_{0} = ...
  • 二十四进制计数器.zip

    2020-07-03 23:07:34
    这是我们数电实验题目: 使用74ls160和74ls161设计24进制计数器即: 用一片 74LS160 同步十进制计数器和一片 74LS161 同步二进制计数器,连接成二十四 进制的计时电路。输入信号为数字脉冲信号。
  • 西门子1200PLC高速计数器的使用方法

    千次阅读 2020-12-22 09:49:01
    高速计数器(HSC)能够对发生速率快于循环OB执行速率的事件进行计数。如果待计数事件的发生速率慢于OB执行速率,则可使用 CTU、CTD 或CTUD标准计数器指令。如果事件的发生速率快于OB的执行速率,则应使用更快的HSC设备...
  • 利用定时/计数器T1对外部脉冲进行计数,每记到10个脉冲,使P1.0接的LED灯取反一次(即前10个脉冲到后亮,后10个脉冲到后灭,反复循环)。
  • 基于proteus的计数器设计

    千次阅读 多人点赞 2019-04-21 12:10:02
    基于proteus的数字逻辑设计——计数器计数器原理异步/同步计数器加法/减法计数器任意进制计数器计数器设计示例:电子钟参考资料 计数器原理 由逻辑门构成的电路称为 组合逻辑电路 ,其任何时刻输出端的信号仅取决于...
  • FPGA杂记4——脉冲边沿检测及计数

    千次阅读 2020-11-07 11:36:13
    脉冲边沿检测、脉冲计数器、频率计数器以及其他相关的东西
  • IC3由4位2进制计数器74LS93接成16进制计数器,其4个输出端可分别输出对计数脉冲的2、4、8、16分频信号。IC4是双D触发器74LS74,在这里接成两位2进制加法计数器。IC5是双4选l数据选择器74LSl53,这里只用了它的一组4...
  • 计数器对输入脉冲进行计数,来一CP个脉冲计数器状态变化一次。根据计数器循环长度M称之为M模计数器(M进制计数器),计数器状态编码,按二进制的递增或递减规律来编码,对应称加法计数器,减法计数器
  • Verilog——秒计数器

    2021-06-24 16:33:35
    计数器
  • (二十)【数电】(第六章 时序逻辑电路)计数器

    万次阅读 多人点赞 2020-05-26 20:33:24
    文章目录A 计数器 A 计数器
  • 以定时器/计数器0来对脉冲进行计数,数据用8279芯片连接LED数码管实现累进显示。程序分为主程序和中断服务程序两部分。主程序主要实现初始化、循环显示。而累计数在中断服务程序中完成。
  • 门电路计数器

    2020-10-30 12:52:25
    寄存器和移位寄存器 计数器
  • 题目: 以一片74163(同步16进制加法计数器)和一片74154(4-16线译码器)设计节拍脉冲发生电路: 要求从12个输出端顺序、循环地输出等宽的负脉冲. 分析: 要使74154从12个输出端顺序、循环地输出等宽的负脉冲, 可先用...
  • ESP32 单片机学习笔记 - 03 - MCPWM脉冲输出/PCNT脉冲计数 前言,继续上一篇的内容。因为上一篇刚好实验了iic和spi,形成一对。接下来讲pwm另起一篇。 一、电机PWM输出 - MCPWM 官方例程: esp-idf/examples/...
  • 计数器

    千次阅读 2020-05-05 18:10:56
    【 1. 同步计数器 】 同步二进制计数器 同步二进制加法计数器 ...每输入16个脉冲,触发器状态循环一次,并且输出端C产生一个进位信号,故为16进制计数器 时序图 从时序图中可以看出,若计数输入脉冲的频率为f...
  • LabVIEW(二):计数器应用

    千次阅读 2018-09-25 08:40:00
    即有正交的关系,所以这两类编码器又叫做正交编码器编码器没旋转一周会产生多个脉冲(例如BNC2120上的编码器旋转一周产生96个脉冲),所以通过计数器监控脉冲数目,和信号A和信号B之间的相对相位信息,就可以获得...
  • 实验七 计数器及其应用

    千次阅读 2021-05-26 11:03:05
    一、预习要求 1、复习有关计数器的原理。 2、查看集成电路手册,给出并熟悉所用各集成芯片的引脚排列图及其功能表。 3、绘出各实验内容的详细电路图。...计数器在数字系统中主要是对脉冲的个数进行计
  • 微控制器还可以通过运行循环来生成/测量所需的时间延迟,但定时器/计数器将 CPU 从冗余和重复性任务中解放出来,使其能够为其他任务分配最大处理时间。 定时器只不过是一个简单的二进制计数器,可以配置为计数时钟...
  • 实现单片机脉冲计数功能

    千次阅读 2020-11-20 17:52:10
    shineblink core 开发板(简称Core)的库函数支持方波脉冲计数功能,所以只需要调用两三个API,即可实现对连续方波脉冲的计数功能。 PS:Core 仅用五、六行代码即可实现Wifi/Ble/NB/Lora/ThreadMesh/RFID/Eth/Usb/...
  • STM32定时器单脉冲输出模式

    千次阅读 2021-01-14 19:32:07
    定时器通过对预设的比较值与计数器的值做匹配比较之后,依据比较结果结合相应的输出模式从而实现各类输出。如PWM输出、电平翻转、单脉冲输出、强制输出等。一般来讲,STM32的通用定时期和高级定时器都具...
  • 具体要求: 1.东南西北四个方向分别有4个交通灯,led_east[2:0],led_south[2:0],led_west[2:0],led_north[2:0]. 2.复位时,所有方向都是绿灯...也就是说1s为50_000_000个脉冲。2s就为100_000_000个脉冲. rst_n: 复

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,335
精华内容 2,134
关键字:

循环脉冲计数器

友情链接: SmartDeviceProject1.rar