1. 51单片机概述

51单片机是对所有兼容Intel 8031指令系统的单片机的统称。目前教科书基本都是以早期的MCS-51为原型,讲解微机的原理及其接口技术的。早期的51单片机功能都较弱,需扩展rom,ram等才能组成一个较复杂的系统。而现今流行的8位51单片机都比早期芯片作了较多的功能扩展,性能强劲。生产51单片机的厂家有很多,像atmel的at80c51系列,华邦w78c051系列,宏晶stc80c51系列等,其中台湾宏晶stc系列51单片机在国内尤为流行。因此,笔者采用宏晶性价比较高的一款51单片机stc12c5a60s2来作开发讲解。该款51单片机已经是宏昌第N代产品了,其主要特征如下:

1.1 增强型8051 CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051;

1.2 工作频率范围:0 - 35MHz,相当于普通8051的 0~420MHz;

1.3 用户应用程序空间60K字节,片上集成1280字节RAM;

1.4 通用I/O口36个(以封装PDIP40为例),可设置成准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏,每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过55Ma;

1.5 ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器 可通过串口(P3.0/P3.1)直接下载用户程序。

1.6 内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),EEPROM,看门狗,内部RC振荡器,4个定时器,7路外部I/O口中断等。

尤其需注意的是stc新一代的单片机都是1T单时钟/机器周期,与课本介绍的早期51单片机是12T单周期是不一样的,软件实现延时时需作注意,其余扩充的特殊功能寄存器等请参考stc12c5a60s2的数据手册。

2. 51单片机编程环境概述

2.1. 代码编译工具

51单片机开发软件基本无疑选用Keil C51集成开发环境。Keil C51是德国Keil Software公司(ARM公司收购了)出品的51系列兼容单片机C语言软件开发系统,提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等,目前最新版本已经到了uVision5。这里需要说明的是,Keil C51并不完全与ANSI C一样,Keil C51由于面向的是51单片机,为了更好地详述51的架构,Keil C51扩展了一些独特的关键字,语法描述等。如用code说明为常量放在代码区,data说明直接寻址区的变化,sfr声明特殊功能寄存器等。

00_开发环境搭建 - 图1

图2.1-1

2.2. 代码调试工具

2.2.1. Keil自带仿真调试器
Keil集成开发环境除了编译链接工具外,还自带了一个功能强大的仿真调试器。当然软仿真是能够看到Keil编译后的汇编代码,单步调试可以跟踪各个寄存器的状态变化,但是软仿真是无法得到真实的外部输入状态的,如仿真真实开发板的按键输入等。代码调试时往往需要知道编译器是否按照要求进行代码的编译处理,因此,可以让编译器输出它是如何编译,链接文件的,我们可以查看这些了解编译器编译c生成的汇编代码,链接的符号,内存分配之类的信息。Keil在Target属性中Listing列可进行设置,如C Compiler Listing选项中是c编译器输出选项,点上Assembly Code即输出c编译对应的汇编代码,在文件.lst中。C Preprocessor Listing为c编译器预处理输出的信息,AssemblerListing为汇编器输出的处理信息,LinkerListing为链接器输出的处理信息(在.m51后缀文件中),这包括编译器对内存的分配,各个函数符号等。通常编译后的汇编代码以及代码的链接信息是可以跟踪查看,以判断代码的问题所在。

00_开发环境搭建 - 图2

图2.2.1-1

00_开发环境搭建 - 图3

图2.2.1-2

2.2.2. Proteus仿真软件

Proteus软件是英国Lab Center Electronics公司出版的EDA工具软件,它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。Proteus具有电路仿真功能,能仿真一些最基本电子元器件,如led,数码管,键盘等,并且是能仿真51单片机代码运行的。在这里需要说明的是,请务必不能以仿真电路的效果图与真实的硬件开发混搅,电路仿真软件往往都是逻辑上的电路连接,完全不能够用来说明真实硬件开发过程。此外,Proteus仿真51单片机也会有一些逻辑的问题,例如,在硬件上真实可运行的代码在Proteus上无法仿真达到效果,修改一下代码顺序即可。总之,对于小代码,Proteus都是可以胜任的,如果代码太复杂,仿真任务会达到100%,无法再进行仿真了。因此,笔者推荐对于初学者,可先用Proteus进行仿真,进行一些最基本的练习,熟悉汇编语言,51单片机状态变化,c语言等,验证自己在51单片机架构学习中的一些理解,代码实现的理解。学习到一定的程度还是需要一块51开发板进行开发练习的,毕竟仿真软件只能仿真很少部分的外围,也不能仿真复杂的硬件及代码。

00_开发环境搭建 - 图4

图2.2.2-1

2.3. 代码烧录工具

Keil C51编译生成的hex文件通过STC_ISP工具,连接串口线(一般采用usb转串口线)进行下载。代码烧写传输是通过51单片机的uart串口信号线Tx,Rx完成的,stc单片机实现isp下载是因为芯片内部有厂商的固化代码,上电复位后是先执行固化代码,检测串口有无接收到特定的命令,如果有则进入下载模式,与上位机的isp下载软件进行通信,从而把代码下载进单片机rom区。如果没有有效的串口下载命令,则跳转执行真正的用户代码,即从0000H处开始执行代码。

00_开发环境搭建 - 图5

图2.3-1