#STC89C52RC单片机特点.docx

上传人:b****7 文档编号:16512981 上传时间:2023-07-14 格式:DOCX 页数:17 大小:18.38KB
下载 相关 举报
#STC89C52RC单片机特点.docx_第1页
第1页 / 共17页
#STC89C52RC单片机特点.docx_第2页
第2页 / 共17页
#STC89C52RC单片机特点.docx_第3页
第3页 / 共17页
#STC89C52RC单片机特点.docx_第4页
第4页 / 共17页
#STC89C52RC单片机特点.docx_第5页
第5页 / 共17页
#STC89C52RC单片机特点.docx_第6页
第6页 / 共17页
#STC89C52RC单片机特点.docx_第7页
第7页 / 共17页
#STC89C52RC单片机特点.docx_第8页
第8页 / 共17页
#STC89C52RC单片机特点.docx_第9页
第9页 / 共17页
#STC89C52RC单片机特点.docx_第10页
第10页 / 共17页
#STC89C52RC单片机特点.docx_第11页
第11页 / 共17页
#STC89C52RC单片机特点.docx_第12页
第12页 / 共17页
#STC89C52RC单片机特点.docx_第13页
第13页 / 共17页
#STC89C52RC单片机特点.docx_第14页
第14页 / 共17页
#STC89C52RC单片机特点.docx_第15页
第15页 / 共17页
#STC89C52RC单片机特点.docx_第16页
第16页 / 共17页
#STC89C52RC单片机特点.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

#STC89C52RC单片机特点.docx

《#STC89C52RC单片机特点.docx》由会员分享,可在线阅读,更多相关《#STC89C52RC单片机特点.docx(17页珍藏版)》请在冰点文库上搜索。

#STC89C52RC单片机特点.docx

#STC89C52RC单片机特点

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,实际工作频率可达48MHz

4.用户应用程序空间为8K字节

5.片上集成512字节RAM

6.通用I/O口<32个)复位后为:

,P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。

7.ISP<在系统可编程)/IAP<在应用可编程),无需专用编程器,无需专用仿真器,可通过串口

8.具有EEPROM功能

9.具有看门狗功能

10.共3个16位定时器/计数器。

即定时器T0、T1、T2

11.外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒

12.通用异步串行口

13.工作温度范围:

-40~+85℃<工业级)/0~75℃<商业级)

14.PDIP封装

STC89C52RC单片机的工作模式

掉电模式:

典型功耗<0.1μA,可由外部中断唤醒,中断返回后,继续执行原程序

空闲模式:

典型功耗2mA典型功耗

正常工作模式:

典型功耗4Ma~7mA典型功耗

掉电模式可由外部中断唤醒,适用于水表、气表等电池供电系统及便携设备

STC89C52RC引脚功能说明

VCC<40引脚):

电源电压

VSS<20引脚):

接地

P0端口

P0口是一个漏极开路的8位双向I/O口。

作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入每个引脚能驱动写入“1”时,可以作为高阻抗输入。

在访问外部程序和数据存储器时在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线位数据的复用总线。

此时,P0口内部上拉电阻有效。

在FlashROM编在程时,P0端口接收指令字节端口接收指令字节;而在校验程序时,则输出指令字节则输出指令字节。

验证时,要求外接上拉电阻。

P1端口

P1口是一个带内部上拉电阻的8位双向I/O口。

P1的输出缓冲器可驱动<吸收或者输出电流方式)4个TTL输入。

对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。

P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流<)。

此外,P1.0和P1.1还可以作为定时器/计数器2的外部技术输入

在对FlashROM编程和程序校验时,P1接收低8位地址。

表XXP1.0和P1.1引脚复用功能

P2端口

P2口是一个带内部上拉电阻的8位双向I/O端口。

P2的输出缓冲器可以驱动<吸收或输出电流方式)4个TTL输入。

对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。

P2作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流

在访问外部程序存储器和16位地址的外部数据存储器<如执行“MOVX@DPTR”指令)时,P2送出高8位地址。

在访问8位地址的外部数据存储器<如执行“MOVX@R1”指令)时,P2口引脚上的内容<就是专用寄存器

在对FlashROM编程和程序校验期间,P2也接收高位地址和一些控制信号。

P3端口

P3是一个带内部上拉电阻的8位双向I/O端口。

P3的输出缓冲器可驱动<吸收或输出电流方式)4个TTL输入。

对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。

P3做输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流<)。

在对FlashROM编程或程序校验时,P3还接收一些控制信号。

P3口除作为一般I/O口外,还有其他一些复用功能,如下表所示:

表XXP3口引脚复用功能复用功能

RST<9引脚):

复位输入。

当输入连续两个机器周期以上高电平时为有效,用来完成单片机单片机的复位初始化操作。

看门狗计时完成后,RST引脚输出96个晶振周期的高电平。

特殊寄存器AUXR<地址8EH)上的DISRTO位可以使此功能无效。

DISRTO默认状态下,复位高电平有效。

ALE/ROG<30引脚)地址锁存控制信号:

在Flash编程时,此引脚

在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。

然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。

如果需要,通过将地址位8EH的SFR的第0位置“1”,ALE操作将无效。

这一位置“1”,ALE仅在执行MOVX或MOV指令时有效。

否则,ALE将被微弱拉高。

这个ALE使能标志位<地址位8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。

外部程序存储器选通信号

通信号。

当AT89C51RC从外部程序存储器执行外部代码时,SEN在每个机器周期被激活两次,而访问外部数据存储器时,SEN将不被激活。

A/VPP<31引脚)访问外部程序存储器控制信号。

为使能从0000H到FFFFH的外部程序存储器读取指令,A必须接GND。

注意加密方式1时,A将内部锁定位RESET。

为了执行内部程序指令,A应该接VCC。

在Flash编程期间,A也接收12伏VPP电压。

XTAL1<19引脚):

振荡器反相放大器和内部时钟发生电路的输入端。

XTAL2<18引脚):

振荡器反相放大器的输入端。

#include

#include//_nop_(>。

延时函数用

#defineucharunsignedchar

#defineuintunsignedint

sbitk1=P1^0。

sbitk2=P1^1。

sbitk3=P1^2。

sbittemp_out=P1^5。

sbithumi_out=P1^6。

sbitIO=P3^2。

uintcount。

uchards1,ds2,ds3,ds4。

ucharset_temp_H,set_temp_H_shi,set_temp_H_ge。

//设定温度的变量

ucharset_temp_L,set_temp_L_shi,set_temp_L_ge。

//设定温度的变量

ucharset_humi_H,set_humi_H_ge,set_humi_H_shi。

//设置湿度的变量

ucharset_humi_L,set_humi_L_ge,set_humi_L_shi。

//设置湿度的变量

ucharU8FLAG,k,flag。

ucharU8count,U8temp。

ucharU8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata。

ucharU8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp。

ucharU8comdata。

uintU16temp1,U16temp2。

ucharser[]={0,0}。

uchari。

ucharcodedis_7[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}。

//共阳LED段码表"0""1""2""3""4""5""6""7""8""9"

voidDelay1(uintj>

{

uchari。

for(。

j>0。

j-->

{

for(i=0。

i<35。

i++>。

}

}

voidDelay_10us(void>

{

uchari=6。

for(。

i>0。

i-->。

}

voidCOM(void>

{

uchari。

for(i=0。

i<8。

i++>

{

U8FLAG=2。

//---------------------

while((!

IO>&&U8FLAG++>。

Delay_10us(>。

Delay_10us(>。

//Delay_10us(>。

U8temp=0。

if(IO>U8temp=1。

U8FLAG=2。

while((IO>&&U8FLAG++>。

//----------------------

if(U8FLAG==1>break。

U8comdata<<=1。

U8comdata|=U8temp。

}

}

//--------------------------------

voidRH(void>

{

IO=0。

Delay1(50>。

IO=1。

Delay_10us(>。

Delay_10us(>。

Delay_10us(>。

Delay_10us(>。

IO=1。

if(!

IO>

{

U8FLAG=2。

while((!

IO>&&U8FLAG++>。

U8FLAG=2。

while((IO>&&U8FLAG++>。

COM(>。

U8RH_data_H_temp=U8comdata。

COM(>。

U8RH_data_L_temp=U8comdata。

COM(>。

U8T_data_H_temp=U8comdata。

COM(>。

U8T_data_L_temp=U8comdata。

COM(>。

U8checkdata_temp=U8comdata。

IO=1。

U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp>。

if(U8temp==U8checkdata_temp>

{

U8RH_data_H=U8RH_data_H_temp。

U8RH_data_L=U8RH_data_L_temp。

U8T_data_H=U8T_data_H_temp。

U8T_data_L=U8T_data_L_temp。

U8checkdata=U8checkdata_temp。

}

}

}

voidxiaoyin(>

{P2=0XFF。

P0=0XFF。

Delay_10us(>。

}

voiddisp(>

{

P2=0xfe。

P0=dis_7[ds1]。

Delay1(5>。

xiaoyin(>。

P2=0xfd。

P0=dis_7[ds2]。

Delay1(5>。

xiaoyin(>。

P2=0xfb。

P0=dis_7[ds3]。

Delay1(5>。

xiaoyin(>。

P2=0xf7。

P0=dis_7[ds4]。

Delay1(5>。

xiaoyin(>。

}

voiddisp_settemp_H(>

{

P2=0xfe。

P0=0x87。

Delay1(1>。

xiaoyin(>。

P2=0xfd。

P0=0x89。

Delay1(1>。

xiaoyin(>。

P2=0xf7。

P0=dis_7[set_temp_H_ge]。

Delay1(1>。

xiaoyin(>。

P2=0xfb。

P0=dis_7[set_temp_H_shi]。

Delay1(1>。

xiaoyin(>。

}

voiddisp_settemp_L(>

{

P2=0xfe。

P0=0x87。

Delay1(1>。

xiaoyin(>。

P2=0xfd。

P0=0xc7。

Delay1(1>。

xiaoyin(>。

P2=0xf7。

P0=dis_7[set_temp_L_ge]。

Delay1(1>。

xiaoyin(>。

P2=0xfb。

P0=dis_7[set_temp_L_shi]。

Delay1(1>。

xiaoyin(>。

}

voiddisp_sethumi_H(>

{

P2=0xfe。

P0=0x89。

Delay1(1>。

xiaoyin(>。

P2=0xfd。

P0=0x89。

Delay1(1>。

xiaoyin(>。

P2=0xf7。

P0=dis_7[set_humi_H_ge]。

Delay1(1>。

xiaoyin(>。

P2=0xfb。

P0=dis_7[set_humi_H_shi]。

Delay1(1>。

xiaoyin(>。

}

voiddisp_sethumi_L(>

{P2=0xfe。

P0=0x89。

Delay1(1>。

xiaoyin(>。

P2=0xfd。

P0=0xc7。

Delay1(1>。

xiaoyin(>。

P2=0xf7。

P0=dis_7[set_humi_L_ge]。

Delay1(1>。

xiaoyin(>。

P2=0xfb。

P0=dis_7[set_humi_L_shi]。

Delay1(1>。

xiaoyin(>。

}

voidkey_scan(>

{

if(k1==0>

{

while(k1==0>。

flag++。

if(flag==5>

flag=0。

}

if(flag==1>

{

while(k1==1>

{

if(k2==0>

{while(k2==0>。

set_temp_H++。

if(set_temp_H==100>

set_temp_H=0。

}

if(k3==0>

{while(k3==0>。

set_temp_H--。

if(set_temp_H==-1>

set_temp_H=100。

}

set_temp_H_ge=set_temp_H%10。

set_temp_H_shi=set_temp_H/10。

disp_settemp_H(>。

}

iapEraseSector(0x02000>。

iapProgramByte(0x02008,set_temp_H>。

delay(20>。

}

if(flag==2>

{

while(k1==1>

{

if(k2==0>

{while(k2==0>。

set_temp_L++。

if(set_temp_L==100>

set_temp_L=0。

}

if(k3==0>

{while(k3==0>。

set_temp_L--。

if(set_temp_L==-1>

set_temp_L=100。

}

set_temp_L_ge=set_temp_L%10。

set_temp_L_shi=set_temp_L/10。

disp_settemp_L(>。

}

iapEraseSector(0x02200>。

iapProgramByte(0x02208,set_temp_L>。

delay(20>。

}

//

if(flag==3>

{

while(k1==1>

{

if(k2==0>

{while(k2==0>。

set_humi_H++。

if(set_humi_H==100>

set_humi_H=0。

}

if(k3==0>

{while(k3==0>。

set_humi_H--。

if(set_humi_H==-1>

set_humi_H=100。

}

set_humi_H_ge=set_humi_H%10。

set_humi_H_shi=set_humi_H/10。

disp_sethumi_H(>。

}

iapEraseSector(0x02400>。

iapProgramByte(0x02408,set_humi_H>。

delay(20>。

}

//

if(flag==4>

{

while(k1==1>

{

if(k2==0>

{while(k2==0>。

set_humi_L++。

if(set_humi_L==100>

set_humi_L=0。

}

if(k3==0>

{while(k3==0>。

set_humi_L--。

if(set_humi_L==-1>

set_humi_L=100。

}

set_humi_L_ge=set_humi_L%10。

set_humi_L_shi=set_humi_L/10。

disp_sethumi_L(>。

}

iapEraseSector(0x02600>。

iapProgramByte(0x02608,set_humi_L>。

delay(20>。

}

}

voidconvdat(>

{

ds1=U8RH_data_H/10。

ds2=U8RH_data_H%10。

ds3=U8T_data_H/10。

ds4=U8T_data_H%10。

}

voidbijiao(>

{

if(U8RH_data_H

humi_out=0。

if(U8RH_data_H>set_humi_H>

humi_out=1。

if(U8T_data_H

temp_out=0。

if(U8T_data_H>set_temp_H>

temp_out=1。

}

/****************主函数************************/

voidmain(>

{

set_temp_H=iapReadByte(0x02008>。

set_temp_L=iapReadByte(0x02208>。

set_humi_H=iapReadByte(0x02408>。

set_humi_L=iapReadByte(0x02608>。

while(1>

{key_scan(>。

RH(>。

convdat(>。

disp(>。

bijiao(>。

}

}

//

//***********************结束**************************//

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2