单片机要点:
0.系统结构
CPU包括运算器和控制器,运算器主要包括算术运算、逻辑运算和位运算,控制逻辑包括定时和控制、指令寄存器、译码器、地址指针和程序计数器PC。
CPU外还有时钟电路、ROM、RAM、定时/计数器、并行IO、串行接口、中断系统。
1.IO口相关知识
这些IO口实际上就是GPIO,它是单片机内的特殊功能寄存器SFR里面的4个8bit的寄存器。
IO可以作为输出或输入。
IO作为输出时自带锁存功能,也就是写1后,输出一直是1(锁存器上的值),引脚上可能被外部电路影响而不是1了.
单片机4组IO口,P0输出时需要上拉;P1/P2/P3是准双向口。
有些口还可以作为数据或地址输入输出口。P1只能作为双向口,P0扩展数据和地址,P2扩展地址高8位,P3有第二特殊功能。
注意读引脚和读锁存器的区别:因为有时候输出设定为1,但是可能被外部电路钳制到低电平,所以当设置P0=1时想再设定P0=2时,就用读锁存器,这样就是1+1,不然就是读引脚可能就会变成0+1.常见的读锁存器的指令是:
在使用ANL、ORL、XRL、CLR、SETB等位操作指令对I/O口进行按位修改时,单片机将首先读回端口锁存器的值,送入ALU进行相应位修改,再写回端口寄存器,通过驱动电路输出给外围电路.
读引脚时需要先想端口写1,把T2截止,这样读到才是外部真实电平。
双向IO口/准双向IO口的区别
标准双向IO口的特点有两条:
1、在输出模式下,可以输出高低电平;
2、在输入模式下,如果没有接外部电路,应呈现高阻态。
对于51单片机的P1、P2、P3口,由于有内部上拉电阻,输入模式下不可能出现高阻态,所以称之为准双向IO口。而P0口作为IO口工作时,如果不加上拉电阻就无法输出高电平;而加了上拉电阻,输入时又不会出现高阻态,所以也是准双向IO口。
单片机的P0口如果工作在第二功能状态下,则是双向IO口。当P0口工作在第二功能状态下,两个晶体管都可以工作。如果上面的晶体管断开,下面的导通,就输出低电平;反之上面的导通下面的断开,就输出高电平并且不需要上拉电阻;如果两个晶体管都断开,则可以作为输入,并且在没有外界电路时呈现高阻态。所以是双向IO口。
注:灌电流比拉电流能通过更大的电流;点亮LED一般用灌电流方式.
参考:http://www.eeworld.com.cn/mcu/article_2016052326504.html
2.中断
常用术语:内部中断、外部中断、中断响应、中断服务程序、中断优先级、中断嵌套、中断源、中断矢量。
中断作用:①快速的CPU和慢速外部设备的速度配合;②实现实时控制;③实时故障发现和处理;④实时干预计算机工作。
单片机六个中断源:外部0、外部1、定时器0/1/2、串口。
外部中断可以设置为电平触发或边沿触发。
四个与中断有关的寄存器:TCON、SCON、IP、IE.
串行中断标志需要软件清除。
若是外部中断用电平触发,若是电平触发不撤销,跳出中断程序后会再次进入中断程序。
中断响应受阻断:正在执行RETI或访问IE、IP,必须执行完该指令,并执行下一条指令后才能响应中断(如上一行,电平触发会每次执行一条主程序)。
可以做实验:
比如经常看见的串口发送程序
void send_char(unsigned char txd)
// 传送一个字符
{
SBUF = txd;
while(!TI); // 等特数据传送
TI = 0; // 清除数据传送标志
}
前提是开了串口中断,但是在串口中断程序里面并没有清TI,按理说TI置1了就会有中断,这时可能正在执行while(!TI),猜测会进入中断程序,因为此时TI还在,若是跳出中断TI还在,是立即再进入中断,还是执行T1=0,就不进入中断了呢? 可以在单片机中实验,看究竟进入串口中断没有,或者会不会第一、第二次进入。也可以以外部中断为例进行验证。也就是传说中的中断一直重复发生,中间还会不会执行一行或多行主程序。对于上面的串口程序,会不会由于delay不同,中断还没传到CPU前就已经执行完TI=0了?
所以实验可以去证明上面两个问题。
3.定时器和计数器
51是两个寄存器,52是三个寄存器,都是16位的。
工作方式寄存器TMOD、控制寄存器TCON
4.串口
掌握波特率计算
11.0592和12Mhz两种。
5.存储资源
内部RAM,一般为128B,其中包括了可为寻址的16B,用C 语言时都是编译器在帮忙分配。RAM是用于存放运行时临时数据的。
内部ROM,一般是4KB,用于存放程序的,也就是keil编译出来的bin文件需要存储到单片机里面。
外部存储器,通过IO口,可以扩展外部RAM最大64KB,外部ROM最大64KB。
6.流水灯
7.数码管
8.LCD屏
9.温度传感器
10.时钟、万年历
11.按键
12.I2C/SPI
13.步进电机、直流电机、PWM
14.点阵屏
15.蜂鸣器、继电器
时钟周期、振荡周期、晶振周期,也就是晶振的倒数,例如12Mhz,就是T=1/12 us
状态周期:两个时钟周期表示1个状态周期
机器周期:单片机完成一项基本操作需要6个状态周期,也就是12个时钟周期,若是12Mhz,则是12*(1/12)=1us
指令周期:CPU执行一条指令的时间,一般是1~4个机器周期。
1T、4T、6T和12T是指一个机器周期需要的
时钟周期数。比如现在普遍的
51单片机AT89S52是12T的,其1个机器周期等于12个
时钟周期;STC89系列的单片机可以设置为6T或12T.