STC89C52单片机定时器2的使用

合集下载

52单片机定时器2作为串行口波特率发生器使用(C语言程序)

52单片机定时器2作为串行口波特率发生器使用(C语言程序)

52
53 i=0;
54 while(str[i]!='\0')
55 {
56 TI=0;
57 SBUF=str[i];
58 while(!TI);
59 TI=0;
60 i++;
61 }
62 while(1);
本文是关于52单片机定时器计数器2做为串行口波特率发生器使用的例子,类似于定时器1作为波特率发生器工作在模式1下,但是不同的是:定时器2作为波特率发生器是16位自动重装的,位数比定时器1作为波特率发生器要高(定时器1作为串口波特率发生器是8位自动重装的),所以可以支持更高的传输速度,性能也比定时器1要好,老鲁推荐使用。以下程序在Keil 2和Keil 3下调时通过,下载在本校的实验板上达到预期效果。AT89C52及其以上、AT89S52及其以上、STC89C52及其以上测试正常运行。
view sourceprint?01 /*
02 程序功能:52系列单片机定时器计数器2作为串行口波特率发生器使用
03 程序设计:燕山大学 鲁信琼
04
05 晶振选择:24MHz, 如果晶振不匹配,请修改延时函数参数;P2^6口接数码管段选控制位; P2^7口接数码管位选控制位;
63 }
25 void delay_ms(uint xms)
26 {
27 uint x,y;
28 for(x=xms; x>0; x--)
29 for(y=248; y>0; y--);
30 }
31
32 // 主函数初始化,24MHz晶振 28800bps波特率,有误差,建议大家使用11.0592MHz或者22.1184MHz

STC89C52单片机定时器2的使用

STC89C52单片机定时器2的使用

STC89C52单片机定时器2的使用实现定时和计数的方法一般有:软件定时、专用电路和可编程定时器/计数器三种方法。

软件定时:执行一个循环程序进行时间延迟。

定时准确,不需要外加硬件电路,但会增加CPU 开销。

专用硬件电路定时:可以实现请精确的定时和计数,但参数调节不方波。

可编程定时器/计数器:不占用CPU 时间,能与CPU 并行工作,实现精确的定时和计数,又可以通过变成设置其工作方式和其他参数,使用方便。

以下说明仅试用宏晶的STC89C52!!定时器2:T2MOD,T2CON,TH2,TL2,RC2H,RC2L.T2MOD:0C9H(不可位寻址)000000T2OEDCENT2OE:定时器输出使能位DECN:向上/向下计数使能位。

定时器2 可配制成向上/向下计数器。

0:向上计数(模式状态) 1:向下计数(尽量不使用)T2CON:0XC8H(可位寻址)TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL2TF2:7 上/下溢出标志位,定时器2 溢出时置位,必须有用软件清零!当RCLK 或TCLK=1 时,TF2 将不会置位。

EXF2:6 定时器2 外部标志,当EXEN2=1 且T2EX 的负跳变产生捕获或重装时,EXF2 置位。

定时器2 中断使能时,EXF2=1 将使CPU 从中断向量处执行定时器2 中断子程序。

EXF2 位必须用软件清零。

在递增/递减计数器模式(DCEN=1)中,EXF2 位不会引起中断。

RCLK:5 接收时钟标志。

RCLK 置位时,定时器2 的溢出脉冲作为串口模式1 和模式3 的接收时钟。

RCLK=0 时,将定时器1 的溢出脉冲作为串口模式1 和模式3 的接收时钟。

TCLK:4 发送时钟标志位。

TCLK 置位时,定时器2 的溢出脉冲作为串口模式1 和模式3 的发送时钟。

TCLK=0 时,将定时器1 的溢出脉冲作为串口模式1 和模式3 发送时钟。

EXEN2:3 定时器2 外部使能标志。

STC89C52单片机用户手册

STC89C52单片机用户手册

STC89C52单片机用户手册一、概述STC89C52 单片机是一款高性能、低功耗的 8 位微控制器,具有丰富的片内资源和强大的功能,广泛应用于各种电子设备和控制系统中。

二、主要特点1、增强型 8051 内核,指令代码完全兼容传统 8051 单片机。

2、工作电压范围宽,可在 38V 55V 之间正常工作。

3、片内集成 8K 字节的 Flash 程序存储器,可反复擦写 1000 次以上。

4、 512 字节的片内数据存储器(RAM)。

5、拥有 32 个可编程的 I/O 口,方便连接外部设备。

6、 3 个 16 位定时器/计数器,可用于定时、计数和脉冲宽度测量等功能。

7、 8 个中断源,包括 2 个外部中断、3 个定时器中断和 2 个串行口中断,具有两级中断优先级。

8、全双工串行通信接口(UART),可方便地与其他设备进行通信。

三、引脚功能1、 VCC:电源正极,接+5V 电源。

2、 GND:电源地。

3、 P0 口:8 位漏极开路双向 I/O 口,作为地址/数据总线分时复用口。

4、 P1 口:8 位准双向 I/O 口,具有内部上拉电阻。

5、 P2 口:8 位准双向 I/O 口,作为高 8 位地址总线。

6、 P3 口:8 位准双向 I/O 口,具有第二功能。

例如,P30 为串行输入口(RXD),P31 为串行输出口(TXD)等。

四、存储结构1、程序存储器STC89C52 单片机的程序存储器空间为 8K 字节,地址范围为0000H 1FFFH。

用于存放用户编写的程序代码。

2、数据存储器数据存储器分为内部数据存储器和外部数据存储器。

内部数据存储器包括低 128 字节的 RAM(地址范围为 00H 7FH)和高 128 字节的特殊功能寄存器(SFR,地址范围为 80H FFH)。

外部数据存储器最大可扩展至 64K 字节。

五、时钟与复位1、时钟电路STC89C52 单片机可以使用内部时钟和外部时钟。

内部时钟通过在XTAL1 和 XTAL2 引脚之间连接晶振和电容来产生时钟信号。

STC89C52RC单片机手册资料

STC89C52RC单片机手册资料

STC89C52单片机用户手册[键入作者姓名][选取日期]STC89C52RC单片机介绍STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。

主要特性如下:1.增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.2.工作电压:5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)3.工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz4.用户应用程序空间为8K字节5.片上集成512字节RAM6.通用I/O口(32个),复位后为:P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。

7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片8.具有EEPROM功能9.具有看门狗功能10.共3个16位定时器/计数器。

即定时器T0、T1、T211.外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒12.通用异步串行口(UART),还可用定时器软件实现多个UART13.工作温度范围:-40~+85℃(工业级)/0~75℃(商业级)14.PDIP封装STC89C52RC单片机的工作模式掉电模式:典型功耗<0.1μA,可由外部中断唤醒,中断返回后,继续执行原程序●空闲模式:典型功耗2mA●正常工作模式:典型功耗4Ma~7mA●掉电模式可由外部中断唤醒,适用于水表、气表等电池供电系统及便携设备STC89C52RC引脚图STC89C52RC引脚功能说明VCC(40引脚):电源电压VSS(20引脚):接地P0端口(P0.0~P0.7,39~32引脚):P0口是一个漏极开路的8位双向I/O 口。

STC89C52中文手册

STC89C52中文手册

海纳电子资讯网:www.fpga-arm.com 为您提供各种IC中文资料 STC89C51RC / RD+ 系列单片机中文指南 ---高可靠 ---超低价 ---低功耗 ---无法解密STC89C51RC,STC89LE51RCSTC89C52RC,STC89LE52RCSTC89C53RC,STC89LE53RCSTC89C54RD+,STC89LE54RD+STC89C58RD+,STC89LE58RD+STC89C516RD+,STC89LE516RD+附录A: 为什么少数用户的普通8051程序烧录后,不能运行附录B: STC89LE516AD,STC89LE516X2附录C: STC89C51RC / RD+ 系列单片机 ISP (DIY)附录D: ISP Demo(演示版)软件(*.hex)及通信协议附录E: 如何实现运行中自定义下载,无仿真器时方便调试附录F: Keil C51高级语言编程的软件如何减少代码长度国内技术支援:宏晶科技(深圳) www.MCU-Memory.com support@dsp-memory.comUpdate date: 2005-2-16 型 号 最高时钟 频 率HzFlash程序存储器RAM数据存储器降低EMI看门狗双倍速P4口ISPIAPEEPROM数据指针串口UART中断源优先级定时器A/D向下兼容Winbond向下兼容Philips向下兼容Atmel 5V 3VSTC89C51 RC0-80M4K512√√√√√√1K+ 21ch+843W78E51P89C51STC89C52 RC0-80M8K512√√√√√√1K+ 21ch+843W78E52P89C52STC89C53 RC0-80M15K512√√√√√√ 21ch+843W78E54P89C54AT89C55STC89C54 RD+0-80M16K1280√√√√√√8K+ 21ch+843W78E54P89C54AT89C55STC89C58 RD+0-80M32K1280√√√√√√8K+ 21ch+843W78E58P89C58AT89C51RCSTC89C516 RD+0-80M63K1280√√√√√√ 21ch+843W78E516P89C51RD2AT89C51RD2STC89LE51 RC0-80M4K512√√√√√√1K+ 21ch+843W78LE51AT89LV51STC89LE52 RC0-80M8K512√√√√√√1K+ 21ch+843W78LE52AT89LV52STC89LE53 RC0-80M14K512√√√√√√ 21ch+843W78LE54AT89LV55STC89LE54 RD+0-80M16K1280√√√√√√8K+ 21ch+843W78LE54AT89LV55STC89LE58 RD+0-80M32K1280√√√√√√8K+ 21ch+843W78LE58AT89LV51RCSTC89LE516RD+0-80M63K1280√√√√√√ 21ch+843W78LE516P89LV51RD2AT89LV51RD2STC89LE516AD0-90M64K512√√√ 21ch+643√需要A/D转换时才选用,8路8位精度在P1.0 - P1.7口,17 个机器周期一次STC89LE516X20-90M64K512√√√√ 21ch+643√ 本应用技术手册是针对有一定8051系列(MCS-51)单片机编程基础的用户编写的。

STC89C52单片机简介

STC89C52单片机简介

STC89C52单片机介绍:单片机是指一个集成在一块芯片上的完整计算机系统。

尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。

同时集成诸如通讯接口、定时器,实时时钟等外围设备。

而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。

单片机也被称为微控制器(Microcontroler),是因为它最早被用在工业控制领域。

单片机由芯片内仅有CPU的专用处理器发展而来。

最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对提及要求严格的控制设备当中。

INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。

早期的单片机都是8位或4位的。

其中最成功的是INTEL的8031,因为简单可靠而性能不错获得了很大的好评。

此后在8031上发展出了MCS51系列单片机系统。

基于这一系统的单片机系统直到现在还在广泛使用。

随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。

90年代后随着消费电子产品大发展,单片机技术得到了巨大的提高。

随着INTEL i960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。

而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。

目前,高端的32位单片机主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,最高端的型号也只有10美元。

当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。

而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows和Linux操作系统。

单片机比专用处理器更适合应用于嵌入式系统,因此它得到了最多的应用。

定时器0的使用

定时器0的使用

- 专业电子技术交流社区 电子工程师网上家园 -
电子
第 3页
定时器 0 的使用
电子园
位。EA=1,CPU 开放中断;EA=0,CPU 禁止所有的中断请求。总允许 EA 好比一个总开关。 这里我们只需要将 ET0 和 EA 置位即可。
第五步是通过对 TCON 寄存器的操作来完成的。
各位定义如下: TF1:定时器 1 溢出标志位。当字时器 1 计满溢出时,由硬件使 TF1 置“1”,并且申请 中断。进入中断服务程序后,由硬件自动清“0”,在查询方式下用软件清“0”。 TR1:定时器 1 运行控制位。由软件清“0”关闭定时器 1。当 GATE=1,且 INT1 为高电 平时,TR1 置“1”启动定时器 1;当 GATE=0,TR1 置“1”启动定时器 1。 TF0:定时器 0 溢出标志。其功能及操作情况同 TF1。 TR0:定时器 0 运行控制位。其功能及操作情况同 TR1。 IE1:外部中断 1 请求标志。 IT1:外部中断 1 触发方式选择位。 IE0:外部中断 0 请求标志。 IT0:外部中断 0 触发方式选择位。 可见,我们只要将 TR0 置位即可。 第七步,我们需要编写自己的中断函数。 中断函数的格式如下: void 函数名(void) interrupt 中断代号{} 其中函数名是可以任意命名的,为了方便起见,我们在这里将其命名为 Timer0。后面 的终端代号根据不同类型的中断需要不同的赋值。其赋值所代表的中断类型如下:
void Timer0_Init(void); //定时器初始化
unsigned char ucCount;
//主函数 void main(void) {
- 专业电子技术交流社区 电子工程师网上家园 -
电子

STC89C52

STC89C52

STC89系列高性能单片机及其应用软件/代码/教程2007-07-06 12:52:08 阅读64 评论0 字号:大中小订阅随着电子技术的迅速发展,单片机技术的出现给现代工业测控领域带来了一次新的技术革命。

目前,单片机以其高可靠性、高性能价格比,在工业控制系统、数据采集系统、智能化仪器仪表、办公自动化等诸多领域得到极为广泛的应用,并已走入家庭,洗衣机、空调等,到处都可见到单片机的踪影。

在单片机家族的众多成员中,MCS51系列单片机以其优越的性能、成熟的技术及高可靠性和高性能价格比,迅速占领了工业测控和自动化工程应用的主要市场,成为国内单片机应用领域中的主流。

世界各大单片机厂商都在MCS51上投入了大量的资金和人力,围绕51内核,衍生出许多品种,增强51单片机的各种功能。

MCS51家族是目前在单片机领域发展最快的一个品种。

这里要向大家推荐的是新近由STC公司推出的高性价比的STC89系列单片机。

STC89系列单片机的性能STC89系列单片机是MCS-51系列单片机的派生产品。

它们在指令系统、硬件结构和片内资源上与标准8052单片机完全兼容,DIP40封装系列与8051为pin-to-pin兼容。

STC89系列单片机高速(最高时钟频率90MHz),低功耗,在系统/在应用可编程(ISP,IAP),不占用户资源。

下表是STC89系列单片机资源一览表。

AüSTC89系列单片机另外增加了768字节的片内扩展RAM,以解决众多技术人员在编程时的RAM资源严重缺乏的问题。

768字节的片内扩展RAM(地址:000H2FFH)与外部扩展RAM地址重叠,单片机可通过软件设置AUXR.1,决定是否使用片内扩展RAM,以防止可能的与外部扩展RAM的冲突,默认为使用片内扩展RAM。

片内扩展RAM的访问采用间接寻址,可通过①、MOVX A,@DPTR 或MOVX @DPTR ,A 指令访问片内扩展RAM(00H2FFH,共768字节);②、MOVX A,@Ri 或MOVX @Ri,A 指令访问片内扩展RAM(00HFFH,共256字节)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

52单片机有3个定时器,T2是一个16位自动重载的,像T0和T1的方式2一样,只不过它是16位重载,如果作为计数器或定时用,中断用的是5,就是interrupt 5,T2的引脚是P1.0口。

P1.0作为I/O 口用了以后T2计数是不行了,不过定时或是作为串口时钟还是可以的。

T2CON(T2的控制寄存器),字节地址0C8H:
0CFH 0CEH 0CDH 0CCH 0CBH 0CAH 0C9H 0C8H
TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RT2 各位的定义如下:
TF2:定时/计数器2溢出标志,T2溢出时置位,并申请中断。

只能用软件清除,但T2作为波特率发生器使用的时候,(即RCLK=1或TCLK=1),T2溢出时不对TF2置位。

EXF2:当EXEN2=1时,且T2EX引脚(P1.0)出现负跳变而造成T2的捕获或重装的时候,EXF2置位并申请中断。

EXF2也是只能通过软件来清除的。

RCLK:串行接收时钟标志,只能通过软件的置位或清除;用来选择T1(RCLK=0)还是T2(RCLK=1)来作为串行接收的波特率产生器
TCLK:串行发送时钟标志,只能通过软件的置位或清除;用来选择T1(TCLK=0)还是T2(TCLK=1)来作为串行发送的波特率产生器
EXEN2:T2的外部允许标志,只能通过软件的置位或清除;EXEN2=0:禁止外部时钟触发T2;EXEN2=1:当T2未用作串行波特率发生器时,允许外部
时钟触发T2,当T2EX引脚输入一个负跳变的时候,将引起T2的捕获
或重装,并置位EXF2,申请中断。

TR2:T2的启动控制标志;TR2=0:停止T2;TR2=1:启动T2
C/T2:T2的定时方式或计数方式选择位。

只能通过软件的置位或清除;C/T2=0:选择T2为定时器方式;C/T2=1:选择T2为计数器方式,下降沿触发。

CP/RT2:捕获/重装载标志,只能通过软件的置位或清除。

CP/RT2=0时,选择重装载方式,这时若T2溢出(EXEN2=0时)或者T2EX引脚(P1.0)出现负跳变
(EXEN2=1时),将会引起T2重装载;CP/RT2=1时,选择捕获方式,这时若T2EX 引脚(P1.0)出现负跳变(EXEN2=1时),将会引起T2捕获操作。

但是如果RCLK=1或TCLK=1时,CP/RT2控制位不起作用的,被强制工作于定时器溢出自动重装载模式。

对应郭天祥老师的52单片机板子!
/***********************************
程序编着院校南昌航空大学
晶振11.0592MHZ
T2CON(0XC8)的说明定时器2可以产生两个中断TF2和EXF2,这两个中断通过逻辑或共享一个端口
定时器2溢出时TF2置位如果定时器工作在重装模式RCAP2H和RCAP2L的值会自动装入TH2和TL2 TR2启动
TF2和TL2必须软件清零
T2MOD 必须定义sfr T2MOD= 0xC9;
扩展RCLK TCLK其中一个为高电平定时器2做波特率发生器
***********************************/
#include<reg52.h>
#include<intrins.h> // _nop_();
#define uchar unsigned char
#define uint unsigned int
sfr T2MOD = 0xC9;
sbit dula=P2^6;
sbit wela=P2^7;
sbit led=P1^7;
uchar timer2_ctr,num;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //数码管编码
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//11.0592MHZ延时函数
void delay(uint ms)
{
uint x;
while(ms--)
{
for(x=125;x>0;x--);
}
}
//初始化主函数
void init()
{
dula=wela=0; //关闭数码管显示
RCAP2H=(0XFFFF-50000)/256;
RCAP2L=(0XFFFF-50000)%256;
//TH2=RCAP2H; //会自动重装
//TL2=RCAP2L;
T2CON=0;
T2MOD=0;
IE=0XA0; //开总中断和定时器2中断TR2=1; //启动
}
void display(uchar num)
{
uchar gw,sw,bw;
bw=num/100;
sw=num%100/10;
gw=num%10;
P0=0xfe;
wela=1;
_nop_();_nop_();
wela=0;
P0=table[bw];
dula=1;
_nop_();_nop_();
dula=0;
delay(3);
P0=0xfd;
wela=1;
_nop_();_nop_();
wela=0;
P0=table[sw];
dula=1;
_nop_();_nop_();
dula=0;
delay(3);
P0=0xfb;
wela=1;
_nop_();_nop_();
wela=0;
P0=table[gw];
dula=1;
_nop_();_nop_();
dula=0;
delay(3); //显示个十百
}
void main()
{
init();
while(1)
{
display(num);
}
}
void timer2() interrupt 5
{
TF2=0; //注意!定时器2必须由软件对溢出标志位清零,硬件不能清零,这里与定时器0和定时器1不同!!!
timer2_ctr++;
if(timer2_ctr>=20) //定时50ms×20=1000ms即1秒钟,这里模拟一个60秒秒表
{
timer2_ctr=0;
led=~led;
num++;
if(num>=256)
{
num=0;
}
}
}
现象是:数码管显示0-256,
程序很简单!朋友们可以自己试试!
祝你学成!。

相关文档
最新文档