51单片机毕设-系统嘀嗒os_systick.c


1> 程序代码

#define SYS_CLK 22118400L		   // SYS_CLK = 22.1184MHz;
#define TickPerSencond  100 	   // 100 指没秒100次,也就是10ms一次;


/**
 * @brief Tim2 for system tick
 * @note config 10ms once interrupt
 */ 
void SysTick_Init(void)
{
    ushort16_t val;
	
	T2CON = 0x00;			// Tim2模式:16位模式
	
    /*configure不要出现小数*/
    val = 0x10000 - (SYS_CLK / 12 / TickPerSencond);	 
    TH2 = val >> 8;
    TL2 = val & 0xFF;

	RCAP2H = TH2;
    RCAP2L = TL2;			// 重装载值
	
	
    PT2 = 0;
    SET_BIT(IPH, 5);		// 设置中断优先级2
	
    T2MOD = 0x00;
    TR2 = 1;				// 启动Tim2
    ET2 = 1;				// 使能Tim2
    EA = 1;					// 使能中断
}

/**
 * @brief This function handles Tim2 interrupt
 */ 
void SysTick_Handler(void) interrupt 5 
{
	KEY_Task();
	LED_RUN_Task();
	
	/* 填充任务例程 */
	
	Timer_Task();
	
    TF2 = 0;
}

2> 定时器 Timer 2

使用定时器2,作为系统嘀嗒定时器;
配置为:16位自动重装载模式,初始化为【10ms】中断;


3> 中断处理 SysTick_Handler()

3

10ms执行1次SysTick_Handler(),有些任务执行后,比如KEY_Task(),发出消息
结束,这个消息在大循环while(1){ }中执行;

10ms执行1次SysTick_Handler(), 也就是每秒执行100次;
里面执行按键扫描任务,LED任务,定时器任务;
根据项目添加;

注意:

SysTick_Handler()中断执行的任务,要小于滴答定时器时间10ms;
否则可能导致系统无法正常运行;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值