硬件最小系统:
at89s51结构图:
中断系统:5个中断源
定时器/计数器:两个16位,四种工作方式
特殊功能寄存器:26个,用于cpu对内部各外设管理,控制和监控,在片内ram,80H-FFH地址上。
看门狗:1个,当单片机“死循环”,“跑飞”状态,重置单片机,使得程序恢复正常
串行口:1个全双工异步串行口(uart),四种工作方式,TXD——RXD
并行口:4个,P0 ,P1 ,P2,P3
最小应用系统
引脚
P0口:没有内部上拉
P0口的输入输出
P0口用作数据/地址总线
P1口
有内部上拉电阻
特殊引脚:
P1.5 MOSI
P1.6MISO
P1.7 SCK
P2口
有内部上拉电阻,用作地址总线的高八位
P3口
有内部上拉电阻,第二功能引脚
CPU
中央处理器:cpu包括运算器和控制器
存储器
程序存储器
ROM片内4K ,片外可以扩展至64KB
4K——2的12次方
64K——2的16次方,P0、P2十六条地址总线
外扩存储区:
数据存储器
RAM片内128B ,片外可以扩展64KB
五个中断源地址(在程序存储器中ROM):
0003H 外部中断0
0013H 外部中断1
0023H 串行口
000BH 定时器0中断
001BH 定时器1中断
特殊功能寄存器(SFR):26个(在数据存储器中RAM)
sp寄存器:断点保护和现场保护
数据指针寄存器DPTR0,DPTR1
DPTR0可以分为8位高地址寄存器DP0H
DPTR0可以分为8位低地址寄存器DP0L
时钟
atAT89S51有一个14位的看门狗定时器 和 看门狗复位寄存器
当定时器开启后,14位定时器会对系统时钟12分频后的信号计数,每隔2的14次方机器周期溢出一次,并且产生一个高电平复位信号,使单片机复位
sfr WDTRST=0Xa6;
看门狗寄存器的地址。
WDTRST=0X1E;
WDTRST=0XE1;//看门狗启动和清零
复位电路
当充电的时候,5v的电压一瞬间通过电容接触rst引脚,超过est引脚需要的电压,因此复位,然后因为电容在充电,到达rst引脚的电压会降低到rst引脚复位电压以下,因此不会再复位。
当按下按键的时候,5v电压依旧通过电容有输出电压但是不够rst复位电压,但是按下按键后,红线导通也会输出一部分电压,加上原先的电压,足够使得rst引脚再次复位。
低功耗节电模式
空闲模式 | 掉电保护模式 |
目的是降低系统功耗 | |
PCON寄存器中有两个位 | |
IDL位 | PD位 |
IDL位为1时候进入空闲模式 | PD位为1时候进入掉电模式 |
空闲模式:振荡器工作,cpu空闲状态,外围电路工作正常工作,内部RAM空闲状态 | 掉电保护状态:振荡器停止工作,内部部件全部停止工作 |
退出:硬件复位,外部中断 | |
可以暂停计数,也可以继续计数 | 看门狗停止计数 |
数据存储类型
代码:在C语言的基础上增加了4种类型
数据存储类型:
内部数据存储区 | data、idata、bdata |
外部数据存储区 | xdata、pdata |
程序存储区 | code 只能读不能写 |
如果不写,编译器选择默认存储类型
char var1
SMALL | data |
COMPACT | idata |
LARGE | xdata |
#include 头文件
#include <REG51.H>
直接到软件安装夹处搜索该头文件,如果有就不会报错
#include “intrins.h ”
到自己创的当前工程所在的文件夹搜索该头文件,没有找到
又回到到软件安装夹处搜索该头文件
扩展数据类型
C51数据类型,红框是扩展的数据类型
bit的值是0或者1
sfr是特殊功能寄存器,在内部RAM中如下图红框
sfr定义寄存器位置
例子sfr P1=0x90;P1=0xff;
sfr16也是特殊功能寄存器,不过是两个八字节的特殊功能寄存器
sfr16 DPTR=0X82;
sbit
sbit是指可位寻址变量其中的某一位。至于这个“可位寻址的变量”究竟是不是寄存器,没有任何关系。换句话说,就算一个普通的变量,只要定义在位寻址区,那它也是可以用sbit声明各位的。(51内部RAM的data段,地址20H~2FH有一个长度为16字节的位寻址区,称为bdata段,把普通变量定义在这个位置就能用sbit声明
使用方法:
1 sfr PSW=0xd0;
sbit CY=PSW^7;
sbit OV=PSW^2;
2 sbit CY=0xd0^7;
sbit OV=0xd0^2;
3 sbit CY=0xd7;
sbit OV=0xd2;
第三种有要求地址必须是在0x80-0xff