Keil C51集成开发环境的使用练习 (1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一Keil C51集成开发环境的使用练习
一、实验目的
熟悉Keil C51集成开发环境的使用方法。
二、实验要求
熟练掌握Keil C51集成开发环境的工程建立、编辑与编译功能。
三、实验仪器和设备
1、硬件:计算机
2、软件:Keil软件uVision4
四、实验内容
1、进行Keil C51集成开发环境的安装和使用练习;
2、试建立一个工程项目并进行编译。
五、实验方法和步骤
1、启动软件:双击桌面的Keil C51快捷图标,进入如下图所示的Keil C51集成开发环境。
2、建立工程项目:选择工具栏的【Project】→【New Project】命令,建立一个新的μVision4工程,取一个工程名,单击“保存(S)”按钮。
选择CPU的型号为AT89C51,确定。
在跳出的界面上
选择NO.
3、建立程序文件:单击【File】→【New】新建一个名为Text1的空白文件,单击【File】→【Save】
输入文件名,保存格式为.C文件。
4、添加项目文件:右击Source Group 1选择然后选择刚才新建的.C文件,单击Add.
在上面环境中编写程序。
5、工程的详细设置:在μVision4的菜单【Project】→【Options For Target ‘Target1’】的Output选项卡中,选中Create HEX File以产生hex文件。
在Target选项卡中XTAL:12M
6、进行汇编:选择菜单【Project】→【Rebuild all target files】后,程序会进行汇编,若没有错误则生成相应的机器码.hex文件。
六、实验注意事项
1、做实验要养成一个良好的习惯,在每次做实验时,都要在桌面新建一个文件夹,把项目和.C源文件保存在其中,为了下一步的添加源文件做准备;
2、如果我们在做软硬件联合调试的时候,就要注意一定要选择正确CPU的型号(Atmel公司AT89C51),但如果我们只做软件仿真或者纯硬件实验时,我们在选择CPU型号时就没有具体的要求了。
七、实验参考程序
#include<reg51.h>
void main()
{
//用户代码
P1=0X55;
while(1);
}
实验二基于Keil C51集成开发环境的循环程序实验
一、实验目的
熟悉Keil C51集成开发环境printf函数的用法
二、实验要求
熟练掌握Keil C51集成开发环境进行for循环的程序的写法与调试。
熟练编写并用串口调试窗口打出三角形、99乘法表等程序
三、实验仪器和设备
1、硬件:计算机
2、软件:Keil软件uVision4
四、实验内容
1、熟练编写并用串口调试窗口打出正立三角形、99乘法表等程序
五、实验方法和步骤
1、启动软件建立工程
2、编写正三角程序
3、点击进行软件仿真
4、如下图操作
出现编程介面右下角出现UART #1标签
5、点击调试按钮进行程序调试
6、实验结果如下
六、实验注意事项
1、为了使用printf函数,一定要加#include <stdio.h>头文件;
2、在程序中一定要写TI=1,如果不写没有输出;
3、注意在软件仿真时,用UART#1,右键选:Terminal Mode,否则无法换行。
七、实验参考程序
参考正立三角形程序如下:
//程序功能:用于练习for循环,特别是2种循环,打*三角形,小99等等
//注意在软件仿真时,用UART#1,右键选:Terminal Mode,否则无法换行
#include <reg52.h>
#include <stdio.h>//printf函数的头文件
void main(void)
{
unsigned char i,j;
SCON=0X50;
TMOD|=0X20;
TH1=211;
TR1=1;
TI=1; //这个必须写,因为putchar先要对TI进行判定,如果TI=1,才能执行for(i=0;i<5;i++)
{
for(j=0;j<=i;j++)
{
printf("*"); //打*
}
printf("\n"); //换行
}
while(1);
}
实验三P口控制实验
一、实验目的
熟练掌握P口的操作方法
二、实验要求
熟悉Lab6000实验箱与Keil软件的硬件联调方法
三、实验设备及仪器
1、硬件:计算机、Lab6000实验箱
2、软件:Keil软件uVision4
四、实验内容
设计用P1口实现LED流水灯程序
五、实验方法和步骤
1、硬件操作:
a、实验箱准备工作:
1、将配套的串行通讯电缆的一端与实验仪上的“仿真器串口”
2、将跳线冒插到“USART”
3、9芯D形插座相连,另一端与PC相的串行口相连。
4、将实验台的电源线与220V电源相连。
(实验结束后应拔下)
5、打开实验台电源开关,红色电源指示灯亮。
仿真开发器初始化成功后,
6、LED会显示8051,表示仿真系统正常。
b、实验连线:
P1.0------------------LED 0
P1.1------------------LED 1
P1.2------------------LED 2
P1.3------------------LED 3
P1.4------------------LED 4
P1.5------------------LED 5
P1.6------------------LED 6
P1.7------------------LED 7
2、软件设置:
(1)、打开Keil软件—点击[target option]
(2)、选择【Debug】标签,再选择右半面的【Use】,最后选择【伟福E6000仿真器】,如下图所示。
(3)、再点击【Setings】,在弹出的对话框中选择【仿真器设置】标签,之后选择
【Lab6000/Lab2000P仿真器】,点击好即可。
(4)、在3中设置对话框中,选择【端口设置】标签,在【端口选择】中选择“COM1”(可根据实验PC机的串口情况而定),之后点【好】即可。
5、在【Debug】标签中把【Run to main()】勾上,以保证程序在仿真调试时从main函数开始执行。
(6)、按实验一的方法建立工程,并把代码编写好,编译,之后点击就可以进行硬件仿真调试。
六、实验注意事项
1、寄存器一定要大写
2、判定流水灯全灭时,要进行重新赋初始值
3、更改代码时,要重新编译,再进行仿真调试。
4、Lab6000实验箱的跳线冒一定要插在“USART”处。
七、实验参考程序
#include<reg51.h>
void delay( ) //延时函数
{
unsigned int i, j;
for(i=0; i<110; i++)
{
for(j=0; j<300; j++)
{
}
}
}
void main()
{
P1=0X01;
while(1)
{
delay();
P1=P1<<1;
if (P1==0X00) //判定是否移出,并重新赋初始值{
P1=0X01;
}
}
}
实验四外部中断控制实验
一、实验目的
熟练掌握外部中断的操作方法
二、实验要求
1、熟悉Lab6000实验箱与Keil软件的硬件联调方法
2、会编写外部中断0或1的中断控制程序
三、实验设备及仪器
1、硬件:计算机、Lab6000实验箱
2、软件:Keil软件uVision4
四、实验内容
设计用外部中断0,以按键方式(低电平触发)控制LED流水灯启停程序
五、实验方法和步骤
1、硬件操作:
a、实验箱准备工作:
同实验三操作
b、实验连线:
(1)流水灯部分:
P1.0------------------L0
P1.1------------------L1
P1.2------------------L2
P1.3------------------L3
P1.4------------------L4
P1.5------------------L5
P1.6------------------L6
P1.7------------------L7
(2)按键部分:
P3.2------------------K0
2、软件设置:
同实验三
六、实验注意事项
1、外部中断中断号书写要正确
2、外部中断对就应引脚要正确
七、实验参考程序
#include<reg51.h>
sbit P3_2=P3^2;
//延时函数
void delay()
{
unsigned int i, j;
for(i=0; i<110; i++)
{
for(j=0; j<300; j++)
{
}
}
}
void main( )
{
//外部中断0,寄存器设置
IT0=0; //低电平触发中断
EX0=1;
EA=1;
//初始化时灯全灭
P1=0X00;
while(1);
}
//中断函数
void INT00() interrupt 0
{
//流水灯
P1=0X01;
while( P3_2==0 ) //如果P3.2为低电平,则执行流水灯程序{
delay();
P1=P1<<1;
if (P1==0X00)
{
P1=0X01;
}
}
//P3.2=1时,灯全灭,退出中断函数
P1=0X00;
}
实验五计数器实验
一、实验目的
熟练掌握计数器的操作方法
二、实验要求
1、熟悉Lab6000实验箱与Keil软件的硬件联调方法
2、会编写计数器计数程序
三、实验设备及仪器
1、硬件:计算机、Lab6000实验箱
2、软件:Keil软件uVision4
四、实验内容
设计用计数器0,对输入脉冲进行计数,并用LED灯显示其值程序
五、实验方法和步骤
1、硬件操作:
a、实验箱准备工作:
同实验三操作
b、实验连线:
(1)LED灯部分:
P1.0------------------L0
P1.1------------------L1
P1.2------------------L2
P1.3------------------L3
P1.4------------------L4
P1.5------------------L5
P1.6------------------L6
P1.7------------------L7
(2)计数器0引脚部分:
P3.4------------------单脉冲插孔
2、软件设置:
同实验三
六、实验注意事项
1、计数器0中的寄存器使用要正确
2、计数器0对就应引脚要正确
七、实验参考程序
#include<reg51.h>
void main()
{
//计数器0,方式1,可计数65536,这里只对低8位进行计数显示TMOD=0X05; //
TR0=1;
TL0=0;
TH0=0;
//对LED灯初始化,全灭
P1=0X00;
while(1)
{
//P1口显示低8位计数值
P1=TL0;
}
}
实验六定时器实验
一、实验目的
熟练掌握定时器的操作方法
二、实验要求
1、熟悉Lab6000实验箱与Keil软件的硬件联调方法
2、会编写定时器定时程序
三、实验设备及仪器
1、硬件:计算机、Lab6000实验箱
2、软件:Keil软件uVision4
四、实验内容
设计用定时器0方式1,实现对LED灯定时1秒闪烁程序
五、实验方法和步骤
1、硬件操作:
a、实验箱准备工作:
同实验三操作
b、实验连线:
P1.0------------------L0
2、软件设置:
同实验三
六、实验注意事项
1、实验箱的晶振为:6MHz
2、软件编程:定时器0在中断函数中要重新装初值
七、实验参考程序
//定时器0定时1S,晶振:6MHz
#include<reg51.h>
//LED小灯控制引脚
sbit P1_0=P1^0;
void main()
{
//定时器0,方式1,定时100MS
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
//定时器0中断设置
ET0=1;
EA=1;
while(1);
}
//定时器0中断函数
void T00() interrupt 1
{
unsigned char a;
//重装定时器初值
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //计算中断函数进入次数
a++;
//如果定时1S
if(a==10)
{
//为下1S做准备
a=0;
//LED灯取反闪烁
P1_0=~P1_0;
}
}
实验七Proteus与Keil软件仿真联调实验
一、实验目的
熟悉Proteus与Keil联调操作方法
二、实验要求
熟练掌握Proteus与Keil软件仿真“单步”、“全速”、“断点”操作方法
三、实验设备及仪器
1、硬件:计算机
2、软件:Keil软件uVision4,Porteus7.5仿真软件, vdm51.dll
四、实验内容
设计用Proteus与Keil实现对LED灯闪烁的软件联调程序
五、实验方法和步骤
1.用keil 4编译“七、实验参考程序”下代码,并生成HEX文件
#include<reg51.h>
Unsigned int i; //变量定义
sbit P1_0=P1^0; //声明单片机P1口的第一位
void main() //主函数
{
while(1) //大循环
{
P1_0=1; //点亮发光管
for(i=40000;i>0;i--) //延时
{
}
P1_0=0; //关闭发光管
for(i=40000;i>0;i--) //延时
{
}
}
}
2.在proteus里画好下图
3.双击proteus里的单片机出现下图
选择刚刚用keil编译后的HEX文件
4.点击proteus左下角的开始按钮。
如下图:
联调设置
我们已经知道如何把keil里写的东西让proteus动起来了,现在我们来讲讲如何进行联调。
1.先把vdm51.dll复制到X:\Program Files\Keil\C51\BIN里(X是你keil安装的盘符。
)
2.用记事本打开keil目录下的tools.ini,在[C51] 栏目下加入
TDRV9=BIN\VDM51.DLL ("Proteus VSM Monitor-51 Driver" ) ,其中“TDRV9” 中的“9”要根据实际情况写,不要和原来的重复。
还有“”里的文字其实就是你在keil选项里显示的文字,所以也可以自己定义。
如下图:
3.在keil软件里的"options for target"target1→Debug"选项里选中右边的use,在下拉菜单中选择proteus vsm simulator。
如下图所示:
4.在proteus 的debug 菜单中选中use remote debug monitor 。
如下图所示:
联调结果
1.进入keil的软件调式模式,如下图所示。
2.先设置两个断点,以便我们看到联调的效果。
如下图所示。
3.按F5进行到第一个断点时,效果如下图:
4.继续按F5进行到第二个断点时,效果如下图:
六、实验注意事项
1、vdm51.dll的使用方法
2、联机调试proteus 的debug 菜单中要选中use remote debug monitor
七、实验参考程序
#include<reg51.h>
sbit P1_0=P1^0;
void delay( ) //延时函数{
unsigned int i, j;
for(i=0; i<200; i++)
{
for(j=0; j<600; j++)
{
}
}
}
void main()
{
while(1)
{
//P1.0口取反
P1_0=~ P1_0;
delay( );
}
}
实验八串口实验
一、实验目的
熟练掌握串口的操作方法
二、实验要求
1、熟悉protues与Keil软件联调方法
2、会编写串口收发数据程序
三、实验设备及仪器
1、硬件:计算机
2、软件:Keil4、protues
四、实验内容
设计用proteu和Keil软件实现两个单片机分别收、发数据0x55
五、实验方法和步骤
1、用protues画两个单片机通信硬件图如下:
2、把“七、实验参考程序”分别装入两个单片机中如下图:
3、按实验七进行仿真,得到如下结果(接收单片机P1的值为0x55)
六、实验注意事项
1、晶振选择11.0592MHz
2、接收数据要在中断中进行
七、实验参考程序
1、发送程序:
#include<reg51.h>
void main()
{
//BAUD
TMOD=0X20;
TH1=0XFD;
TL1=0XFD;
TR1=1;
//seial
SM0=0;
SM1=1;
SBUF=0X55;
while(!TI);
TI=0;
while(1);
}
2、接收程序
#include<reg51.h>
void main()
{
//BAUD
TMOD=0X20;
TH1=0XFD;
TL1=0XFD;
TR1=1;
//seial
SM0=0;
SM1=1;
REN=1;
ES=1;
EA=1;
while(1);
}
void serial() interrupt 4
{
if(RI==1)
{
P1=SBUF;
while(!RI);
RI=0;
}
}
实验三基于Keil C51集成开发环境的仿真与调试
一、实验目的
熟悉Keil C51集成开发环境调试功能的使用和DP-51PRO单片机综合仿真实验仪的使用。
二、实验要求
熟练掌握结合DP-51RPO单片机综合仿真实验仪和Keil C51集成开发环境进行仿真调试。
三、实验设备及仪器
IBM PC机一台
DP-51RPO单片机综合仿真实验仪一台
四、实验内容
按照以下内容建立文件并编译仿真调试。
ORG 8000H
LJMP Main
ORG 80F0H
Main:
MOV R7, #0
Loop:
MOV R6, #0
DJNZ R6, $
DJNZ R6, $
DJNZ R6, $
DJNZ R6, $
DJNZ R7, Loop ;延时
CPL P1.0 ;P1.0取反
CPL P1.1 ;P1.1取反
CPL P1.2 ;P1.2取反
CPL P1.3 ;P1.3取反
CPL P1.4 ;P1.4取反
CPL P1.5 ;P1.5取反
CPL P1.6 ;P1.6取反
CPL P1.7 ;P1.7取反
SJMP Main
END
五、实验方法和步骤
1、用40针排线把DP-51PRO实验仪上的A1区J76接口与A2区J79接口相连,然后使用导线把A2区的接口与D1区的J52接口相连,实验二原理图如图2.1所示。
P1.0
P1.1
P1.2
P1.3
MCU
P1.4
P1.5
P1.6
P1.7
图2.1实验二原理图
2、使用Keil C51集成开发环境建立工程、编辑与编译“实验内容”中所列的程序。
3、软件调试环境的设置。
(1)在keil软件的工具栏上找到环境设置窗口快捷图标,单击进入环境设置窗口,如图2.2所示:
图2.2 调试环境设置窗口
(2)Target选项卡的设置:对于在DP-51PRO单片机综合仿真实验仪上进行的仿真、调试,由于MON51监控程序已经占用了从0000H~7FFFH地址单元的程序存储空间,因此自己编写的应用程序必须从8000H地址单元开始存放,即应设置Off-Chip Code Memory栏内的Eprom选项。
具体设置参见图2.3。
图2.3 调试环境具体设置窗口
(3)Output选项卡设置:在图2.3界面上选择Output选项,进入环境输出设置窗口,在Create HEX File选项前面的方框打上√,即源文件通过编译后会生成一个十六进制的机器码.hex文件。
此机器码在仿真时将被烧录到DP-51PRO 单片机试验仪的FLASH中。
如图2.4所示。
图2.4 Output选项设置窗口
(4)Debug环境的设置:在图2.4界面上选择Debug选项,进入如图2.5所示的设置界面,即可对其中的每项进行具体的设置。
图2.5 Debug调试环境设置
注意:在该选项卡中,Use Simulator是模拟仿真,它只能对程序的语法及其结构做一般性分析,与硬件没有联系。
如果是做纯软件仿真时,就应该选择该项。
而Use选项则是硬件仿真,且根据所选用的驱动而使用不同的硬件仿真方式。
对于DP-51PRO单片机综合实验仪而言,在Use下拉列表框中应选择Keil Monitor-51Driver选项。
4、根据以上要求把软件调试环境的设置好,然后再编译一次。
5、对DP-51PRO实验仪上电,然后按照要求设置实验仪并使用软件DPflash 把MON51监控程序下载到实验仪。
6、关闭DPflash软件(很重要)。
把DP-51RPO单片机综合仿真实验仪A1区的工作模式选择开关(MOD-SW1)切换到RUN处,然后按一下复位键(RST),MON51程序即开始运行。
此时,DP-51RPO单片机综合仿真实验仪进入调试状态。
7、此时就可以进行仿真调试。
在keil c51软件工具栏中找到并单击debug 快捷图标,进入如图2.6所示的调试界面。
图2.6 debug调试界面
如果在退出仿真退出调试模式后想再次进入仿真模式,可以先按一下A1区的复位键(RST)。
我们可以在仿真调试环境下设置断点,单步,全速运行等。
在调试过程中可以看见D1区的LED的亮灭是由程序来控制的。
六、实验思考题
如何仿真和调试C51程序?(可以把上面的例子改为C51程序,然后再编译调试)
实验三查LED段码实验
一、实验目的
掌握单片机简单程序的设计,熟悉采用Keil软件的调试技术。
掌握使用某些窗口,比如寄存器窗口等。
二、实验要求
熟悉掌握Keil C51集成开发环境仿真调试技术。
三、实验仪器和设备
1、硬件:计算机
2、软件:uVision3
四、实验内容
设计一查LED段码的程序。
五、实验方法和步骤
1-6步骤如实验一。
7、根据要求对调试环境设置好后(注意:此时的实验为纯软件仿真,所以目标应用程序应该从0000H开始存放,如实验二图2.2所示;在图2.5 Debug调试环境设置中,debug调试方式应选Use Simulator模拟仿真。
),进入debug调试界面,注意观看A的变化。
六、实验参考程序
ORG 0000H
LJMP MAIN
ORG 0200H
MAIN:
MOV SP,#60H
MOV A,#07H
LCALL TAB
SJMP $
TAB:
INC A
MOVC A,@A+PC
RET
DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,80H,090H,088H,083H DB 0C6H,0A1H,86H,8EH ;(0~F)共阳段码
END
七、实验思考题
使用MOVX指令来编写查表程序。
一、实验目的
掌握MCS-51汇编语言设计和调试方法,熟悉Keil的操作方法。
二、实验要求
熟悉51单片机内部RAM中数据的传送以及内部和外部RAM之间数据的传送。
二、实验内容
编写并调试一个双字节无符号十进制数加法程序,其功Array能为将由数据表输入的两个字节压缩BCD码(即4位十进制
数)的加数和被加数写入由(R0)指出的内部RAM中,井将
这两个数相加,结果存放于(R1)指向的内部RAM中。
例如:被加数写人41H、40H单元,加数写人51H、50H
单元,运行程序结果写入52H,、51H、50H中,则加法程序
功能为:
(41 H)(40H)+(51H)(50H)—¬¬¬—52H、51H、50H
实验程序参考流程图如右图所示。
三、实验仪器和设备
1、硬件:计算机
2、软件:Keil软件uVision3
四、实验方法和步骤
1、断点设在BPI,全速带断点运行程序,碰到BPI后,
检查41H、40H、51H、50H与键入值是否对应。
2、全速或断点运行程序,检查十进制数运算结果52H、
51H、50H的是否正确。
3、程序连续运行,改变加数、被加数后,显示运行结果。
若有错误改用单步或断点分段调试程序,排除软件错误。
五、实验注意事项
在观察存储器内容时,注意要区分存储单元窗口。
六、实验思考题
若将8051内部RAM改用外部RAM,应如何修改无符号十进制数加法实验
程序。
一、实验目的
掌握MCS-51汇编语言程序设计方法。
二、实验要求
熟悉51单片机内部RAM中数据的传送以及内部和外部RAM之间数据的传送。
三、实验仪器与设备
1、硬件:计算机
2、软件:Keil软件uVision3
四、实验内容
编写并调试一个双字节无符号十进制数减法实验程序,其功能为将两个字节数BCD码减数和被减数,分别送由(R0)指向的内部RAM,并将这两个无符号十进数相减,结果存放于(R1)指向的内部RAM中。
实验程序参考流程图如5.1图所示:
5.1(a)主程序流程图 5.1 (b)子程序图
五、实验方法与步骤
1、断点运行程序,检查41H、40H、51H、50H与输入值是否正确对应。
2、断点运行程序,检查计算结果42H、41H、40H是否正确。
3、程序连续运行,改变减数、被减数后,查看运行结果。
若有错误改用单步或断点分段调试程序,排除软件错误。
六、实验思考题
若将8051内部RAM改用外部RAM,应如何修改无符号十进制数减法实验程序。
一、实验目的
熟悉MCS-51单片机指令系统,掌握程序设计方法。
二、实验要求
熟悉51单片机内部RAM中数据的传送以及内部和外部RAM之间数据的传送。
三、实验仪器和设备
1、硬件:计算机
2、软件:Keil软件uVision3
四、实验内容
编写并调试一个排序子程序,其功能为用冒泡法将内部RAM中n个单子节无符号二进制数按从小到大的次序重新排列,并将这一列数据从小到大依次存储在外部RAM的从2000H开始的单元中。
五、实验方法和步骤
1、设置断点,检查50H~59H内容是否为10 个任意排列原始数据。
2、设置断点,两数比较后第一个数大于第二个数则所在RAM位置交换。
否则不变。
3、设置断点,检查50H---59H内容是否已经按从小到大次序排列。
4、连续运行,再复位检查外部RAM 2000H~2009H内容是否为事先设定10 个数据按从小到大次序排列。
5、程序运行如果不进入断点,则应分段检查程序,用单步或断点方式调试。
一、实验目的
掌握MCS-51单片机内部RAM和外部RAM的数据操作,掌握这两部分RAM存贮器的特点与应用。
二、实验要求
熟悉51单片机内部RAM中数据的传送以及内部和外部RAM之间数据的传送。
三、实验内容
编写并调试一个数据传送程序,将内部RAM Array
40~4FH的16个数据送到MCS-51的外部RAM
2000H~200FH,再将外部RAM 2000H~200FH数据送
到MCS-51单片机内部RAM 50H ~5FH。
实验程序参考流程图如右图所示:
四、实验仪器和设备
1、硬件:计算机
2、软件:Keil软件uVision2
五、实验方法和步骤
1、设置断点BP1,程序运行至断点,检查40~4FH
数据是否为2、4、6、8、A、C、……等16个数据。
2、设置断点BP2,程序运行至断点,检查外部RAM
(2000~200FH)数据是否与40H~4FH数据一一对应。
3、设置断点BP3,程序运行至断点,检查50H
数据传送流程图
~5FH数据是否与外部RAM (2000H~200FH)数据正确
对应。
4、如果程序运行不能进入某一断点,则应单步、断点分段检查程序,排除错误直至正确为止。