单片机一个最重要的特性。
“道生一,一生二,二生三,三生万物。”《道德经》认为,世间万物,缤纷多彩,它们都起源自一个东西,这个“一”的东西就是“道”。电子世界也存在“一”这个东西,这个“一”繁衍出手机,电脑,电视机,机器人等丰富多彩的电子世界。这个“一”就是单片机一个最重要的特性:程序下载进单片机的内存后,可以识别管脚上的高低电平信号,管脚也可以输出不同时间长度的高低电平。下面我把这句话的5个重要关健词提取出来,详细解读它的含义。
程序。有3种,C程序,汇编程序,机器程序。能下载进单片机的只有机器程序,C程序和汇编程序都不能直接下载进单片机,所以C程序和汇编程序最终要经过专用编译软件翻译成机器程序后,才能下载进单片机执行。程序就是语言,语言就是用来交流的,交流就必须存在两个对象,这两个对象分别是程序员和单片机。程序员用C语言或者汇编语言,单片机只用机器语言,他们两者交流就必需一个翻译家,这个翻译家就是编译软件,俗称编译器,它专门把C语言或者汇编语言翻译成单片机能识别的机器语言。现在单片机开发的主流是用C语言,我本人出来工作后就从来没有用过汇编语言,所以我的观点是,C语言是必修课,汇编语言是选修课;C语言是白话文简单易懂,汇编语言是文言文繁琐难读。当然汇编也有它的优点和不可替代的场合,汇编的翻译效率高,往往是一句汇编语言对应一句机器语言,而一句C语言有可能对应几句机器语言,所以很多嵌入式系统某段要求简洁高效的源代码都是用汇编来写的,也有少数一些很便宜的单片机不提供C编译器,只能用汇编语言开发。所以要不要学汇编,我的建议是最好根据个人的工作需求来决定。
内存。既然程序可下载进单片机,那么单片机必然有一个存储程序的内存。单片机内存包括ROM和RAM两部分。ROM的优点是掉电后存储的内容不会丢失,缺点是除非在烧录(下载)过程中,否则上电后它存储的内容也不能更改。并且,虽然ROM在烧录(下载)过程中可以更改内容,但是更改的次数有限制,也就是烧录(下载)的次数有限制,一般最大次数是10万次,当然这里所说ROM是指FLASH的单片机,如果是OTP的单片机,那么最大次数是1次。而RAM恰好反过来,RAM的优点是上电后存储的内容可以被程序指令随时更改,而且还没有更改次数限制,缺点是掉电后内容会丢失。正因为ROM和RAM各有特点,所以它们的分工有所不同。程序包括指令和数据两部分。指令是指程序中的判断,跳转,赋值等指令,这些内容是程序烧录进单片机时就固定下来的,不可更改的,所以存储在ROM中。数据也分两种,程序指令可更改的数据和程序指令不可更改的数据。程序指令可更改的数据存储在RAM中,程序指令不可更改的数据存储在ROM中。那么谁在幕后进行这些分类存储?是编译器软件和下载器(烧录器)。编译器除了把C语言翻译成机器语言之外,还帮我们分好了类,分配好了存储的地址和位置,下载器(烧录器)再根据这些信息把程序存储到内存中。
管脚。它是单片机与外部电路进行能量和信息交互的桥梁。有电源,复位,晶振和IO口这4种类型管脚。第一种电源管脚。是给单片机内部电路供电的接口。单片机有两种常用的供电电压,一般不是3.3V就是5V,有的单片机两种电压都兼容。第二种复位管脚。单片机上电后需要外部电路给它一个瞬间高电平或者低电平的复位信号,才能启动工作。这类外部的复位电路通常是用电容和电阻组成的充电电路来实现,也有一些系统是用专门的复位芯片来实现。第三种晶振管脚。任何单片机想要工作必须要有晶振。单片机执行程序指令是按一个节拍一个节拍来执行的。而晶振产生固定频率的脉冲就是这个节拍的基础源泉。所以把晶振比喻成单片机的心脏是非常恰当的。当然,现在很多单片机都把晶振集成到内部了,不用再外接晶振。第四种IO口管脚。这是跟我们编写程序关联最密切的管脚。前面提到的电源,复位,晶振这3种管脚是为了让单片机能工作,俗称单片机工作的三要素。而单片机工作的具体内容就是通过IO口管脚来体现的。比如,IO口能识别按健的输入,也能驱动继电器的开关,也能跟外围器件进行通信。
电平。单片机IO口管脚检测到的电压低于或等于0.8V时是低电平,程序里读取到的是0数字。检测到的电压高于或等于2.4V时是高电平,程序里读取到的是1数字,当然IO口输入的最大电压不能超过单片机的供电电压。单片机输出的低电平是0V,单片机输出的高电平等于它的供电电压值。
时间。时间是单片机程序必不可少的一个元素。跟外围芯片通信的时序节拍需要时间,驱动发光二极管闪烁需要时间,工控自动化的某些延时需要时间。单片机的时间来源自两方面。第一方面源自指令的周期时间。单片机是根据节拍来执行程序指令的,所以每执行一条指令都要消耗一点时间,只要让程序执行一些无实际意义的指令,并且通过调整所执行指令的条数就可以得到所需要的时间长度。第二方面源自单片机内部自带的定时器。假如设置定时器每20毫秒产生一次中断,现在要获取10秒钟的时间,只需程序统记500次定时中断就可以了,因为1秒等于1000毫秒。
下节预告,平台软件和编译器软件的简介。
(未完待续)转载
|