定时器T192在子程序内无效 (定时器T1作定时方式,使用方式1,则初始化编程为)

使用方式1

由于TIM192与系统定时器无关,故在子程序内无效。TIM192是一个TIM1和PWR相关总线时基的独立定时器,只能在主程序中进行初始化和配置。

对于定时器T1,使用方式1时,初始化编程如下:

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;TIM_TimeBaseInitStruct.TIM_Period = 10000;TIM_TimeBaseInitStruct.TIM_Prescaler = 8400;TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM1, &TIM_TimeBaseInitStruct);TIM_Cmd(TIM1, ENABLE);

使用方式1的配置如下:

  • 定时发生器时钟:TIM_CKD_DIV1(分频1)
  • 定时发生器时钟使能:通过RCC_APB2PeriphClockCmd()函数使能
  • 自动重装载值:TIM_Period
  • 分频值:TIM_Prescaler
  • 计数模式:TIM_CounterMode_Up(向上计数)
  • 定时发生器使能:通过TIM_Cmd()函数使能

在主程序中完成定时器T1的初始化和配置后,可以在子程序中使用定时器的功能,例如:

    while (TIM_GetFlagStatus(TIM1, TIM_FLAG_Update) == RESET) {};TIM_ClearFlag(TIM1, TIM_FLAG_Update);

子程序中通过轮询TIM_GetFlagStatus()函数检测定时器T1的更新标志,当该标志置位时,说明定时器已计数到自动重装载值,触发中断。此时,应清除该标志,以继续定时器计数。


设晶振频率6MHZ,用定时器/计数器t1以工作方式1进行10ms的定时,并在p1.7

机器周期 =12/Fosc = 12/(6MHz) =2μs,20ms方波的半周期=10ms, 计数值 =10ms/2μs =5000,用单片机定时器T1,工作方式1,16位计数寄存器,计数初值 =2^16 -5000 = =EC78h;; T1初始化程序:MOV TMOD, #b ;; T1,定时模式,方式1MOV TH1, #0ECh ;; 装入初值高8位MOV TL1, #78h;; 装入初值低8位SETBET1;; 允许T1中断 SETBEA ;; MCU开中断SETBTR1;; 启动T1WAIT: SJMPWAIT ;; 等待T1中断 ;; T1中断服务程序(每隔半周期,T1计时溢出中断一次):CPLP1.7;; P1.7引脚输出电平反转(高变低或低变高)MOV TH1, #0ECh ;; 重装初值高8位MOV TL1, #78h;; 重装初值低8位RETI ;; 中断返回

本文原创来源:电气TV网,欢迎收藏本网址,收藏不迷路哦!

相关阅读

添加新评论