单片机:STC89C52的最小单元
- 中文名
- STC89C52
- 本 质
- 一种低耗高性能的微控制器
- 公 司
- STC公司
- 特 性
- 低功耗、高性能CMOS8位微控制器
- Flash存储器
- 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可选。
主要特性

器件参数
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; }
单片机:STC89C52的最小单元的更多相关文章
- CQRS学习——最小单元的Cqrs(CommandEvent)[其一]
[说明:博主采用边写边思考的方式完成这一系列的博客,所以代码以附件为准,文中代码仅为了说明.] 结构 在学习和实现CQRS的过程中,首要参考的项目是这个[http://www.cnblogs.com/ ...
- 自制单片机之一------AT89S51最小系统制做
C51最小系统电路在网上一搜一大把,大同小异.我略做改动后如图: 加一个11.0592MHZ的晶振是为了以后做串口通信时和PC有相同的波特率.可用短路帽切换.说说板子的布局:网上卖的最小系统都是把板子 ...
- 嵌入式单片机之STM32F103C8T6最小系统板电路设计参考
STM32F103C8T6最小系统板电路设计 一.电源部分 设计了一个XH插座,以便使用3.7V锂电池供电,接入电压不允许超过6V. 二.指示灯部分 电源指示灯可以通过一个短路帽控制亮灭,以达到节电的 ...
- AJAX的最小单元
$(function(){ $('#send').click(function(){ $.ajax({ type: "GET", url: "test.json" ...
- 掀起你的盖头来:Unit Of Work-工作单元
写在前面 阅读目录: 概念中的理解 代码中的实现 后记 掀起了你的盖头来,让我看你的眼睛,你的眼睛明又亮呀,好像那水波一模样:掀起了你的盖头来,让我看你的脸儿,看看你的脸儿红又圆呀,好像那苹果到秋天. ...
- Unit Of Work-工作单元
Unit Of Work-工作单元 阅读目录: 概念中的理解 代码中的实现 后记 掀起了你的盖头来,让我看你的眼睛,你的眼睛明又亮呀,好像那水波一模样:掀起了你的盖头来,让我看你的脸儿,看看你的脸儿红 ...
- 【记录】解析具有合并单元格的Excel
最近公司让做各种数据表格的导入导出,就涉及到电子表格的解析,做了这么多天总结一下心得. 工具:NOPI 语言:C# 目的:因为涉及到导入到数据库,具有合并单元格的多行必然要拆分,而NPOI自动解析的时 ...
- 补习系列(8)-springboot 单元测试之道
目录 目标 一.About 单元测试 二.About Junit 三.SpringBoot-单元测试 项目依赖 测试样例 四.Mock测试 五.最后 目标 了解 单元测试的背景 了解如何 利用 spr ...
- MMU内存管理单元
arm-linux学习-(MMU内存管理单元) 什么是MMU MMU(Memory Management Unit)主要用来管理虚拟存储器.物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及 ...
随机推荐
- 理解SSL/TLS协议
理解SSL/TLS协议 背景 早期我们在访问web时使用HTTP协议,该协议在传输数据时使用明文传输,明文传输带来了以下风险: 1.信息窃听风险,第三方可以获取通信内容 2.信息篡改风险,第三方可以篡 ...
- tf.train.shuffle_batch函数解析
tf.train.shuffle_batch (tensor_list, batch_size, capacity, min_after_dequeue, num_threads=1, seed=No ...
- Core Animation 文档翻译—附录C(KVC扩展)
前言 关于CAAnimation和CALayer类,核心动画扩展了NSKeyValueCoding协议.这个扩展为一些keys添加了默认值,扩大了封装协议,添加了为CGpoint.CGRect.C ...
- python可用ORM之Pony
Pony是Python的一种ORM,它允许使用生成器表达式来构造查询,通过将生成器表达式的抽象语法树解析成SQL语句.它也有在线ER图编辑器可以帮助你创建Model. 示例分析 Pony语句: sel ...
- C#将图片背景从透明变成白色
var img = System.Drawing.Image.FromStream(ms); int width = img.Width; int height = img.Height; var x ...
- python进行各类API的使用
前言: 献上歌曲一首: 因为快要上学了,昨天晚上熬夜.然后今天早上起床 没有什么精神.吃完午饭后开始思考今天写什么好呢 然后逛着逛着逛到了一个API网站.感觉还不错就爬了 0x01: 环境:windo ...
- centos-安装python3.6环境并配置虚拟环境
python3.6下载地址:https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz linux下python环境配置 统一目录: 源码存放位置 ...
- Spring Boot让开发如此简单
从html到asp后一直专注.net开发,从.net诞生到如今,从winform到webform,从asp.net到.net mcv,从.net mvc到.net core,从ado.net到linq ...
- Supervisor 安装及配置管理uwsgi进程
Supervisor介绍 Supervisor 允许其用户在UNIX类操作系统上控制多个进程. 块如下: 方便 需要为每个进程实例编写rc.d脚本通常是不方便的. rc.d脚本是进程初始化/自动启动/ ...
- 归并排序Merge Sort
//C语言实现 void mergeSort(int array[],int first, int last) { if (first < last)//拆分数列中元素只剩下两个的时候,不再拆分 ...