1.keil软件的介绍和安装
1.1、IDE概念
(1)IDE就是集成开发环境,就是一套用来开发的完整软件系统
(2)keil是美国keil Software出的51系列兼容单片机C语言软件开发系统。包括C编译器、宏汇编、链接器、库管理、仿真测试
1.2、keil uvision
(1)发展
(2)版本:1.2、1.3、1.4√(keil 4)、1.5
(3)安装包:https://pan.baidu.com/s/1shbyJBNnclmNoV3d-p0xNw 提取码:aosw
1.3、安装和破解
win7版本以上的系统要用管理员身份运行keil软件和注册机
破解:把注册机打开,在keil软件的文件,license management赋值CID到注册机上生成序列码在复制到keil软件。这种有注册机的破解方式是公司为了更多人使用这个软件而采取的一种方式。
1.4、keil和MDK
(1)本来只能用来开发51单片机,叫keil
(2)后来ARM公司受够了keil软件,基于keil扩展了ARM的开发,主要用来开发ARM Cortex-M系列的单片机的程序(STM32),软件名改成了MDK。
(3)上面keil 4的C51,只能用来开发51单片机程序。如果要开发ARM Cortex-M系列的单片机还要扩展安装MDK安装包。
2.keil的基本使用演示
2.1、使用keil打开已有工程项目
(1)IDE(keil)来开发软件,需要首先创建一个工程项目(project),keil软件需要一些工程项目文件来管理项目中的代码。
(2)别人事先创建好的工程项目,我们可以使用直接打开。打开的方式有2个:
①进入项目中双击(项目名.uvproj)项目文件打开
②keil软件→project→open project→找到要打开的uvproj。(后缀名uv开头的文件都是工程文件,软件自动生成)
2.2、编译工程
(1)工程项目中有很多文件,分3类:工程文件、源文件、目标文件
①工程文件:就是keil软件工作需要的文件,后缀名由uv开头,和我们写程序无关;
②源文件:我们写的源代码,就是我们变成编出来的;
③目标文件:就是keil中的编译器等工具把我们源文件编译后生成的文件,最终向单片机烧录时需要目标文件来烧录进去。
(2)我们工程刚创建好(空工程)时只有工程文件,此时我们要去编写添加源代码,代码写好后就有了工程文件和源文件,此时编译操作就可以得到目标文件。
(3)编译的时候可能会报错(errors)和报警告(warmings),报错则排除错误重新编译,警告则可以适当忽略。
(4)建议编译时按rebuild按钮。
2.3、keil中建立新工程
(1)建立新工程前建议先关闭之前的工程
(2)菜单栏:Project→new uVision Project,选择一个合适的目录用来保存将来的工程项目,并输入一个项目名。
(3)选CPU,选Atmel→AT89C51(无STC89C51)但兼容。点击OK,弹出来选择“是否添加标准的8051的起始代码”,选择是,确定。
(4)现在可以自己写代码,或者直接复制一个已经写好的代码文件进来,并且添加到我们的工程项目中(右键项目工程,add Source file),编译。
(5)编译完成后,发现一个问题:没有可以用来烧录的.hex文件。编译时生成的文件有很多,但是只有.hex文件是我们需要的,其他很多是中间文件。
(6)解决方案是再多配置一项配置,打开快速菜单栏中的“Target Options”,在弹出的多选框里,点击output菜单,点选下面的create HEX file,然后关闭菜单,重新rebuild。
3.C语言基本介绍
3.1、汇编语言与C语言
(1)汇编语言编程比C语言难
(2)用汇编或者C语言都能完成任务,写出程序
(3)推荐路线:先用C语言入门学会单片机,然后去扩展学习汇编。
3.2、标准C语言和keil C51的C语言
(1)C语言并不是专门为51单片机发明的,C语言的用途是很广的。
(2)标准C语言就是独立于各种应用领域称为标准C语言,和各种平台的具体的C语言有微小差异。
4.C语言基本概念
关键字、函数、变量、头文件、源文件、可执行程序、注释
5.整体流程梳理
5.1、程序开发过程
(1)源代码编写
(2)编译生成可执行程序
(3)烧录
5.2、单片机工作流程
(1)单片机上电
(2)时钟模块起振,CPu有了时钟节拍,单片机内部各模块开始工作
(3)CPU从ROM中逐条读取可执行程序指令来执行,RAM存储变量(对应C语言程序中定义的变量),配合程序执行。直到关机。
5.3、程序是调出来的(逻辑思维很重要)
(1)程序不可能一次写好达到要求
(2)先解决编译时错误
(3)在解决运行时问题
6.跟着数据手册学单片机
6.1、STC90C51介绍
(1)12T、6T和1T的问题:典型的51单片机都是12T的,12T的意思就是51单片机加内部会对外部时钟频率进行12分频后再给CPU(如果外部晶振是12MHZ,则外部时钟频率就是112MHZ,内部CPU主频就是12MHZ/12=1MHZ),6T的含义就是CPU时钟频率=外部时钟频率/6,1T的含义就是CPU时钟频率=外部时钟频率/1,。所以1T单片机是最快的。
6.2、STC90C51内部结构框图
(1)总线,单片机内部模块与模块之间的通信线
(2)模块,单片机内部各自独立具有一定功能的单元
(3)要求:能看到懂图例,知道图中分别表示的是什么。当我们对CPU内部元件模块理解很少的时候,其实从框图看不出什么。框图中实际上传达了很多信息,将来回顾的时候能看懂就行。
6.3、单片机管脚图
(1)DIP封装和SMD封装
(2)引脚编号和名字
每一个引脚都有个编号,这个编号主要看文档时文档里用来描述这个引脚的作用时做标记用的,跟编程是无关的。所以一般引脚编号并不重要。每一个引脚除了编号外还有名字,这个引脚的名字比较重要。(如p01、p02这些就是CPU延伸出来的引脚)因为这些引脚名字和我们将来在编程中控制这个引脚时的名字是一样的,所以引脚名字和编程有关。
6.4、关于仿真器和ISP
(1)仿真器。早期开发单片机软件时的辅助设备。早期的单片机很多只能烧录一次,或者不提供调试功能,软件开发难度很大。后来单片机厂商就专门发明了一个设备叫仿真器,仿真器能够仿真出单片机的效果,可以用来调试程序。所以那时候买了单片机之后还要买仿真器,用仿真器来开发,好了后烧录到单片机中运行。
(2)缺陷:
①一个仿真器对应1个单片机型号
②仿真器很贵
(3)因为仿真器很贵,所以有些公司开发出了软件仿真器,叫做软仿真。比如keil中就自带了软件仿真功能。
(4)后来仿真器被放弃了,升级成了调试器。调试器的思路是:程序开发还是在单片机中,只不过我们用一个专用的调试器可以在单片机中直接完成仿真。典型的调试器如Jlink调试器比仿真器来说更加便宜,所以是更好的解决办法。现在的单片机都支持调试器方案。
(5)有时候开发程序并不使用调试器进行单步调试,而是直接开发了程序后通过串口将程序下载到单片机中去运行,然后根据运行现象来直接判断定位问题,然后解决问题,最后完成程序软件开发。这种方式下不需要专用的硬件仿真器和调试器,有时候会配合使用软件仿真功能。还可以配合使用串口打印或者LED灯的指示等方式来进行调试。
(6)总结:3和4是我们现在开发软件的主流方法。相对来说,没经验的人更喜欢3(有经验的喜欢4);越往后(单片机到嵌入式到物联网)3用的越少,4用的越多。51单片机阶段软件仿真结合ISP下载方式来调试程序,STM32学习阶段是调试器和ISP下载两种方式结合,到了嵌入式阶段就又返回到4的方式,以后都不会再用Jlink等调试器了。
6.4、选型表浏览
6.5、单片机最小系统介绍
(1)单片机最小系统,就是指的单片机加上最少的外围电路,然后还可以工作。
(2)最小系统中有3部分电路:供电电路、上电复位电路、晶振电路。
6.6、管脚定义
(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模式下一点关系都没有。为什么要管脚复用?纯粹是为了省引脚。
7.二进制和IO端口
7.1、二进制和bit位
7.2、位(bit,b)和字节(byte,B)
1字节 = 8位
7.3、初始IO
(1)什么是IO,单片机的IO物理上表现为单片机的引脚。
(2)IO对单片机的重要意义。
(3)单片机有多少IO。
(4)IO的组织形式。首先一个单片机的众多IO分为多个端口(port),一个端口由若干个IO引脚(很多时候都是8个)组成。可以理解为一个端口就是一组IO引脚。
(5)如何编程控制IO。