杂:(4)NE555

1.计数方式时,通过引脚P34,P35对外部脉冲信号进行计数

2.当输入脉冲信号产生由1到0的下降沿时,定时器的值加1,在每个机器周期,cpu采样引脚P34,P35的输入电平,若前一个机器周期采样值为高,下一个机器周期采样值为低,则计数器加1

注意定时器值加1和计数器加1

#include "include.h"
unsigned int count_f=0;
unsigned int dat_f=0;
unsigned int count_t=0;
void Timer0Init1()		//@12.000MHz
{
	AUXR |= 0x80;		//定时器时钟1T模式
	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x06;		//设置定时器模式
	TL0 = 0xff;		//设置定时初值
	TH0 = 0xff;		//设置定时重载值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	ET0 = 1;
}
void Timer1Init(void)		//1毫秒@12.000MHz
{
	AUXR |= 0x40;		//定时器时钟1T模式
	TMOD &= 0x0F;		//设置定时器模式
	TL1 = 0x20;		//设置定时初值
	TH1 = 0xD1;		//设置定时初值
	TF1 = 0;		//清除TF1标志
	TR1 = 1;		//定时器1开始计时
	ET1 = 1;
	EA = 1;
}

void main()
{

	allint();
	Timer0Init1();
	Timer1Init();
	//UartInit();
	while(1)
	{
		if(dat_f>10000)
		smg_display(0,dat_f/10000);
		if(dat_f>1000)
		smg_display(1,dat_f%10000/1000);
		if(dat_f>100)
		smg_display(2,dat_f%1000/100);
		if(dat_f>10)
		smg_display(3,dat_f%100/10);
		smg_display(4,dat_f%10);
	}
}
void time0() interrupt 1
{
	count_f++;
}
void time1() interrupt 3
{
	count_t++;
	if(count_t>=1000) //1s
	{
		dat_f = count_f;
		count_f = 0;
		count_t = 0;
	}

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值