单片机实验一
- 格式:doc
- 大小:2.29 MB
- 文档页数:11
实验一单片机仿真开发系统的使用
1.1 Keil C51 集成开发环境介绍
①、运行keil C51编辑软件,软件界面如图1-1所示
②、建立一个新的工程项目
单击Project菜单,在弹出的下拉菜单中选中New Project选项
③、保存工程项目
a、选择要保存的文件路径,输入工程项目文件的名称,如保存的路径为C51文件夹,工程项目的名称为C51,如图所示,单击保存
b、为工程项目选择单片机型号
在弹出的对话框中选择需要的单片机型号,如图所示,这里选择51核单片机中使用较多的89S51,选定型号后,单击确定,出现如图所示的开发平台界面
④、 新建源程序文件
在下图中单击“File ”菜单,选择下拉菜单中的New 选项,新建文件后得到如图的界面:
程序录入区域
⑤、保存源程序文件
单击“File”菜单,选择下拉菜单中的Save选项,在弹出的对话框中选择保存的路径及源程序的名称,如图所示。此时光标在编辑窗口里闪烁,这时可以键入用户的应用程序了,建议首先保存该空白的文件,单击菜单上的“File”,在下拉菜单中选中“Save As”选项单击,屏幕如下图所示,在“文件名”栏右侧的编辑框中,键入欲使用的文件名,同时必须键入正确的.扩展名。注意,如果用C语言编写程序,则扩展名为(.c);如果用汇编语言编写程序,则扩展名必须为(.asm)。然后,单击“保存”按钮
注意扩展名
⑥、为工程项目添加源程序文件
在编辑界面中,单击“Target”前面的“+”,再在“Source Group”上单击右键,得到如图所示的对话框,选择“Add File to Group’Source Group 1’”,弹出如图所示的对话框,选中要添加的源程序文件,单击“Add”,得到如图所示的界面,同时,在“Source Group 1”文件夹中多了一个添加的“Text1.c”文件。
⑦、输入源程序源程序输入完成后保存,得到如图所示的界面。程序中的关键字以不同的颜色提示用户加以注意,这就是事先保存待编辑的文件的好处,即Keil c51会自动识别关键字
⑧、编译调试源程序
在上图中,单击Project菜单,在弹出的下拉菜单中选中Built Target选项,再单击Debug 菜单,在弹出的下拉菜单中选中Start/Stop Debug Session选项, 编译成功后,再单击Debug 菜单,在弹出的下拉菜单中选中Go选项,进行源程序调试。如图所示。
⑨、查看分析结果
单击Debug菜单,在弹出的下拉菜单中选中Stop Running选项, 单击View菜单,在弹出的下拉菜单中选中Serial Windows #1 选项,可以看到程序运行的结果,如图所示:
⑩、生成Hex 代码文件
将编译调试成功的源程序生成可供单片机加载的Hex 代码文件,单击Project 菜单,在弹出的下拉菜单中选中Options for Target ’ Target 1’选项,在弹出的对话框中单击Output 选项,选中其中的“Create HEX File ”项。其他选项可以不考虑,如图所示:
到此,一个完整的工程项目就在Keil C51软件上就编译完成
把生成的.HEX 代码烧写到8051芯片中,完成软件程序到代码的转换。
1.2 用Proteus 仿真软件
必须选中
电路原理图如图所示
单片机中常用的元件在下表中查找
五、实验注意事项
1、Keil C51软件在使用调试中会出现由于录入出现的各种错误和程序本身语法错误,要学会自己排除错误。
2、在进行Keil C51软件编译时,要注意软件参数设置。
3、在进行Proteus软件仿真时,要注意与Keil C51软件之间互调设置。
1.3 实现单片机最小系统的简单应用。
要求:P1口控制8个发光二极管LED循环点亮,至少有三种造型,造型写在实验内容中,并在程序中加以注释说明。
一、实验目的
1.熟悉PROTEUS单片机仿真软件的使用。
2. 熟悉Keil C51软件的使用
3.掌握单片机I/O口输出的控制方法。
二、实验设备(仪器)
PC 机一台、硬件模拟综合平台
三、预习要求,实验参考内容
1.按照Keil C51 集成开发环境的要求,建立一段P0~P3口作为输出端口的程序,然后进行编译并进行软件仿真。
2.运用PROTEUS绘制原理图,控制P0~P3输出端口,以控制32位LED流水灯的造型,参考电路如图1-1所示。
3.预习32位LED点亮实验例程,理解其程序,掌握LED的工作原理,其工作特性如图1-2所示。#include
void delay_ms(int x)
{ int i,j;
for (i=0;i for (j=0;j<600;j++); } void port_init(void) { P0=0XFF; P1=0XFF; P2=0XFF; P3=0XFF; } void main (void) { unsigned char i; port_init(); while(1) { for(i=0;i<8;i++) // 轮流点亮P0口LED { P0=~(1< delay_ms(20); } P0=0X00; delay_ms(20); P0=0XFF; for(i=0;i<8;i++) // 轮流点亮P1口LED { P1=~(1< delay_ms(20); } P1=0X00; delay_ms(20); P1=0XFF; for(i=0;i<8;i++) // 轮流点亮P2口LED { P2=~(1< delay_ms(20); } P2=0X00; delay_ms(20); P2=0XFF; for(i=0;i<8;i++) // 轮流点亮P3口LED { P3=~(1< delay_ms(20); } P3=0X00; delay_ms(20); P3=0XFF;