目录
1,第五章
2,第六章
1,第五章
IDE概念:
IDE就是集成开发环境,就是一套用来开发的完整的软件系统。
Keil和MDK:
(1)本来只能用来开发51单片机,叫Keil;
(2)后来ARM公司收购了Keil软件,基于Keil扩展了ARM的开发,主要用来开发ARM Cortex-M系列单片机的程序(譬如STM32),软件名改成了MDK;
(3)我们安装的是Keil C51,只能用来开发51单片机程序。如果要开发ARM Cortex-M单片机要扩展安装MDk安装包,后面第三季再说。
编译工程:
(1)工程项目中有很多文件,简单的分为3类:工程文件、源文件、目标文件
工程文件就是Keil软件工作需要的文件,和我们写程序没关系;
源文件就是我们写的源代码,就是我们编程编出来的;
目标文件是Keil中的编译器等工具把我们源文件编译后生成的文件,最终向单片机中烧录时需要目标文件来烧录进去。
(2)我们工程刚创建好(空工程)时只有工程文件,此时我们要去编写添加源代码,代码写好后就有了工程文件和源文件,此时点编译操作就可以得到目标文件。
(3)编译的时候有可能会报错(Errors)和报警告(Warnnings),错误就是有很严重的问题,此时编译无效并不能生成最终需要的可烧录的程序文件,必须去排除错误重新编译才可以;警告是轻微问题,有时候可以忽略有时候不行,具体要凭经验。
(4)建议编译时直接点快捷图标栏里面的Rebuild进行编译。
Keil中建立新工程:
(1)建立新工程前建议先关闭之前的工程
(2)菜单栏:Projcet->new uVision Project,选择一个合适的目录用来保存将来的工程项目,并且输入一个项目名
(3)选择CPU,一般都选择Atmel->AT89C51,点击OK。弹出来选择“是否添加标准的8051的起始代码”,选择是,确定就ok了。
(4)现在可以自己开始写代码,或者直接复制一个已经写好的代码文件进来,并且添加到我们的工程项目中。
(5)编译完成,发现一个问题:没有可以用来烧录的.hex文件。编译时生成的文件有很多,但是只有这个.hex文件才是我们最终需要的,可以用来烧录的文件。其他都属于中间文件(杂碎)
(6)打开快速菜单栏中“Target Options”,在弹出的多选框里,点击Output菜单,点选下面的Creat HEX File,然后关闭菜单,重新rebuild即可。
单片机工作流程:
(1)单片机上电;
(2)时钟模块起振,CPU有了时钟节拍,单片机内部各模块开始工作;
(3)CPU从ROM中逐条读取可执行程序来执行,RAM存储变量(对应C语言程序中定义的变量)配合程序执行,直到关机。
12T和6T和1T的问题:典型的51单片机都是12T的,12T的意思就是51单片机内部会对外部时钟频率进行12分频后再给CPU(如果外部晶振是12MHz,则外部时钟频率就是12MHz,内部CPU的主频就是12MHz/12=1MHz),6T的含义就是CPU时钟频率=外部时钟频率/6,1T的含义就是内部CPU时钟频率=外部时钟频率/1。所以1T单片机是最快的。
单片机内部结构框图:
(1)总线,单片机内部模块与模块之间的通信线;
(2)模块,单片机内部各自独立具有一定功能的单元;
(3)要求:大家能看懂图例,知道图中分别表示的是什么。当我们对CPU内部原件模块理解很少的时候其实从框图中看不出什么。框图中实际上传达了很多信息,将来回顾的时候能看出来就行了。
引脚编号和名字:
每一个引脚都有个编号,这个编号主要是看文档时文档里用来描述这个引脚的作用时做标记用的,跟编程是无关的。所以一般引脚编号并不重要。
每一个引脚除了编号外还有个名字,这个引脚的名字比较重要。因为这引脚名字和我们将来在编程中控制这个引脚时的名字是一样的,所以引脚名字和编程有关。
关于仿真器和ISP:
(1)仿真器。早期开发单片机软件时的辅助设备,早期的单片机很多只能烧录一次,或者不提供调试功能,软件开发难度很大。后来单片机厂商就专门发明了一个设备叫仿真器,仿真器能够仿真出单片机的效果,可以用来调试程序。所以那时候买了单片机之后还要买仿真器,用仿真器来开发,好了后烧录到单片机中运行。
缺陷:1、一个仿真器对应1个单片机型号。2、仿真器很贵。
(2)因为仿真器很贵,所以有些公司开发出了软件仿真器,叫软仿真。譬如keil中就自带了软件仿真功能。
(3)后来仿真器被放弃,升级成了调试器。调试器的思路是:程序开发还是在单片机中,只不过我们用一个专用的调试器可以在单片机中直接完成仿真。典型的调试器如Jlink。调试器比仿真器来说更便宜,所以是更好的解决方案。现在的单片机大多都支持调试器方案。
(4)有时候开发程序并不使用调试器进行单步调试,而是直接开放了程序后通过串口将程序下载到单片机中(ISP方式下载)去运行,然后根据运行的现象来直接判断定位问题,然后解决问题,最后完成程序软件开发。这种方式下不需要专用的硬件仿真器和调试器,有时候会配合使用软件仿真功能。还可以配合使用串口打印,或者LED灯的指示等方式来进行调试。
总结:3和4是我们现在开发软件的主流方法。相对来说,没经验的人更喜欢3(有经验的喜欢4);越往后(单片机到嵌入式到物联网)3用的越少,4用的越多;
我们课程的方向是:51单片机阶段用软件仿真结合ISP下载方式来调试程序,STM32学习阶段是调试器和ISP下载两种方式相结合,到了嵌入式阶段就又回到4的方式,以后往后都不会再用Jlink等调试器了。
单片机最小系统介绍:
(1)单片机最小系统,就是指的单片机加上最少的外围电路,然后还可以工作。
(2)最小系统中有3部分电路:供电电路、上电复位电路、晶振电路。
管脚定义:
(1)电源等管脚、单片机上面有一些管脚是用来支持单片机工作的,譬如VCC和GND、RST等,这些引脚和编程无关,程序也无法操控这些引脚。这些引脚软件工程师不用管,硬件工程师很在意。
(2)IO端口。IO端口是单片机和外部电路进行交互的窗口,外部电路通过IO向单片机内部输入(input)信息,单片机通过IO端口向外部输出(output)信息。单片机中大部分的引脚都是IO(P开头的引脚都是IO),将来单片机内部的程序运行就会通过操作这些IO来和外部电路交互,从而实现程序目的。
(3)管脚复用。普通引脚是一个引脚只有一个名字,一种作用;有些引脚有2个名字(譬如P3.0/RxD),这种引脚就有2种作用(意思不是说这个引脚可以同时做2件事情,而是说这个引脚在不同的时候可以工作在不同的2种模式下),可以通过软件编程让这个引脚在某个时间工作在某种模式下。一个引脚的2种模式之间没有关联,配置工作在A模式下则和B模式一点关系都没有。
为什么要管脚复用?纯粹是为了省引脚。
初识IO口:
(1)什么是IO(input/output),单片机的IO物理上表现为单片机的引脚。
(2)IO对单片机的重要意义。
(3)单片机有多少IO
(4)IO的组织形式。首先一个单片机的众多IO分为多个端口(port),一个端口由若干个IO引脚(很多时候都是8个)组成。可以理解为一个端口就是一组IO引脚。
2,第六章
74HC573芯片介绍:
(1)要知道这个芯片怎么工作,就要看他的数据手册;
(2)第一步:找到它的数据手册;
(3)OE(output enable), LE(latch enable)
(4)74HC573芯片是一个锁存器,简单来说就是由输入引脚Dx来控制输出引脚Qx(X等于0-7)。OE和LE影响Dx控制Qx的结果。
(5)当OE为L,LE为L时74HC573工作在锁存模式,此时Qx的输出被锁存(进入锁存状态之前是高就一直是高,是低就一直是低,这就叫锁存。),这就是锁存器的作用。
(6)当OE为L,LE为H时74HC573工作在跟随模式,此时Qx的输出跟随Dx的输入变化而变化。此时逻辑上可以认为74HC573是透明的。
GPIO:general purpose intput output,通用输入输出端口的简称;
LED灯:
LED采用共阳接法,即所有LED 阳极管脚接电源VCC,阴极管脚通过一
个470 欧的限流电阻接到端口上;
要让LED 发光即对应的阴极管脚应该为低电平,若为高电平则熄灭。
C语言移位运算介绍:
C语言中有移位运算符,>>可以右移,<<可以左移。(无符号数移位:移出去的位丢掉了,空出来的位用0补);
流水灯(流水灯是8颗LED其中7灭1亮,亮的在移动)源代码:
#include <reg51.h>
void delay()
{
unsigned long int num = 30000;
while(num--);
}
void main()
{
unsigned char b=0;
unsigned char a = 0xfe;
delay();
for(; b <8 ;b++)
{
P2 = ~((~a)<<b);
delay();
}
}
通过KEIL软件仿真查看函数运行时间:
如下图红框处。