动手写代码之前必须的准备工作
1 Keil软件的介绍和安装
1.1 IDE概念
(1)IDE就是集成开发环境,就是一套用来开发的完整的软件系统。
1.2 Keil uvision介绍
(1)发展。
(2)版本 1.2、1.3、1.4、1.5,本课程使用1.4版本。
(3)安装包在哪里: 网络下载、开发板光盘。
1.3 安装和**
安装**,十分简单。
1.4 Keil和MDK
(1)本来只能用来开发51单片机,叫Keil。
(2)后来ARM公司收购了Keil软件,基于Keil扩展了ARM的开发,主要用来开发ARM Cortex-M系列单片机的程序(譬如STM32),软件名改成了MDK。
(3)刚才我们安装的是Keil C51,只能用来开发51单片机程序。如果要开发ARM Cortex-M单片机要扩展安装MDk安装包。
2 Keil的基本使用演示
2.1 使用Keil打开已有工程项目
(1)IDE(Keil)来开发软件,需要首先创建一个工程项目(Project),Keil软件需要一些工程项目文件来管理项目中的代码。
(2)别人事先创建好的工程项目,我可以使用Keil软件直接打开。打开方法有2个,第一个:进入项目中后双击(项目名.uvproj)文件来打开。第二个:通过快捷图标直接打开Keil软件后,在软件中再打开工程项目(菜单栏的open project)。当我们直接双击快捷方式图标打开keil软件时,会默认打开上次关闭时正在打开的工程项目(如果上次关闭时并未打开工程则本次打开时也未打开任何工程)。
2.2 编译工程
(1)工程项目中有很多文件,简单的分为3类:工程文件、源文件、目标文件。
工程文件就是Keil软件工作需要的文件,和我们写程序没关系。
源文件就是我们写的源代码,就是我们编程编出来的。
目标文件是Keil中的编译器等工具把我们源文件编译后生成的文件,最终向单片机中烧录时需要目标文件来烧录进去。
(2)我们工程刚创建好(空工程)时只有工程文件,此时我们要去编写添加源代码,代码写好后就有了工程文件和源文件,此时点编译操作就可以得到目标文件。
(3)编译的时候有可能会报错(Errors)和报警告(Warnnings),错误就是有很严重的问题,此时编译无效并不能生成最终需要的可烧录的程序文件,必须去排除错误重新编译才可以;警告是轻微问题,有时候可以忽略有时候不行,具体要凭经验。
(4)建议编译时直接点快捷图标栏里面的Rebuild进行编译。
2.3 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即可。
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语言基本概念
(1)关键字,C语言中语言本身定义的具有特殊含义的单词。
(2)函数,函数是C中代码组织的基本单位。
(3)变量,变量就是程序运行过程中可以改变的量。
(4)头文件,就是.h文件,是被源文件包含的,是对源文件的补充。
(5)源文件,就是.c文件,其实就是程序文件。
(6)可执行程序,由源文件编译后生成的可以在单片机中烧录执行的hex文件。
(7)注释,C语言中注释方法有2种,一种是/* */,另一种是//,注释内容不算是代码的正式内容,而是对代码的说明,注释是给人看的。注释删除掉整个程序结果是不变的。
5 整体流程梳理
5.1 程序开发过程
(1)源代码编写。
(2)编译生成可执行程序。
(3)烧录。
5.2 单片机工作流程
(1)单片机上电。
(2)时钟模块起振,CPU有了时钟节拍,单片机内部各模块开始工作。
(3)CPU从ROM中逐条读取可执行程序来执行,RAM存储变量(对应C语言程序中定义的变量)配合程序执行,直到关机。
5.3 程序是调出来的
(1)程序不可能一次写好达到要求。
(2)先解决编译时错误。
(3)再解决运行时问题。
6 跟着数据手册学单片机
6.1 先说这么几点
(1)数据手册干嘛的。
(2)数据手册内容结构。
(3)数据手册怎么用:先概括读、然后按需读模块。
6.2 STC90C51简单介绍
(1)12T、6T和1T的问题:典型的51单片机都是12T的,12T的意思就是51单片机内部会对外部时钟频率进行12分频后再给CPU(如果外部晶振是12MHz,则外部时钟频率就是12MHz,内部CPU的主频就是12MHz/12=1MHz),6T的含义就是CPU时钟频率=外部时钟频率/6,1T的含义就是内部CPU时钟频率=外部时钟频率/1。所以1T单片机是最快的。
6.3 STC90C51内部结构框图
(1)总线,单片机内部模块与模块之间的通信线。
(2)模块,单片机内部各自独立具有一定功能的单元。
(3)要求:大家能看懂图例,知道图中分别表示的是什么。当我们对CPU内部原件模块理解很少的时候其实从框图中看不出什么。框图中实际上传达了很多信息,将来回顾的时候能看出来就行了。
6.4 单片机管脚图
(1)DIP封装和SMD封装。
(2)引脚编号和名字:
每一个引脚都有个编号,这个编号主要是看文档时文档里用来描述这个引脚的作用时做标记用的,跟编程是无关的。所以一般引脚编号并不重要。
每一个引脚除了编号外还有个名字,这个引脚的名字比较重要。因为这引脚名字和我们将来在编程中控制这个引脚时的名字是一样的,所以引脚名字和编程有关。
6.5 关于仿真器和ISP
(1)仿真器。早期开发单片机软件时的辅助设备,早期的单片机很多只能烧录一次,或者不提供调试功能,软件开发难度很大。后来单片机厂商就专门发明了一个设备叫仿真器,仿真器能够仿真出单片机的效果,可以用来调试程序。所以那时候买了单片机之后还要买仿真器,用仿真器来开发,好了后烧录到单片机中运行。
缺陷:1、一个仿真器对应1个单片机型号。2、仿真器很贵。
(2)因为仿真器很贵,所以有些公司开发出了软件仿真器,叫软仿真。譬如keil中就自带了软件仿真功能。
(3)后来仿真器被放弃,升级成了调试器。调试器的思路是:程序开发还是在单片机中,只不过我们用一个专用的调试器可以在单片机中直接完成仿真。典型的调试器如Jlink。调试器比仿真器来说更便宜,所以是更好的解决方案。现在的单片机大多都支持调试器方案。
(4)有时候开发程序并不使用调试器进行单步调试,而是直接开发了程序后通过串口将程序下载到单片机中(ISP方式下载)去运行,然后根据运行的现象来直接判断定位问题,然后解决问题,最后完成程序软件开发。这种方式下不需要专用的硬件仿真器和调试器,有时候会配合使用软件仿真功能。还可以配合使用串口打印,或者LED灯的指示等方式来进行调试。
总结:3和4是我们现在开发软件的主流方法。相对来说,没经验的人更喜欢3(有经验的喜欢4);越往后(单片机到嵌入式到物联网)3用的越少,4用的越多;
6.6 选型表浏览
简单了解。
6.7 单片机最小系统介绍
(1)单片机最小系统,就是指的单片机加上最少的外围电路,然后还可以工作。
(2)最小系统中有3部分电路:供电电路、上电复位电路、晶振电路。
6.8 管脚定义
(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位
二进制只有0和1。
7.2 位(bit,b)和字节(byte,B)
(1)1字节=8位。
7.3 初识IO口
(1)什么是IO(input/output),单片机的IO物理上表现为单片机的引脚。
(2)IO对单片机的重要意义。
(3)单片机有多少IO。
(4)IO的组织形式。首先一个单片机的众多IO分为多个端口(port),一个端口由若干个IO引脚(很多时候都是8个)组成。可以理解为一个端口就是一组IO引脚。
(5)如何编程控制IO。