4、SONIX单片机TC0、TC1基本定时与计数功能
TC0与TC1的功能和使用方法是一样的,所以这里只介绍TC0
与定时器TC0相关的寄存器共有5个;TC0M,TC0C,INTRQ,INTEN,TC0R
一、TC0M模式寄存器
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
|
TC0M |
TC0ENB |
TC0rate2 |
TC0rate1 |
TC0rate0 |
TC0CKS |
ALOAD0 |
TC0OUT |
PWM0OUT |
读/写 |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
复位 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Bit0;PWM0OUT;pwm输出控制位
0=禁止pwm0输出
1=使能pwm0输出,占空比由TC0OUT和ALOAD0决定
Bit1;TC0OUT;仅当PWM0OUT =0时有效
0=禁止,p54作为普通IO口使用
1=使能,p54输出TC0OUT信号
Bit2;ALOAD0,自动装载控制。仅当PWM0OUT = 0 时有效。
0 = 禁止 TC0自动装载;
1 = 使能 TC0 自动装载。
Bit3;TC0CKS:TC0 时钟信号控制位。
0 = 内部时钟(Fcpu或 Fosc);
1 = 外部时钟,由 P0.0/INT0输入。
Bit6~bit4;T0rate2~T0rate0;T0分频选择位
T0时钟由CPU时钟分频而来,分频比如下;
T0rate2~T0rate0 |
分频比 |
000 |
fCPU/256 |
001 |
fCPU/125 |
010 |
fCPU/64 |
011 |
fCPU/32 |
100 |
fCPU/16 |
101 |
fCPU/8 |
110 |
fCPU/4 |
111 |
fCPU/2 |
Bit7;T0ENB;T0使能位,
0=不使能
1=使能
注:若 TC0CKS=1,则TC0 用作外部事件计数器,此时不需要考虑TC0RATE 的设置,P0.0 口无中断信号(P00IRQ=0)
二、TC0C计数寄存器
TC0是8位的计数器,计数范围为0-255,到255+1就溢出,
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
|
TC0C |
TC0C7 |
TC0C6 |
TC0C5 |
TC0C4 |
TC0C3 |
TC0C2 |
TC0C1 |
TC0C0 |
读/写 |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
复位 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
当TC0时钟来源不同时,TC0C的计数范围也不一样,当TC0M寄存器中TC0CKS0= 0=计数脉冲来源为内部时钟(Fcpu或 Fosc),计数范围由PWM0OUT、TC0OUT和ALOAD0决定。当TC0CKS0=1 =为外部计数模式,由 P0.0/INT0输入。计数范围为0-256;
TC0CKS0 |
PWM0OUT |
TC0OUT |
ALOAD0 |
TC0C范围 |
计数多少次溢出 |
0 |
0 |
x |
x |
00H-0FFH |
256 |
1 |
0 |
0 |
00H-0FFH |
256 |
|
1 |
0 |
1 |
00H-3FH |
64 |
|
1 |
1 |
0 |
00H-1FH |
32 |
|
1 |
1 |
1 |
00H-0FH |
16 |
|
1 |
-- |
-- |
-- |
00H-0FFH |
256 |
TC0C初值=256-(T0溢出间隔时间*时钟速度)
例;TC0C定时10ms,fCPU=1m,TC0rate=010=fCPU/64,那么
TC0C初值=256-(T0溢出间隔时间*时钟速度)
=256-(10ms*(fcpu/64))
=64H
三、TC0R自动重装寄存器
TC0 的自动装载功能由 TC0M的 ALOAD0位控制。当 TC0C溢出时, TC0R的值自动装入 TC0C中。这样在使用的过程中就不需要在中断中重新赋值。
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
|
TC0R |
TC0R7 |
TC0R6 |
TC0R5 |
TC0R4 |
TC0R3 |
TC0R2 |
TC0R1 |
TC0R0 |
读/写 |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
复位 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
TC0R初值=256-(T0溢出间隔时间*时钟速度),计算方法和TC0C一样。
四、中断请求寄存器INTRQ
五、中断请求使能寄存器INTEN
名称 |
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
复位 |
INTRQ |
ADCIRQ |
TC1IRQ |
TC0IRQ |
T0IRQ |
SIOIRQ |
P02IRQ |
P01IRQ |
P00IRQ |
00000000 |
INTEN |
ADCIEN |
TC1IEN |
TC0IEN |
T0IEN |
SIOIEN |
P02IEN |
P01IEN |
P00IEN |
00000000 |
置位寄存器INTEN的相应位可以使能相应的中断。
当中断发生时,寄存器INTRQ相应的位会被置1,这个中断标志位需要在中断中软件清零。TC0C溢出时,如果使能了TC0中断使能,则会产生TC0中断,TC0IRQ会被置1.
例;在cpu=1M情况下,T0中断定时10ms。
#include<sn8p2612.h>
main()
{
FTC0IEN=0;//配置中断的时候最好先关闭相应中断
TC0M=0X24;//分频 fCPU/64,使能自动重装载
TC0R=0X64;//重装值
TC0C=0X64;//10ms初值
FTC0IEN=1;//开定时器T0中断
FGIE=1;//开总中断
while(1);
}
//所有中断共用一个入口,所以要在中断中查询相应的标志位的判断是哪个中断
__interrupt T0INT(void)
{
if(FTC0IRQ=0) //T0中断查询
{
FTC0IRQ=0; //标志位手动清零
//中断处理函数,该干嘛干嘛去!
}
}
例;TC0作为外部脉冲计数器
#include<sn8p2612.h>
int TC0_OVER_COUNT=0; //中断溢出次数,溢出一次为256个脉冲
main()
{
unsigned int All_Count=0; //计数总值
FTC0IEN=0; //配置中断的时候最好先关闭相应中断
TC0M=0X08; //对外部脉冲计数
FTC0IEN=1; //开定时器T0中断
FGIE=1; //开总中断
while(1)
{
All_Count=TC0_OVER_COUNT*256+TC0C; //计算外部脉冲总值
}
}
//所有中断共用一个入口,所以要在中断中查询相应的标志位的判断是哪个中断
__interrupt T0INT(void)
{
if(FTC0IRQ=0) //TC0中断查询
{
FTC0IRQ=0; //标志位手动清零
TC0_OVER_COUNT++;
}
}
4、SONIX单片机TC0、TC1基本定时与计数功能相关推荐
- 5、SONIX单片机TC0、TC1的pwm输出
TC0与TC1的功能和使用方法是一样的,所以这里只介绍TC0 与定时器TC0的pwm功能相关的寄存器共有3个;TC0M,TC0C,TC0R 一.TC0M模式寄存器 Bit7 Bit6 Bit5 Bit ...
- 单片机基础知识之定时计数器和寄存器
目录 一.定时计数器 二.什么是寄存器 三.定时器如何定时10毫秒 四.定时器编程前寄存器配置计划 五.编程定时器控制LED每隔一秒亮灭 六.AUXR特殊功能寄存器时钟的电磁辐射 一.定时计数器 1. ...
- 【003】基于51单片机的宠物自动定时、喂食系统的proteus仿真设计
一.压缩包资料(私信获取) (1). 包含基于51单片机的宠物自动定时.喂食系统的proteus仿真设计一份: (2).包含基于51单片机的宠物自动定时.喂食系统keil源代码工程文件一份: (3). ...
- 2、SONIX单片机IO口基本操作
IO口基本操作,sonix单片机每个IO口都有两个钳位保护二极管 一.IO口方向设置寄存器PnM,n代表0-5组IO口 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 ...
- 单片机-定时/计数器原理功能介绍
在单片机应用系统中,我们会需要有定时控制的功能,如定时输出,定时检测,定时扫描等. 这就是单片机中定时/计数器的功能所在,我们在此详细介绍一下计时/计数器的原理功能. 一.定时/计数器的功能原理: 定 ...
- 基于单片机智能水杯 保温杯 定时提醒喝水 温度控制的设计与实现
功能介绍 以51单片机作为主控系统: LCD1602液晶显示当前水温,定时提醒,水量变化 DS18B20检测当前水体温度: 水位传感器检测当前水位: 继电器驱动加热片进行水温加热: 定时提醒喝水,蜂鸣 ...
- 关于用51单片机内部定时器实现时钟和闹钟功能的概述
关于用51单片机内部定时器实现时钟和闹钟功能的概述 仅个人观点,欢迎大家相互学习和讨论 STC89C52单片机,内部配置了三个定时器,T0\T1\T2,其中T2定时器我们几乎不用,或者说很少用到.我们 ...
- vb串口 任意波特率_C#与单片机串口通讯,实现简单的计数功能
串行接口是一种可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件.一般完成这种功能的电路,我们称为串行接口电路. 串口通信( ...
- 定时/计数器(定时和计数的功能)、定时器中断
定时/计数器实现功能: (1)定时功能: 定时/计数器说明(最高单次计时时间是71毫秒=65535*1.085us,1.085us是机器周期): 使用51定时/计数器步骤: 定时/计算器控制寄存器: ...
最新文章
- 2022王道操作系统名词解释概念题
- 在Window Embedded CE(Wince)下使用OpenNETCF进行路由表的开发
- Linux下使用NTFS格式移动硬盘
- Django中用Jquery实现不刷新页面进行身份验证和计算器功能
- freemaker模板引擎使用详解
- shell字段拼接日期_shell 脚本字符串拼接
- html:(18):文本输入框,密码输入框,文本域
- oracle手工收集awr报告_oracle手工生成AWR报告方法记录-阿里云开发者社区
- Sentence-LDA的介绍及程序
- 分小组 java_蓝桥杯-分小组-java
- 详解 Blockchain Cuties (区块链萌宠)
- Docker 日常指令
- c语言课程性质,c语言课程的特性
- 【离散数学】单射、满射和双射的定义、区别
- 联通loid认证_光纤LOID 认证 需要填写的用户名是什么?有人说不...
- SpringBoot在controller返回一个HTML页面
- TiDB at ZaloPay Infrastructure Lesson Learned
- 2007年9月01日 - FE足球队成都之行
- http协议(转http://www.cnblogs.com/guguli/p/4758937.html)
- ubuntu16.04 安装VScode