/ 51单片机的三个存储空间 /
程序存储(code):0000H~FFFFH, 共64KB 这里的数据是只读的(把数组放这里边可以节省内部数据存储的资源)
内部数据存储(data):00H~FFH,共256B
外部数据存储(xdata):0000H~ffffH,共64KB,与上面一个不是同一个地址
/ 51单片机输出高低电平原理 /
P1、P2、P3内部具有上拉电阻;而P0口是漏极开路,内部无上拉电阻。如要P0口进行高低电平输出,需要加外部上拉电阻。
单片机IO口默认高电平。
内部输出1,经过非门变成0,三极管 低电平,上下两引脚不导通,单片机IO口输出高电平。
内部输出0,经过非门变成1,三极管高电平,上下两引脚导通,IO口输出低电平。
内部输入可读取单盘片机IO处的电平高低。
/ 矩阵按键 /
使用按键矩阵有两种方式,线翻转法和行列扫描检测法。
线翻转法
逐行扫描法
/ 51单片机中断/
中断优先级
中断源 | 中断标志 | 中断程序入口 | 优先级 |
外部中断(INT 0 上划线) | IE0 | 0003H | 从高 |
定时/计数器0(T0) | TF0 | 000BH | |
外部中断1(INT 1 上划线 ) | IE1 | 0013H | |
定时器/计数器(T1) | TF1 | 001BH | |
串行口 | RI或TI | 0023H | 到低 |
/ 中断号 /
中断源符号 | 名称 | 引起的原因 | 中断号 |
/INT0 | 外部中断0 | P3^2引脚低电平或下降沿信号 | 0 |
T0 | 定时器0中断 | 定时/计数器0计数回0溢出 | 1 |
/INT1 | 外部中断1 | P3^3引脚低电平或下降沿信号 | 2 |
T1 | 定时器1中断 | 定时/计数器1计数回0溢出 | 3 |
TI/RI | 串行口中断 | 串行通信完成一帧数据发送或接收 | 4 |
外部中断控制位有IT (TCON 0)、IT 1(TCON 1),置0则是引脚低电平触发,置1则是下降沿信号触发。
中断响应条件(必要条件)
中断源有中断请求
次中断源的中断允许位为1
CPU开中断(即EA= 1)
开外部中断0
EA = 1; //打开总中断开关
EX0 = 1; //打开外部中断0
IT0 = 0/1; // 设置外部中断的触发方式
中断服务函数
Void int0 ( ) interrupt 0
{
//编写功能代码
}
中断实操
独立按键可以把对应单片机的IO口电平被拉低,即产生一个下降沿的过程,所以把外部中断设置成下降沿触发(如IT0 = 0),即可发出中断请求。
上面的代码只能用外部中断0,因为外部中断1的中断标志是2
只要把interrupt 1改成interrupt 2即可达到预期效果
PX1 = 1;//设置外部中断1为高优先级
PX0 = 0; //设置外部中断0为低优先级