-
2021-11-25 14:32:44
九齐单片机T0定时器设置
Description: Set Timer0、Timer1、WDT Interrupt-
1. FINST = 4MHz/4T(I_HRC)
-
2. Timer0 overflow interrupt flag bit will be set every 2048us then toggle PB0 output state (2048us = 1us*256*8)
TMR0 = 0; // Load 0x00 to TMR0 (Initial Timer0 register)
T0MD = C_PS0_TMR0 | C_PS0_Div8 ; // Prescaler0 is assigned to Timer0, Prescaler0 dividing rate = 1:8,clock source is instruction clock
*根据Demo code 备注,T0定时器周期是 2048us
T0是一个8位向上计数定时器。
T0选择了Finst’时钟,I_HRC选择4t ,分频 1:8 ,系统时钟4MHz
周期 = 1/(4000 000/4/8) = 0.000008 s
0.000008 × 256(初值为0) = 0.002048 s = 2048us更多相关内容 -
-
ATMEGA16 T0定时器实验proteus仿真源文件(含C程序源码)
2020-11-29 22:14:23ATMEGA16 T0定时器实验proteus仿真源文件(含C程序源码),包含proteus工程源文件,单片机C语言程序。proteus8.6可正常打开,仿真。 -
【STC15W402AS】T0定时器做时钟源,PCA模块输出PWM
2021-01-12 17:34:18完整代码: #include<STC15W.h> //在STC-ISP烧录软件中找头文件 ...void Timer0_init(void)//设定定时器的溢出频率为1,105,920Hz @11.0592MHz { AUXR |= 0x80; //定时器时钟1T模式 TMOD = 0x00; TL0 = 0xD5完整代码:
#include<STC15W.h> //在STC-ISP烧录软件中找头文件 #include "intrins.h" #define uint unsigned int #define uchar unsigned char void Timer0_init(void)//设定定时器的溢出频率为1,105,920Hz @11.0592MHz { AUXR |= 0x80; //定时器时钟1T模式 TMOD = 0x00; TL0 = 0xD5; //设置定时初值 TH0 = 0xFF; //设置定时重载值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 } void PWM_EN() { P_SW1 = 0x10; //CCP_S1 = 0; CCP_S0 = 1; P3.5输出(CCP0_2) ET0 = 1; EA = 1; // CCAP0L = 0x80; //PCA0比较寄存器,使占空比达到1:1 // CCAP0H = 0x80; //设定PCA0比较寄存器重载值后八位 PWM占空比为50% CCAP0L = 256-(256*27/100); CCAP0H = 256-(256*27/100); //占空比为27% CL = 0; CH = 0; //PCA计数器清零 CMOD = 0x84; // 空闲模式下PCA计数器停止工作;定时器0溢出做PCA模块的时钟源 CCON= 0x00; CCAPM0 = 0x42; //使能PWM0和比较器 PCA_PWM0 = 0x00; //PCA0八位PWM模式,EPC0L(和比较寄存器组成9位数字)置零 CCON= 0x40; //使能PCA计数器 } void main() { Timer0_init(); PWM_EN(); while(1); } void tm0_isr() interrupt 1 { TL0 = 0xD5; TH0 = 0xFF; //重装初值 }
代码解析:
1、定时器溢出频率(分频基数)如何计算
目前使用的是8位PWM输出,
因此 输出的PWM的频率 = PCA时钟源频率/256。
PCA时钟源由寄存器CMOD决定,配置定时0溢出为时钟源。
假设需要的PWM频率为1KHz,1000Hz=PCA时钟源频率/256,
则PCA时钟源频率 = 256000Hz,
晶振频率为11.0592MHz,11059200/256000=43.2(分频基数)
65536-43=65493(0xFFD5),则TH0=0xFF,TL0=0xD5。2、PWM输出口的配置
CCP/PWM/PCA功能可以在3组输出管脚之间切换:
我将其配置在P3.5口:P_SW1 = 0x10; //CCP_S1 = 0; CCP_S0 = 1; P3.5输出(CCP0_2)
3、PWM占空比设置
CCAP0L = 0x80; CCAP0H = 0x80; //占空比50%
CCAP0L = 256-(256*27/100); CCAP0H = 256-(256*27/100); //占空比27%
其中,数值27可以设为一个变量n,实现任意占空比输出。
4、在T0中断函数中重装初值
输出结果:
1、频率1KHz,占空比50%
2、1KHz 27%占空比 -
松翰T0 定时器中断
2021-06-03 09:27:56文件名称:测试T0定时器中断晶振频率:内部16Mhz指令周期:晶振频率/16,即1us文件版本:V1.1文件作者:SWS文件实现的功能描述:采用T0定时器,定时10Ms,计数器变量加一,等加到50次时就是500Ms,每500ms led灯闪烁...这个测试程序是OK,供刚刚开始学习的有缘人们参考..
文件名称:测试T0定时器中断
晶振频率:内部16Mhz
指令周期:晶振频率/16,即1us
文件版本:V1.1
文件作者:SWS
文件实现的功能描述:采用T0定时器,定时10Ms,计数器变量加一,等加到50次时就是500Ms,每500ms led灯闪烁一次(亮、灭各500ms),
定时器采用128分频
开始日期:2011-11-29 22:00
修改日期:2011-11-30 23:28
Chip SN8F27E65
includestd macro1.h
includestd macro2.h
includestd macro3.h
.data
rT0Count ds 1 ;T0定时器次数计数器
rAcc_Buf ds 1
rFlag_Buf ds 1
rFlag1 ds 1
.const
CT0C_INIT_DATA equ 0xb2 ; 256-(10ms * 16MHz /16 /128) =256-(0.01s*16000000Hz/16/128) =256-78.125 =177.875 =0xb2
CT0M_INIT_DATA equ 00010000b; t0模式设置T0 时钟= Fcpu / 128。
CT0_INTERRUPT_ADDR equ 0x0b ;T0 中断向量地址
;flage define
bLed_Switch_1 equ rFlag1.0 ;=1 led亮 ;=0 led灭。
bLed_Switch_2 equ rFlag1.1
.code
org 0
jmp main
ORG CT0_INTERRUPT_ADDR ;t0 interrupt addr
jmp t0_interrupt
org 15h ;user code
main:
b0bset fp03m ;set out mode
b0bset fp03 ;out 1 led灯亮
clr rT0Count ;rT0Count清0
clr t0m ; 清TC0M。
clr rAcc_Buf ;清0
b0bclr FT0IEN ; 禁止T0 中断。
b0bclr FT0ENB ; 关闭T0 定时器。
mov_ t0m,#CT0M_INIT_DATA ; 设置T0 时钟= Fcpu / 128。宏指令
mov_ t0c,#CT0C_INIT_DATA ; 初始化T0C = b2H。宏指令,设置T0 间隔时间= 10 ms。
b0bclr FT0IRQ ; T0IRQ 中断请求清零。
b0bset FT0IEN ; 使能T0 中断。
b0bset FT0ENB ; 开启定时器T0。
b0bset FGIE ; 全局中断使能 GIE。
b0bclr fp03 ;set p03 out L led灯灭
main_while:
mov a,rT0Count
cmprs a,#50 ;计数器加50次,正好是500ms,因为每10ms中断一次
jmp main_while
mov_ rT0Count,#0
mov a,p0 ;读取p0口的状态
xor a,#0xff ;与p0口的值进行异或运算
mov p0,a ;异或后的值再赋给p0口
jmp main_while ;主程序循环
t0_interrupt:
mov rAcc_Buf,a ;Push acc to rAcc_Buf 保存ACC 的值。
mov a,pflag
b0mov rFlag_Buf,a ;Push acc to rFlag_Buf 保存PFLAG的状态值。
b0bts1 ft0ien ; 检查T0 使能位是否置位
jmp EXIT_T0 ; T0IEN = 0,退出中断。
b0bts1 ft0irq ; 检查T0 中断请求标志是否置位
jmp EXIT_T0 ; T0IRQ = 0,退出中断。
b0bclr ft0irq ; 清T0IRQ。
mov_ t0c,#CT0C_INIT_DATA ; 初始化T0C = b2H。宏指令,设置T0 间隔时间= 10 ms。重新装入初值
incms rT0Count ;t0计算变量加一
EXIT_T0:
; mov a,#rFlag_Buf ;
; b0mov pflag,a ;Pop rFlag_Buf to pflag,恢复PFLAG
b0mov pflag,#rFlag_Buf ;Pop rFlag_Buf to pflag,恢复PFLAG
mov a,rAcc_Buf ;Pop rAcc_Buf to acc, 恢复ACC
RETI ; 退出中断。
endp
-
51单片机使用T0定时器显示数码管
2021-11-29 21:21:59#include "reg52.h" typedef unsigned int u16; typedef unsigned char u8; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4;...u16 code numList[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0xff,0x67,0x77,0x7c,0x39,...#include "reg52.h" typedef unsigned int u16; typedef unsigned char u8; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; u16 code numList[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0xff,0x67,0x77,0x7c,0x39,0x5e,0x79,0x71}; void setInterrup(){ TH0=0xfc; TL0=0x18; TMOD=1; TR0=1; EA=1; ET0=1; } void main(){ setInterrup(); while(1); } void setInterGrammer() interrupt 1 { static u16 count; static u8 num; TH0=0xfc; TL0=0x18; count++; if(count==1000){ count=0; P0=numList[num]; if(num==15){ num=0; }else{ num++; } LSA=1; LSB=1; LSC=1; } }
-
单片机C语言实例42:用定时器T0查询方式P2口8位控制LED闪烁.txt
2021-10-05 23:16:26单片机C语言实例42:用定时器T0查询方式P2口8位控制LED闪烁.txt -
T0的定时器
2013-01-14 18:46:08本文档是用c语言编辑的定时器,其中有计时器的原理和c语言的源代码, -
51单片机定时器总结
2020-08-28 19:34:35C/T这一位用来控制定时器工作方式。本来T上面有一横表示低电平有效。c为计数,也即是及外部脉冲的个数,也会是定时器溢出及中断。GATE这一位用来设定外部中断脉冲是否可启动定时器。 意思就是当GATE=1时,定时器的... -
MC51单片机T0定时器中断源代码(C语言)
2011-04-30 19:55:29简单的T0定时器实现中断,LED灯可接P1.0口 实现一秒钟一闪 -
定时器(80C51单片机汇编语言编程)
2020-07-25 17:37:33本文给大家分享了定时器(80C51单片机汇编语言编程)。 -
STC12系列定时器T0,T0配置封装.rar
2019-12-25 22:07:05ConfigTimer(TIMER0,1);//TIMER0,TIMER1配置T0,T1 ConfigTimer(TIMER0,1);//TIMER0,TIMER1配置T0,T1 -
定时器T0赋初值的计算方式
2022-02-15 15:57:46定时器T0赋初值的计算方式 -
STC15W4K32S4 系列 T0定时器输出时钟
2016-03-09 09:31:46T0的时钟输出引脚是在T0CLKO/P3.5。...当其为1时,允许T0定时器对外输出时钟,输出时钟频率 = T0溢出率 / 2。当其为0时,不允许T0定时器对外输出时钟。(T0的溢出率是指每秒T0上溢的次数)。 我们还可以选择 -
定时器T0的应用
2019-09-10 18:32:57定时器T0,方式0 定时器T0,方式1 定时器T0,方式2 定时器T1 ,方式3 -
利用T0定时器定时 100ms,每当定时时间到就使 P1.7 求反
2016-01-25 11:36:56利用T0定时器定时100ms,每当定时时间到就使 P1.7 求反。也就是使二极管亮100ms,灭100ms,周而复始。请帮忙把程序写出来,谢谢了!!! 悬赏分:20 - 解决时间:2009-12-4 17:41 ;--------------------------------... -
C51单片机运用定时器T0中断实现电子时钟
2020-08-10 17:15:10C51单片机运用定时器T0中断实现电子时钟,含有原理图和相关程序设计。 -
51单片机定时器/计数器T0|T1的四种工作方式
2020-06-23 15:27:14• 选择方式0、方式1、方式2时,T0|T1的工作情况相同 • 选择方式3时,T0|T1的工作情况不同 方式0:13位定时器/计数器,TH0的高8位,TL0的低5位 方式1:16位定时器/计数器,TH0的高8位,TL0的低8位 方式2:自动重... -
51单片机定时器(T0/T1)的使用与配置流程
2020-03-10 12:27:07如:TMOD=0x01 // 0000 0001 GATE=0,定时器仅受TCON寄存器中TRx(x=0,1)来控制 GATE=1,定时器TCON寄存器中TRx(x=0,1)和外部中断引(INT0或INT1)上的电平状态来共同控制。 C/T=1,为计数器模式; ... -
最新单片机仿真 用定时器T0的中断实现长时间定时
2022-05-21 08:24:00最新单片机仿真 用定时器T0的中断实现长时间定时最新单片机仿真 用定时器T0的中断实现长时间定时最新单片机仿真 用定时器T0的中断实现长时间定时最新单片机仿真 用定时器T0的中断实现长时间定时最新单片机仿真 用... -
最新单片机仿真 用定时器T0的中断控制1位LED闪烁
2022-05-21 08:23:24最新单片机仿真 用定时器T0的中断控制1位LED闪烁最新单片机仿真 用定时器T0的中断控制1位LED闪烁最新单片机仿真 用定时器T0的中断控制1位LED闪烁最新单片机仿真 用定时器T0的中断控制1位LED闪烁最新单片机仿真 用... -
STC15 最简单的采用T0/T2定时器输出可控频率PWM波
2020-01-19 09:21:41是用STC15W系列单片机(本例直接可用STC15W401-408AS的MCU)直接测试功能的KEIL4工程。经过任意T0/T2定时器,输出可控频率的PWM波型,占空比50%。 -
用定时器T0查询方式P2口8位控制LED闪烁-综合文档
2021-05-23 08:43:44用定时器T0查询方式P2口8位控制LED闪烁 -
最新单片机仿真 用定时器T0的中断实现渴望主题曲的播放
2022-05-21 08:23:41最新单片机仿真 用定时器T0的中断实现渴望主题曲的播放最新单片机仿真 用定时器T0的中断实现渴望主题曲的播放最新单片机仿真 用定时器T0的中断实现渴望主题曲的播放最新单片机仿真 用定时器T0的中断实现渴望主题曲的... -
最新单片机仿真 用定时器T0控制输出高低宽度不同的矩形波
2022-05-21 08:24:17最新单片机仿真 用定时器T0控制输出高低宽度不同的矩形波最新单片机仿真 用定时器T0控制输出高低宽度不同的矩形波最新单片机仿真 用定时器T0控制输出高低宽度不同的矩形波最新单片机仿真 用定时器T0控制输出高低宽度... -
定时器T0模拟串口程序设计
2020-07-31 15:37:34实现功能:定时器T0模拟串口 使用芯片:STC15F104E 晶振:内部晶振 11.0592MHZ 编译环境:Keil -
最新单片机仿真 用定时器T0查询方式P2口8位控制LED闪烁
2022-05-21 08:22:09最新单片机仿真 用定时器T0查询方式P2口8位控制LED闪烁最新单片机仿真 用定时器T0查询方式P2口8位控制LED闪烁最新单片机仿真 用定时器T0查询方式P2口8位控制LED闪烁最新单片机仿真 用定时器T0查询方式P2口8位控制LED... -
用定时器T0的中断实现长时间定时-综合文档
2021-05-23 08:43:28用定时器T0的中断实现长时间定时