N76E003之定时器3
定时器3是一个16位自动重装载,向上计数定时器。用户可以通过配置T3PS[2:0] (T3CON[2:0])选择预分频,并写入重载值到R3H 和R3L寄存器来决定它的溢出速率。用户可以设置TR3 (T3CON.3)来开始计数。当计数跨过FFFFH,TF3 (T3CON.4)置为1,且R3H 和R3L寄存器的内容重载到内部16位计数器。如果ET3 (EIE1.1)置为1,定时器3中断服务程序被执行。当进入中断服务程序,TF3会被硬件自动清零。
定时器3同时也用作串口波特率产生定时器,详细内容请参考章节13.5“波特率”



用户可以设置TR3 (T3CON.3)来开始计数。当计数跨过
FFFFH,TF3 (T3CON.4)置为1,且R3H 和R3L寄存器的内容重载到内部16位计数器。

如果ET3 (EIE1.1)置为1,定时器3中断服务程序被执行。当进入中断服务程序,TF3会被硬件自动清零。

定时器3同时也用作串口波特率产生定时器,详细内容请参考章节13.5“波特率”
波特率
串口的不同模式的波特率时钟源和速度是完全不同的。详见表 13–3. 用于设定不同的波特率。
在模式1或模式3,串口0的波特率时钟源可通过BRCK (T3CON.5)选择定时器1或定时器3。对于串口1,只有采用定时器3作为唯一的时钟源。

当采用定时器1作为波特率发生器,需要关闭定时器1中断。定时器1可配置为计数器或是定时器,三种工作模式都可以。典型应用中,会配置为定时器工作在自动重装载模式(定时器模式2)。如果采用定时器3作为波特率发生器,同样也需要关闭定时器3中断。

对应算式如下:
#ifdef FOSC_160000
RH3 = HIBYTE(65536 - (1000000/u32Baudrate)-1); /*16 MHz */
RL3 = LOBYTE(65536 - (1000000/u32Baudrate)-1); /*16 MHz */
#endif
#ifdef FOSC_166000
RH3 = HIBYTE(65536 - (1037500/u32Baudrate)); /*16.6 MHz */
RL3 = LOBYTE(65536 - (1037500/u32Baudrate)); /*16.6 MHz */
#endif
#include "N76E003.h"
#include "SFR_Macro.h"
#include "Function_define.h"
#include "Common.h"
#include "Delay.h" #define RELOAD_VALUE_H (65536-1500)/256
#define RELOAD_VALUE_L (65536-1500)%256 /************************************************************************************************************
* TIMER 2 interrupt subroutine
************************************************************************************************************/
void Timer3_ISR (void) interrupt
{
clr_TF3;
P12 = ~P12; //P0.2 toggle when TF3 interrupt
printf("\n TM3 INT 0x%bX", RH3);
} /************************************************************************************************************
* Main function
************************************************************************************************************/
void main (void)
{ Set_All_GPIO_Quasi_Mode;
InitialUART0_Timer1(); RH3 = RELOAD_VALUE_H; //initial counter values
RL3 = RELOAD_VALUE_L; set_ET3; //enable Timer3 interrupt
set_EA; //enable interrupts
set_TR3; //Timer3 run while();
}
上面这个程序利用定时器一产生波特率,利用定时器3来进入中断。
下面这个例程是产生串口波特率的(串口一)
void InitialUART1_Timer3(UINT32 u32Baudrate) //use timer3 as Baudrate generator
{
P02_Quasi_Mode; //Setting UART pin as Quasi mode for transmit
P16_Quasi_Mode; //Setting UART pin as Quasi mode for transmit SCON_1 = 0x50; //UART1 Mode1,REN_1=1,TI_1=1
T3CON = 0x08; //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1), UART1 in MODE 1
clr_BRCK; //timer 1 #ifdef FOSC_160000
RH3 = HIBYTE( - (/u32Baudrate)-); /*16 MHz */
RL3 = LOBYTE( - (/u32Baudrate)-); /*16 MHz */
#endif
#ifdef FOSC_166000
RH3 = HIBYTE( - (/u32Baudrate)); /*16.6 MHz */
RL3 = LOBYTE( - (/u32Baudrate)); /*16.6 MHz */
#endif
set_TR3; //Trigger Timer3
}
#define HIBYTE(v1) ((UINT8)((v1)>>8)) //v1 is UINT16
#define LOBYTE(v1) ((UINT8)((v1)&0xFF))
SCON_1 = 0x50; //UART1 Mode1,REN_1=1,TI_1=1


T3CON = 0x08; //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1), UART1 in MODE 1



#ifdef FOSC_160000
RH3 = HIBYTE( - (/u32Baudrate)-); /*16 MHz */
RL3 = LOBYTE( - (/u32Baudrate)-); /*16 MHz */
#endif
#ifdef FOSC_166000
RH3 = HIBYTE( - (/u32Baudrate)); /*16.6 MHz */
RL3 = LOBYTE( - (/u32Baudrate)); /*16.6 MHz */
#endif
set_TR3; //Trigger Timer3

N76E003之定时器3的更多相关文章
- N76E003的定时器/计数器 0和1
定时器/计数器 0和1N76E003系列定时器/计数器 0和1是2个16位定时器/计数器.每个都是由两个8位的寄存器组成的16位计数寄存器. 对于定时器/计数器0,高8位寄存器是TH0. 低8位寄存器 ...
- N76E003之WDT(看门狗定时器)
N76E003提供一个看门狗定时器(WDT),它可以配置成一个超时复位定时器用于复位整个设备.一旦由于外界干扰设备进入非正常状态或挂起,看门狗可以复位恢复系统.这有用于监测系统运行以提高系统可靠性.对 ...
- N76E003之IIC
I2C 总线提供了一种串行通信方式,用在 MCU 与 EEPROM,LCD模块,温度传感器等等之间控制.I2C 用两条线 (数据线SDA 和时钟线 SCL) 在设备间传输数据.I2C 总线用作主机与从 ...
- N76E003之串口
N76E003包含两个具备增强的自动地址识别和帧错误检测功能的全双工串口.由于两个串口的控制位是一样的,为了区分两个串口控制位,串口1的控制位以“_1”结尾(例如SCON_1).下述详例以串口0为例. ...
- N76E003的学习之路(一)
N76E003是8051内核的一款单片机MCU,它提供丰富的特殊功能模块,包括: 1KRAM其中包括256字节SRAM,768字节XRAM. 最多可达18个标准管脚. 两组标准16位定时器/计数器:定 ...
- N76E003学习之路(二)
最近一直在想N76E003和STM8M003的对比情况,在网上找了不少资料,看了不少文档,具体总结如下: STM8S003F3P6:一共20个脚,最多支持16个GPIO,支持16个外部中断:2个16位 ...
- 单片机成长之路(51基础篇)- 024 基于 N76E003 的按键按键状态机
前端时间要用按键,搞了个状态机(如图): main.c #include <N76E003.H> #include <SFR_Macro.h> //N76E003 SFR寄存器 ...
- 单片机成长之路(51基础篇) - 023 N76e003 系统时钟切换到外部时钟
N76e003切换到外部时钟的资料很少(因为N76e003的片子是不支持无源晶振的,有源晶振的成本又很高,所以网上很少有对N76e003的介绍).有图有真相: 代码如下: main.c #includ ...
- 几款一元单片机对比:CMS8S5880、STM8S003、N76E003
大概17年开始,STM8S003的价格被贸易商炒货,变得很不稳定,一度上涨到2~3元,因为市场需求大增,小家电.无线充和一些简单功能的产品,本人就有在空气净化器.433M触摸开关.数据收发模块.红外控 ...
随机推荐
- FPGA静态时序分析——IO口时序(Input Delay /output Delay)(转载)
转载地址:http://www.cnblogs.com/linjie-swust/archive/2012/03/01/FPGA.html 1.1 概述 在高速系统中FPGA时序约束不止包括内部时钟 ...
- Eclipse中配置resin 4.x
开发web项目时,你还困扰在,反复启动web容器的痛苦中么?也许会有人说,用调试模式.但是如果涉及到配置文件或者service类,还是不得不重启web容器吧,而且偶尔会出现抽风情况,没生效的情况(这时 ...
- 【Html】Clipboard.js 实现点击复制,剪切板操作
可以使用cdn 或者直接下载 设置好引用路径(百度云下载) <script type="text/javascript" src="./dist/clipboard ...
- (笔记)Mysql命令mysqldump:备份数据库
mysqldump命令用来备份数据库. mysqldump命令在DOS的[url=file://\\mysql\\bin]\\mysql\\bin[/url]目录下执行. 1) 导出整个数据库(导出文 ...
- (笔记)Linux下的ioctl()函数详解
我这里说的ioctl函数是指驱动程序里的,因为我不知道还有没有别的场合用到了它,所以就规定了我们讨论的范围.写这篇文章是因为我前一阵子被ioctl给搞混了,这几天才弄明白它,于是在这里清理一下头脑. ...
- (笔记)Linux中的终端、控制台、tty、pty
1>tty(终端设备的统称): tty一词源于teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘阅读和发送信息的东西,后来这东西被键盘与显示器 ...
- lua----------------使用VS2015搭建lua开发环境的一些侥幸成功经验,
所以本篇博文介绍在Windows平台下,使用VS2015搭建lua开发环境的一些侥幸成功经验,安装过程参考网上教程,安装过程如下(参考http://www.byjth.com/lua/33.html) ...
- POI写docx文件table中的单元格水平、垂直对齐
核心示例代码 垂直对齐 XWPFTableCell cell = table.getRow(i).getCell(j); cell.setVerticalAlignment(XWPFTableCell ...
- CentOS7 从管理员组中 新增/删除用户
$ sudo usermod -aG wheel usera #增加 $ sudo usermod -G usera usera # 删除
- [mysql] linux下使用yum安装mysql
From: http://www.2cto.com/database/201207/141878.html linux下使用yum安装mysql 1.安装 查看有没有安装过: ...