STC89C52RC单片机的特点.docx
- 文档编号:28188856
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:17
- 大小:18.36KB
STC89C52RC单片机的特点.docx
《STC89C52RC单片机的特点.docx》由会员分享,可在线阅读,更多相关《STC89C52RC单片机的特点.docx(17页珍藏版)》请在冰豆网上搜索。
STC89C52RC单片机的特点
STC89C52RC单片机介绍
STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。
主要特性如下:
1.增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.
2.工作电压:
~(5V单片机)/~(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(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/,TxD/)直接下载用户程序,数秒即可完成一片
8.具有EEPROM功能
9.具有看门狗功能
10.共3个16位定时器/计数器。
即定时器T0、T1、T2
11.外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒
12.通用异步串行口(UART),还可用定时器软件实现多个UART
13.工作温度范围:
-40~+85℃(工业级)/0~75℃(商业级)
14.PDIP封装
STC89C52RC单片机的工作模式
掉电模式:
典型功耗<μA,可由外部中断唤醒,中断返回后,继续执行原程序
空闲模式:
典型功耗2mA典型功耗
正常工作模式:
典型功耗4Ma~7mA典型功耗
掉电模式可由外部中断唤醒,适用于水表、气表等电池供电系统及便携设备
STC89C52RC引脚功能说明
VCC(40引脚):
电源电压
VSS(20引脚):
接地
P0端口(~,39~32引脚):
P0口是一个漏极开路的8位双向I/O口。
作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入每个引脚能驱动写入“1”时,可以作为高阻抗输入。
在访问外部程序和数据存储器时在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线位数据的复用总线。
此时,P0口内部上拉电阻有效。
在FlashROM编在程时,P0端口接收指令字节端口接收指令字节;而在校验程序时,则输出指令字节则输出指令字节。
验证时,要求外接上拉电阻。
P1端口(~,1~8引脚):
P1口是一个带内部上拉电阻的8位双向I/O口。
P1的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。
对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。
P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流()。
此外,和还可以作为定时器/计数器2的外部技术输入(T2)和定时器/计数器2的触发输入(T2EX),具体参见下表:
在对FlashROM编程和程序校验时,P1接收低8位地址。
表XX和引脚复用功能
P2端口(~,21~28引脚):
P2口是一个带内部上拉电阻的8位双向I/O端口。
P2的输出缓冲器可以驱动(吸收或输出电流方式)4个TTL输入。
对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。
P2作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流(I)。
在访问外部程序存储器和16位地址的外部数据存储器(如执行“MOVX@DPTR”指令)时,P2送出高8位地址。
在访问8位地址的外部数据存储器(如执行“MOVX@R1”指令)时,P2口引脚上的内容(就是专用寄存器(SFR)区中的P2寄存器的内容),在整个访问期间不会改变。
在对FlashROM编程和程序校验期间,P2也接收高位地址和一些控制信号。
P3端口(~,10~17引脚):
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引脚)地址锁存控制信号:
(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。
在Flash编程时,此引脚(ROG)也用作编程输入脉冲。
在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。
然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。
如果需要,通过将地址位8EH的SFR的第0位置“1”,ALE操作将无效。
这一位置“1”,ALE仅在执行MOVX或MOV指令时有效。
否则,ALE将被微弱拉高。
这个ALE使能标志位(地址位8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。
:
外部程序存储器选通信号(SEN)是外部程序存储器选SEN(29引脚)
通信号。
当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(); } } // //***********************结束**************************//
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STC89C52RC 单片机 特点