单片机:STC89C52的最小单元
来源:互联网 发布:斗牛怎么快速算点数js 编辑:程序博客网 时间:2024/04/19 14:38
STC89C52RC是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
- STC89C52
- 一种低耗高性能的微控制器
- STC公司
- 低功耗、高性能CMOS8位微控制器
- 8K
- MCS-51
目录
具有以下标准功能: 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.5K for(j=1;j>0;j--)//10 //20 for(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 //20 for(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.5K for(j=1;j>0;j--)//10 //20 for(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 //20 for(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; else flag_switchFF = 0; // if(k>3) flag_switchon = 1; else flag_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;}
0 0
- 单片机:STC89C52的最小单元
- 我的STC89C52单片机
- STC89C52单片机内部eeprom的应用
- STC89c52单片机上遇到的一些问题
- (二).STC89C52单片机的引脚功能
- 51单片机STC89C52 蜂鸣器
- 51单片机STC89C52 继电器
- 51单片机STC89C52 iic
- STC89C52单片机RAM模式
- #单片机# ------ stc89c52引脚说明
- STC89C52单片机的内外的RAM,ROM的讨论
- 一个简单的STC89C52单片机流水灯的程序设计
- 51单片机STC89C52 4个独立按键的检测
- 【51单片机学习笔记】基于STC89C52制作的交通信号灯
- 智能的最小单元
- STC89C52单片机内部EEPROM驱动
- STC89C52单片机内部EEPROM驱动
- 51单片机STC89C52 LED闪烁
- spring框架的搭建小demo
- bzoj1233[USACO2009 Open]Tower of Hay干草金字塔
- 由session cookie引起的openstack dashboard登录问题一例
- Django 数据库表单查询
- 信使
- 单片机:STC89C52的最小单元
- Centos7.2安装mysql5.7.13 报错 Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
- HDU:1232畅通工程
- Servlet-中文乱码问题
- Python_多项式拟合
- js基础学习
- Linux设备模型 - linux-2.6.24
- 1 数据结构1----数据结构知识框架
- 下列软件包有未满足的依赖关系: teamviewer:i386