定时器计数器初值求解

#include <stdio.h>
#include <stdlib.h>

void InMode (int* mod);				//输入定时器计数器的工作方式
void GetIn (int* in);				//输入的数值的获取	
void InValue (int mode, int* value);			//输入定时器计数器的定时时间(us)
void GetInit (int mode, int value, int* init);	//获得定时器计数器的初值

int main (void)
{
	int		mode;
	int		value;
	int		init;
	
	while (1)
	{	
		InMode (&mode);					//输入定时器计数器的工作方式
		InValue (mode, &value);			//输入定时器计数器的定时时间(us)
		GetInit (mode, value, &init);	//获得定时器计数器的初值
		printf ("方式%c计时%dus的初值为%xH\n", mode, value, init);
	}

	return 0;
}

void InMode (int* mod)				//输入定时器计数器的工作方式
{
	int		in;
	
	printf ("工作方式(0-3):\t");
	while (1)
	{		
		in = getchar ();
		if (in >= '0' && in <= '3')	//输入符合条件
			break;
		else
		{
			printf ("输入非法,重输:\t");
			fflush (stdin);			//清空输入缓冲区
		}
	}
	fflush (stdin);					//清空输入缓冲区
	*mod = in;						//方式字返回
}

void GetIn (int* in)				//输入的数值的获取
{
	int		to;
	int		value = 0;
	int		num = 0;				//输入字符个数
	
	printf ("计时微秒数:\t");
	while (1)
	{		
		to = getchar ();
		if (to >= '0' && to <= '9')	//输入符合条件
			value = value * 10 + (to - '0');
		else
		{
			if ('\n' == to)
			{
				if (0 == num)		//还没输入数,重输 
				{
					printf ("输入为空,重输:\t");
					continue;
				}
				break;				//输入数合理,退出循环
			}
			printf ("输入非法,重输:\t");
			fflush (stdin);			//清空输入缓冲区
			value = 0;				//重新附初值
		}
		num ++;						//输入字符个数加1
	}
	fflush (stdin);					//清空输入缓冲区
	*in = value;					//输入的数返回
}

void InValue (int mode, int* value)	//输入定时器计数器的定时时间(us)
{
	int		in;
	char	flag = 'n';
	while ('n' == flag)
	{
		GetIn (&in);
		switch (mode)
		{
		case '0':
			if (in > 0X1FFF + 1)	//大于方式的最大允许值
				printf ("输入值超过方式0的最大允许值.\n");
			else
			{
				flag = 'y';
				*value = in;		//返回输入方式0的值
			}
			break;
		case '1':
			if (in > 0X0FFFF + 1)	//大于方式的最大允许值
				printf ("输入值超过方式1的最大允许值.\n");
			else
			{
				flag = 'y';
				*value = in;		//返回输入方式1的值
			}
			break;
		case '2':
			if (in > 0X0FF + 1)		//大于方式的最大允许值
				printf ("输入值超过方式2的最大允许值.\n");
			else
			{
				flag = 'y';
				*value = in;		//返回输入方式2的值
			}
			break;
		case '3':
			if (in > 0X0FF + 1)		//大于方式的最大允许值
				printf ("输入值超过方式3的最大允许值.\n");
			else
			{
				flag = 'y';
				*value = in;		//返回输入方式3的值
			}
			break;
		default:
			break;
		}
	}
}

void GetInit (int mode, int value, int* init)	//获得定时器计数器的初值
{
	switch (mode)
	{
	case '0':
		*init = 0X1FFF - value + 1;
		break;
	case '1':
		*init = 0X0FFFF - value + 1;
		break;
	case '2':
		*init = 0X0FF - value + 1;
		break;
	case '3':
		*init = 0X0FF - value + 1;
		break;
	default:
		break;
	}		
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值