配置Keil开发环境与第一个单片机实验

关于Keil开发环境

Keil是由美国Keil Software公司研发的嵌入式开发工具,它支持使用汇编语言和C语言开发单片机嵌入式程序。Keil提供了不同的工具包用于支持不同指令架构的单片机,本课程主要学习51单片机嵌入式开发。
Keil开发工具没有发布中文版,但绝大多数嵌入式开发工程师都在使用Keil开发工具,它内置了C\C++编译器、汇编编译器、软件仿真和硬件仿真。软件仿真在程序运行调试状态下,可以查看模拟单片机的寄存器、存储器、I/O口状态,也可以查看程序在单片机内部执行过程中内存的状态。有了软件仿真调试功能,开发者在没有单片机的情况下,也可以开发单片机程序,并查看程序运行结果。硬件仿真可以接入外部仿真器仿真实际运行的单片机。

搭建Keil开发环境

安装Keil开发工具

搜索Keil官网,进入Keil官网网站,在Keil官网我们主要下载MDK-Arm和C51两个安装包,C51用于51系列单片机开发,MDK-Arm用于ARM指令架构的系列单片机开发。
分别下载C51和MDK-Arm到本地,先安装C51开发工具,C51安装完成后,再安装MDK-Arm(安装路径选择C51的安装路径)。

安装STC51系列单片机仿真包

Keil安装完成后,并不支持STC51系列单片机的仿真调试,需要单独安装STC51系列单片机仿真包。进入STC(宏晶科技)官网,下载STC-ISP安装包,STC-ISP是宏晶公司提供的单片机下载烧录软件,是针对STC系列单片机而设计的,可下载程序到STC89、12C2052和12C5410等系列的STC单片机ROM内。
下载后解压缩包,运行stc-isp程序,选择“Keil仿真设置”标签页,单击“添加STC仿真器驱动到Keil中”按钮,在弹出的目录选择对话框选择keil的安装目录,单击确定即可完成STC仿真器驱动的安装。

单片机仿真实验

实验目的

使用keil创建单片机开发项目,添加C文件到项目,编写C代码控制单片机I/O口输出低电平,掌握代码的仿真调试,查看单片机I/O电平变化。

实验相关知识

TTL电平

实验用单片机为STC89C52RC,实验涉及到单片机I/O口的TTL电平检测。TTL电平信号规定+5V等价于逻辑“1”,0V等价于逻辑“0”,使用Keil进行仿真调试时,若I/O口某位输出“0”,则为低电平,输出“1”则为高电平。

单片机I/O口

单片机I/O口用于单片机与外部设备的连接并控制外部设备。STC89C52RC有4个8位的双向I/O口,即可用于外部设备输入数据到单片机,也可以用于单片机向外部设备输出数据或控制指令。
上图的P0、P1、P2、P3为单片机的I/O口,每个I/O可以进行位控制,按位进行操作,每个位的初始逻辑状态为1(高电平),使用程序可以改变每个I/O为的逻辑状态,从而控制对应的外部设备。例如通过程序将P1.0位置为0(低电平)。

实验步骤

创建单片机开发项目

启动keil开发工具,展开“Project”菜单,选择“New µVision Project ……”命令,在弹出的“Create New Project”对话框内,选择项目保存位置,输入项目名称。
在弹出的“Select Device for target”对话框内,选择列表框内的“STC MCU Database”项,在单片机类型列表框内选择“STC89C52RC”单片机,然后单击“OK”按钮。

添加C文件到项目

单片机项目创建成功后,需要添加C文件到项目,项目工作窗口如下图所示。
选择项目文件窗口“Source Group 1”节点,单击鼠标右键,在弹出的菜单中选择“ADD New Item to Group ‘Source Group 1’……”命令,如下图所示。
在弹出的“Add New Item to Group ‘Source Group 1’”对话框内,在文件类型列表框选择C文件类型,在Name输入域输入C文件名称,这里输入的是“controllio.c”,输入完成后,单击“Add”按钮。如下图所示。
C文件“controllio.c”已添加到项目节点“Source Group 1”节。
在“controllio.c”编辑窗口,输入下面的C代码:
#include<reg51.h>
sbit led1 = P1^0;
void main()
{
led1=0;
}

reg51.h是通用80C51和80C31单片机的头文件。头文件有两个keil定义的关键字sbit和sfr,sbit用来定义位变量,sfr用来定义地址变量。

sbit的用法:
sbit  X = A^n
其中X是位变量,A是一个可进行位寻址的变量,n表示变量A的第n位,注意这里的^不是C语言的异或操作符,是keil定义的一个特殊符号,用于确定可进行位寻址变量的第几位。例如代码:
sbit led1 = P1^0;
sbit定义了led1变量,该变量指向P1口的第0位,若执行语句led1=0; 则P1口的第0位被置为低电平。
sfr的用法:
sfr  X = 0x80
其中X是地址变量,0x80是一个地址。例如代码:
sfr P0   = 0x80;
sfr定义了P0变量,该变量指向0x80地址,该地址为单片机P0口的地址。

C程序仿真调试

Keil提供了仿真调试功能,即使在没有单片机硬件的情况下,我们也可以判断C程序在单片机内是否运行正常,并跟踪和调试C程序完整的执行过程。

设置仿真

在进行仿真调试之前,需要查看Keil是否已设置了仿真调试,展开Project菜单,选择“Options for Targets”命令,在弹出的对话框中,选择“Debug”标签页,确定“Use Simulator”被选中。

仿真调试过程

展开“Debug”菜单,选择“Insert/Remove Breakpoint”命令,或者用鼠标双击语句左侧的灰色区域设置断点,如下图所示。
展开“Debug”菜单,选择“Start/Stop Debug Session”命令,或按下Ctrl+F5键,或单击工具条上的启动调试图标,都可以启动程序的仿真调试。
程序启动后,执行到断点后暂停运行,仿真调试窗口如下图所示。
通过寄存器窗口可以查看程序执行过程中寄存器状态的变化,关于单片机的寄存器,在后面的实验中会陆续讲解。汇编指令窗口显示了程序编译后的汇编指令,通过该窗口可以查看汇编指令。在代码窗口可以查看代码,也可以继续执行程序,或单步执行,或执行代码行,或执行到光标所在行。
本实验重点查看仿真单片机的I/O口状态,展开“peripherals”菜单,选择“I/O-Ports”菜单项,再弹出的子菜单中选择“Port 1”项。
Keil弹出P1口状态对话框,如下图所示。
从图中可以看到,当前P1口0~7位逻辑状态都为1,继续执行程序,再次查看P1口状态。
P1口第0位的逻辑状态已经发生了变化,其逻辑状态为0。

实验小结

通过这次实验,掌握Keil编写单片机程序的过程,以及如何仿真调试单片机程序。实际上,在没有硬件单片机的情况下,应用Keil仿真调试工具,完全可以监控程序在仿真单片机中的运行状态。
本次实验主要完成单片机I/O口单个位的控制。下次实验应用EDA仿真工具proteus,设计单片机第一个应用,通过单片机I/O口控制发光二极管。