我学习的是STC89C52单片机,以下是我目前阶段的学习总结
相对于80C51单片机,STC89C52单片机多了一些功能:
1.定时器有3个,增加了看门狗定时器
2.RAM和ROM容量增加
3.引脚:
对于储存器:
单片机的存储区域有程序储存器(ROM)和数据储存器(RAM)两种,由于51单片机程序存储器和数据存储器是独立编址的。且两种存储器都可以选择使用片内的还是片外的存储器,因此在物理上有4个存储空间,但逻辑上只有3个存储空间,因为程序存储器片内和片外是统一编址的。他们的储存空间在汇编语言中访问的指令都不一样:片内、片外统一64B程序储存器地址空间;而数据储存器片内是256B、片外是64KB储存空间
对于sfr和sbit代码:
我认为在电路板中已经做好了固定的电路和连接方式,但是寄存器只能通过地址来访问,而sfr指令的作用就是将这些寄存器进行命名,这样我们就可以不用刻意去记各个寄存器的地址,使用起来方便许多;同样,指令sbit就是对可以按位操作的位进行命名
在keil5中,我们通常会在开头加上#include <REGX52.H>,内部大多是寄存器的命名,如
对于数码管:
P0_0到P0_7控制数码管的a~g的显示,由于4个数码管的另一端使用一个公共端,所以我们想要让两个数码管同时显示时,需要用到一个delay1ms,在这里我理解为达到一个视觉错觉的效果,让我们认为它是同时点亮的delay函数如下:
void Delay(int x)
{
unsigned char data i, j;
while(x)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
x=x-1;
}
}
(单位为ms)
将数码管写成一个模块在后续的使用中会方便许多,就像这样(我的函数名叫guan):
对于矩阵键盘:
相对于独立按键,矩阵键盘这里使用了8个I/O口,这样可以大大减少I/O口的占用,这种方式也是十分巧妙的,使用的I/O口的数量=原数量开根号*2;对于矩阵键盘的使用,我们采用按列扫描的方法来实现(当然也可以按行扫描):
对于定时器:
我使用的单片机晶振是11.0592MHz的,它的时钟周期(振荡周期)为1/11.0592Mhz,机器周期=12*时钟周期,它的值大约是1.09us,以下为每秒实现一次中断的模块(这里我用作使用数码管实现计时的功能):
以上是我近期的学习内容,后续会进行补充