从单片机基础到程序框架(全集 2019pdf版).pdf - 第7页
测到的电压 低于或等于 0 .8V 时是低电平, 程序里读 取到的是 0 数字。 单片机 I O 口管脚检测 到的电压高于 或 等于 2.4V 时是 高电平,程 序里读取到的 是 1 数字。必 须注意的是 ,IO 口输入的最 大电 压不能超过单 片机的 供电电压。 单片机输出的 低电平是 0V,单 片机输 出的高电平等 于它的供电电 压值,往往 是 3.3V 或者 5V 。 【3.6 时间。 】 时间是单片 机程序必不可 少的元素。 跟…
言的编译器相当于进入了汉字白话文阶段,从此程序员写出来的 C 程序就非常方便移植,编辑,阅读,传播,
继承。现在单片机开发的主流是 C 语言,我本人出来工作后就没有用过汇编做项目开发。C 语言是必修课,
汇编语言是选修课;C 语言是白话文简单易懂,汇编语言是文言文繁琐难读。当然汇编也有它的应用场合,
汇编的翻译效率高,往往是一句汇编语言对应一句机器语言,而一句 C 语言有可能对应几句机器语言,这样
C 程序的代码效率在很大程度上取决于编译器的水平,编译器能不能帮你翻译出高效的机器语言对于我们来
说往往像黑盒子,不像汇编语言那么可控制。所以很多嵌入式系统某段要求简洁高效的源代码往往用汇编来
写,也有少数一些很便宜的单片机不提供 C 编译器,只能用汇编语言开发。要不要学汇编,最好根据个人的
工作需求来决定。
【3.3 内存。】
单片机就像 MP3,程序代码就像歌曲,把不同的歌曲下载到 MP3 里就可以听到不同的音乐,把不同的程
序下载到单片机里,单片机就能做不同的事。能装程序的单片机必然有内存,内存由 ROM 和 RAM 组成,ROM
和 RAM 都能装东西,但各有不同。
ROM 的优点是存储的东西断电后不会丢失,缺点是存储的东西上电后不能更改,想要改变 ROM 的内容除
非重新下载程序,而且下载次数有限制,FLASH 的 ROM 最大次数通常是 10 万次,而 OTP 的 ROM 只能下载 1
次,所以平时上电工作时 ROM 存储的东西是不能更改的,某些具有 IAP 功能的高级单片机不在此讨论范围内。
而 RAM 恰好反过来,RAM 的优点是存储的东西上电后可以随时被单片机更改,更改次数没有限制,缺点是存
储的东西断电后会丢失,没有记忆功能。
ROM 和 RAM 各有特点,单片机从中各取所长。ROM 用来存储不可更改的指令代码和常量数据,ROM 的容量
往往相当于代码的容量。RAM 用来存储可以被更改的变量数据,RAM 的容量往往相当于全局变量和局部变量
的容量。不管是用 C 语言还是汇编,所写的程序代码就自然包含了指令代码、常量数据、全局变量、局部变
量,那么谁在幕后帮我们进行分类存储,谁把一个程序代码的一分为二让它们在 ROM 和 RAM 里各就各位?是
编译器软件和下载器(烧录器),编译器除了把 C 语言翻译成机器语言之外,还帮我们分好了类,分配好了存
储的地址和位置,下载器(烧录器)再根据这些信息把程序存储到内存中,这些工作一般不用程序员干预,它
们自动完成。
【3.4 管脚。】
管脚是单片机与外部电路进行能量和信息交互的桥梁。有电源,复位,晶振和 IO 口这 4 类管脚。
第一类电源管脚。是给单片机内部电路供电的接口。单片机有两种常用的供电电压,一般是 3.3V 或者
5V,有的单片机两种电压都兼容。
第二类复位管脚。单片机上电后需要外部电路给它一个瞬间高电平或者低电平的复位信号,才能启动工
作。复位电路通常是由电容和电阻组成的充电电路来实现,也有一些系统是用专门的复位芯片来实现。
第三类晶振管脚。任何单片机想要工作必须要有晶振。单片机执行程序指令是按一个节拍一个节拍来执
行的。这个节拍的时间就是由晶振产生,所以把晶振比喻成单片机的心脏是非常恰当的。现在也有很多单片
机直接把晶振集成到内部,这类单片机不用外接晶振也可以。
第四类 IO 口管脚。这是跟我们编写程序关联最密切的管脚。前面提到的电源,复位,晶振这 3 种管脚
是为了让单片机能工作,俗称单片机工作的三要素。而单片机工作的具体内容就是通过 IO 口管脚来体现的。
比如,IO 口能识别按健的输入,也能输出驱动继电器工作的开关信号,也能跟外围器件进行通信。
【3.5 电平。】
电平就是电压的两种状态,低或者高,低相当于程序里的 0,高相当于程序里的 1。单片机 IO 口管脚检
测到的电压低于或等于 0.8V 时是低电平,程序里读取到的是 0 数字。单片机 IO 口管脚检测到的电压高于或
等于 2.4V 时是高电平,程序里读取到的是 1 数字。必须注意的是,IO 口输入的最大电压不能超过单片机的
供电电压。单片机输出的低电平是 0V,单片机输出的高电平等于它的供电电压值,往往是 3.3V 或者 5V。
【3.6 时间。】
时间是单片机程序必不可少的元素。跟外围芯片通信的时序节拍需要时间,驱动发光二极管闪烁需要时
间,工控自动化的某些延时需要时间。单片机的时间来源自两方面。第一方面源自指令的周期时间。单片机
是根据节拍来执行程序指令的,每执行一条指令都要消耗一点时间,只要让程序执行的指令数量越多,产生
的时间就越长,通过调整所执行指令的数量就可以得到所需的时间长度。第二方面源自单片机内部自带的定
时器。假如设置定时器每 20 毫秒产生一次中断,现在要获取 10 秒钟的时间,只需在程序里统记 500 次定时
中断就可以了,因为 1 秒等于 1000 毫秒。指令和定时器这两者的时间最后都来源于晶振。
第四节:平台软件和编译器软件的简介。
【4.1 平台软件和编译器软件的各自分工。】
C 语言写在哪?谁来把 C 语言翻译成单片机可以识别的机器语言?这就是平台软件和编译器软件的分
工。平台软件负责编辑 C 语言,编译软件负责把 C 语言翻译成单片机可以识别的机器语言。
【4.2 每一种单片机的平台软件和编译器软件不一定是唯一的。】
C 语言在单片机的应用也是最近这些年发展起来的,早期做单片机的原厂更关注芯片硬件本身,配套的
C 语言开发软件方面涉入不深,他们往往只管把单片机芯片生产出来后,给大伙提供一个汇编语言的编译器
软件就草率了事,所以给了很多第三方商家做平台软件和 C 编译器的机会,后来单片机原厂也乐意支持和配
合这些第三方开发软件的厂商,也有一些单片机原厂直接收购这类第三方软件公司。因此,不同厂家的单片
机,它所用的平台和编译器软件可能都不一样。即使是同样一个厂家的单片机,它也有可能存在多种不同的
第三方平台软件和编译器软件,每一种单片机所用的平台软件和编译器不一定是唯一的。比如 stm8 单片机
可以用 STVD 软件平台,也可以 IAR 平台。stm32 单片机可以用 keil 平台,也可以用 IAR 平台。
【4.3 平台软件和编译器软件的宿主与寄生关系。】
平台软件选定了之后,所用的编译器软件也可能存在多种选择,并不是一种平台软件就绑定一种编译器
软件。生物学的比喻,平台软件是宿主,编译器软件是寄生在平台软件里的。一个平台软件可以嵌入多种不
同的编译器软件,平台软件和编译器软件存在一对多的关系。比如,PIC 单片机的平台软件是 MPLAB,8 位
PIC 单片机是 PICC 编译器,12 位 PIC 单片机是 PIC18 编译器,16 位 PIC 单片机是 C30 编译器。而且 MPLAB
平台软件与上述各种编译器软件都要单独一个一个分开来安装,最后运行 MPLAB 平台软件,在里面操作某个
菜单设置选项,把各种 C 编译器软件跟 MPLAB 平台软件关联起来。
【4.4 51 单片机的平台软件和编译器软件。】
我后面的讲解,51 单片机的平台软件用 keil2,编译器软件用 C51。单片机程序开发需要用到这两种软
件,但在项目开发的时候,只要跟平台软件打交道就可以了,因为编译器软件是当做一种独立配件嵌入到平
台软件里,统一接受平台软件的控制。我在用 PIC 的 8 位单片机时,需要安装一次 MPLAB 平台软件,也需要
独立再安装一次 PICC 编译器软件,然后运行 MPLAB 平台软件,在里面操作某个菜单设置选项,把 PICC 编译
器跟 MPLAB 平台软件关联起来,也就是我所说的把 PICC 编译器嵌入到 MPLAB 平台软件里,统一接受平台软
件的控制,但我平常写代码时只需要跟 MPLAB 平台软件打交道就可以了。我早期在做 51 单片机开发时,也
是需要把 keil 平台软件和 C51 软件分开安装,然后再把它们关联起来,但是现在从 keil2 版本开始,在安
装 keil 平台软件时就已经默认把 C51 安装好了,并且自动把 C51 嵌入到了 keil 平台软件。我现在用 keil2
这个版本的平台软件,只需要安装一次 keil2 平台软件就可以了,不需要像早期那样再单独安装 C51 编译器。