STC89C52RC是 STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
中文名
STC89C52
本    质
一种低耗高性能的微控制器
公    司
STC公司
特    性
低功耗、高性能CMOS8位微控制器
Flash存储器
8K
内    核
MCS-51

目录

  1. 1 标准功能
  2. 2 主要特性
  3. 3 器件参数

标准功能

编辑

具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线, 看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位 定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工 串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。

主要特性

编辑

8K字节程序存储空间;
512字节数据存储空间;
内带4K字节EEPROM存储空间;
可直接使用串口下载;

器件参数

编辑

1. 增强型8051单片机,6 时钟/ 机器周期和12 时钟/机器周期可以任意 选择,指令代码完全兼容传统8051. [1]
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 个),复位后为:P0/P1/P2/P3 是 准双向口/弱上拉, P0 口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为 I/O 口用时,需加上拉电阻。
7. ISP(在系统可编程)/IAP(在应用可编程),无需专用 编程器,无 需专用 仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程 序,数秒即可完成一片
8. 具有EEPROM 功能
9. 共3 个16 位 定时器/计数器。即定时器T0、T1、T2
10. 外部中断4 路,下降沿中断或低电平触发电路,Power Down 模式可 由外部中断低电平触发 中断方式唤醒
11. 通用异步 串行口(UART),还可用定时器软件实现多个UART
12. 工作温度范围:-40~+85℃(工业级)/0~75℃(商业级)

13. PDIP封装

#include <reg52.h>
//串口assic控制led灯
void delay02s(void)     //延时1ms子程序
{unsigned char i,j,k;for(i=18;i>0;i--)     //20    //18  2.5Kfor(j=1;j>0;j--)   //10  //20for(k=1;k>0;k--);  //248
}void delay200ms(void)      //延时200ms子程序
{unsigned char i,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--) //10  //20for(k=248;k>0;k--);    //248
}sbit led0=P2^0;
sbit led1=P2^1;
sbit led2=P2^2;
sbit led3=P2^3;
sbit led4=P2^4;
sbit led5=P2^5;sbit led6=P2^6;
sbit led7=P2^7;void start_led(char n)
{led0 = n&0x01;     n=n>>1;led1 = n&0x01;    n=n>>1;led2 = n&0x01;    n=n>>1;led3 = n&0x01;    n=n>>1;led4 = n&0x01;    n=n>>1;led5 = n&0x01;    n=n>>1;
}
unsigned char flag;
void main(void)
{   int i=30;//设置参数  TMOD = 0x20; //设定定时器1的工作方式为方式2  TH1 = 0xfd;  TL1 = 0xfd;  //装载TH1、TL1  TR1 = 1; //启动定时器1  SM0 = 0;  SM1 = 1; //设定串口工作方式为方式1  REN = 1; //允许串行接收位  EA = 1; //全局中断允许位  ES = 1; //串口中断允许位  //  start_led(0);// delay200ms();delay200ms();delay200ms();delay200ms();delay200ms();//  start_led(0xff);while(1)  {     /* 刚开始单片机缓冲寄存器为空,无数据可以显示 * 先从串口接收数据,再返回该数据 * 在中断中接收数据,同时将flag标志位置为1.说明接收到了数据 * 若接收到数据(flag == 1),说明接收到了;否则说明未接收到数据,不显示。继续判断flag数值 */  led6  = ~led6;led7  = ~led7;delay200ms();if(flag == 1)   {          start_led(P1);       //发送数据  ES = 0; //关闭串口中断,发送数据  SBUF = P1; //数据写入SBUF寄存器  while(!TI); //等待  TI = 0;  ES = 1;   flag = 0;  }         }  }  void ser() interrupt 4
{  //接收数据  P1 = SBUF;  flag = 1;  RI = 0;
} 

#include <reg52.h>//CPCI系统控制电源程序void delay02s(void)        //延时1ms子程序
{unsigned char i,j,k;for(i=18;i>0;i--)     //20    //18  2.5Kfor(j=1;j>0;j--)   //10  //20for(k=1;k>0;k--);  //248
}void delay200ms(void)      //延时200ms子程序
{unsigned char i,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--) //10  //20for(k=248;k>0;k--);    //248
}void delay_ms()
{
int i,j;for(j=110;j>0;j--);
}
sbit led0=P2^0;
sbit led1=P2^1;
sbit led2=P2^2;
sbit led3=P2^3;
sbit led4=P2^4;
sbit led5=P2^5;sbit ps_switch = P3^2;
sbit pci_rst = P2^6;
sbit ps_on = P2^7;void start_led(char n)
{led0 = n&0x01;     n=n>>1;led1 = n&0x01;    n=n>>1;led2 = n&0x01;    n=n>>1;led3 = n&0x01;    n=n>>1;led4 = n&0x01;    n=n>>1;led5 = n&0x01;    n=n>>1;
}
unsigned char flag_switchon=0;
unsigned char flag_switchFF=0;
unsigned char flag_switchOSoff=0;
unsigned char flag_switchOSen=0;
unsigned char int_cnt=0;  unsigned char flag;  void checkOSoff()
{unsigned  int i=0,k=0;flag_switchOSoff=0;while(1){if(pci_rst==0){k++;}else{break;}if(k>3000){flag_switchOSoff=1;break;}    delay_ms(); }
}void checkOSen()
{unsigned  int i=0,k=0;if(flag_switchOSen==1)return ;while(1){if(pci_rst==1){k++;}else{break;}if(k>3000){flag_switchOSen=1;break;}    delay_ms(); }
}void checkSwitch()
{unsigned  int i=0,k=0;while(1){if(ps_switch==0){k++;}else{break;}if(k>3000){break;}    delay_ms();}if(k>3000)flag_switchFF = 1;elseflag_switchFF = 0;//if(k>3)flag_switchon = 1;elseflag_switchon = 0;}void send(int t)
{ES = 0; //关闭串口中断,发送数据  SBUF = t+0x30; //P1//数据写入SBUF寄存器  while(!TI); //等待  TI = 0;  ES = 1;
}
int status=0;
void main(void)
{   int i=0;//设置参数  TMOD = 0x20; //设定定时器1的工作方式为方式2  TH1 = 0xfd;  TL1 = 0xfd;  //装载TH1、TL1  TR1 = 1; //启动定时器1  SM0 = 0;  SM1 = 1; //设定串口工作方式为方式1  REN = 1; //允许串行接收位  ES = 1; //串口中断允许位  EA = 1; //全局中断允许位  //   EX0 = 1; //开外部中断0//    IT0=1;    //中断触发为跳沿触发//  start_led(0);// delay200ms();delay200ms();delay200ms();delay200ms();delay200ms();//  start_led(0xff);while(1){     /* 刚开始单片机缓冲寄存器为空,无数据可以显示 * 先从串口接收数据,再返回该数据 * 在中断中接收数据,同时将flag标志位置为1.说明接收到了数据 * 若接收到数据(flag == 1),说明接收到了;否则说明未接收到数据,不显示。继续判断flag数值 */  checkSwitch();     //开机检测if(flag_switchFF == 1)//3秒关机{i++;flag_switchFF=0;flag_switchon = 0;delay200ms();delay200ms();delay200ms();delay200ms();delay200ms();delay200ms();delay200ms();delay200ms();delay200ms();delay200ms();flag_switchOSen = 0;send(0);}if(flag_switchon == 1)//开机{i++;flag_switchon=0;ps_on = 0; flag_switchOSoff = 0;flag_switchOSen = 0;                            send(1);}checkOSen();if(flag_switchOSen==1)            //系统运行中。。。{       checkOSoff();send(2);}if(flag_switchOSoff==1)//操作系统已经关闭{ps_on = 1;flag_switchon = 0;flag_switchFF=0;flag_switchOSen = 0;                          send(3);}if(flag == 1)//发送232数据   {          //  start_led(P1);       //发送数据  ES = 0; //关闭串口中断,发送数据  SBUF = P1; //P1//数据写入SBUF寄存器  while(!TI); //等待  TI = 0;  ES = 1;   flag = 0;    }         }  }  void ser() interrupt 4
{  //接收数据  P1 = SBUF;  flag = 1;  RI = 0;
} void INT0_ISR(void) interrupt 0
{EX0=0;start_led(int_cnt++%10);P1 = int_cnt%10+0x30;  //    delay200ms();flag = 1;//  ET0=1;//     TR0=1;EA=1;EX0=1;
}

单片机:STC89C52的最小单元相关推荐

  1. 【单片机】STM32 最小板 学习笔记

    目录&索引 前言 第一章 前期工作准备 软件获取 STM32 资料 相关下载 硬件准备 第二章 单片机系统介绍 第三章 库函数工程模板建立 第一步,下载固件库,文件分类 第二步,打开 mdk5 ...

  2. CQRS学习——最小单元的Cqrs(CommandEvent)[其一]

    [说明:博主采用边写边思考的方式完成这一系列的博客,所以代码以附件为准,文中代码仅为了说明.] 结构 在学习和实现CQRS的过程中,首要参考的项目是这个[http://www.cnblogs.com/ ...

  3. 51单片机之STC89C52RC最小系统板烧录说明

    51单片机之STC89C52RC最小系统板烧录说明 STC89C52RC最小系统板 上面配的是11.0592MHz的晶振.其实使用12M也是可以使用的. STC89C52RC 如果动手能力强,自己购买 ...

  4. stc89c51单片机音乐盒系统设计_基于单片机STC89C52的数字音乐盒设计

    基于单片机STC89C52的数字音乐盒设计 1基于单片机 STC89C52 的数字音乐盒设计一. 引言1.1 设计的目的通过课程设计,让学生熟悉单片机微机应用系统开发.研制的过程,软硬件设计的工作方法 ...

  5. 【51单片机STC89C52】IO口模拟PWM控制SG90舵机

    一.PWM PWM ,英文名 Pulse Width Modulation ,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进 行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编 ...

  6. 像素是计算机图像处理的最小单元,笔记本最小像素是什么

    笔记本最小像素是什么 想从小白变技术男吗?今天百分网IT小编带给大家的电脑知识:笔记本最小像素是什么? 像素 是指在由一个数字序列表示的图像中的一个最小单位,称为像素.而不是原词条中说图像由一个个点组 ...

  7. #单片机# ------ stc89c52引脚说明

    STC89C52功能简述: STC89C52 是一种低功耗.高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器.使用高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容. ...

  8. 51单片机(STC89C52)在Ubuntu下的开发

    简介 都是8051衍生的8位单片机, STC单片机有89/90/10/11/12/15这几个大系列, 每个系列的特点如下 89系列是传统的8051单片机, 烧录方法有区别, 但是功能上可以和AT89系 ...

  9. 单片机平台的最小偏差圆弧插补算法

    在CNC机床的G代码中,最常见的有G0.G1.G2.G3代码,分别表示直线和圆弧插补,直线插补对于单片机来说,比较容易实现,只需要将位移增量转换为脉冲增量然后输出给步进电机就可以了,但对于圆弧插补,则 ...

最新文章

  1. 若兰-nvjdc 1.3新版本安装及老版本升级教程
  2. SummerTree 的实验室
  3. 怎样使用fastJson发送数组格式的Json数据
  4. tomcat7 - 烫手山芋之热部署
  5. 最后一条记录_幸好朋友圈没有访客记录。
  6. 工作100:v-model自定义是父亲组件得值
  7. 尚硅谷k8s安装文档_Kubernetes(k8s)中文文档 从零开始k8s_Kubernetes中文社区
  8. iPad开发--QQ空间,处理横竖屏布局,实现子控件中的代理
  9. centos修改磁盘uuid_为什么MySQL用uuid做主键会被骂?
  10. 用Visual Studio实践敏捷测试(二)上
  11. VVC之SCC(一):IBC
  12. 反向动力学 matlab IK,17动画系统(Mecanim)之IK(反向动力学)动画
  13. 量化7年1000万知与行,回测量化7年如果只每月定投5.4万到沪深300指数基金,能否实现7年1000万
  14. python连接阿里云数据库_记一次python备份阿里云RDS数据库
  15. TransUNet阅读笔记与训练尝试
  16. 优化算法中的零次优化详解
  17. 真正从优缺点选择NAS系统
  18. 想考个PMP证书怎么报考啊?
  19. IT比较有用的证书收集
  20. 泰捷we30c系统语言,系统简洁无广告 不堆硬件用户至上-泰捷WE30C升级版电视盒子...

热门文章

  1. 如何用代码实现抖音的图片旋转
  2. .Net内部缓存System.Web.Caching.Cache 和Redis缓存缓存工厂切换
  3. 量子计算机与易经,易经卦象的演化过程,就是一个量子计算机模型
  4. win10平板模式_双系统更方便,不妨来试试这款大屏幕平板
  5. Asp.Net MVC EF各版本区别
  6. Git 简单使用教程
  7. PDF文件怎么编辑,怎么在PDF中添加图片
  8. 一文看懂什么是单线、双线、三线 、BGP网络 他们有什么区别
  9. 【机器学习】K-Means 聚类是特殊的矩阵分解问题
  10. html5这么盒子页面居中,实现盒子居中