一步步教你如何第一次使用Monitor

一步步教你如何第一次使用Monitor

2023年7月14日发(作者:)

一步步教你如何第一次使用Monitor-51仿真器,LED灯和按键试验

本教程将会从最基础的开始,一步步教你建立工程,编辑文件,编译文件,仿真和调试程序,直到试验板上出现了你想要的结果...

本文使用的C51例程下载

第一步,连接好主机板上的串口线和电源线插好。将串口线的一端插在主机上,另一端插在计算机的串口上,并记住串口号,通常计算机靠上面的一个串口是com1,下面一个是com2,这些同计算机BIOS设置有关。

试验板上的LED和按键与51单片机的连接如以下电路图,我们编程时必须按照线路连接进行编程,以便能够驱动试验板上的硬件。

现在我们开始进行软件编程。 打开keilC51软件,可以看到以下界面:

我们先在e:盘的根目录下建“e:/跑马灯”目录,以方便程序的编写和调试,调试过程中产生的文件都将放在这个目录中。

现在开始建立一个工程,点菜单Project/New Project,选择保存在在“e:/ 跑马灯”目录,文件名为“跑马灯”,点保存,如下图:

这时,将出现下面的窗口,综合我们现在要编的程序的规模,我们选择最常用的Atmel89C52.这个芯片拥有标准52内核,片内资源在右边的框中有显示。

注: 由于仿真机是用来仿真标准的52内核(兼容51内核),对于某些拥有特殊功能的51单片机(如ADuC812),并不能仿真它的特殊功能部分,而是只能仿真其中的标准52内核部分。即使市面上的高级的51仿真机都是如此。

点确定,该页面自动关闭。

在7.06以上的版本还会出现以下提示框,在这里,我们不去理会它,选择“否”,跳过既可。

现在我们开始建立新的程序文件,点击菜单File/New,将新建立一个新的文本文件,点击File/Save,将这个文件保存为“led.c”。 再点击左边的那个框框里的“Target 1”,左边的“+”号。将展开“Source Group 1”项,用右键点击“Source Group 1”项,选择“Add

Files to Group‘Source Group 1’”,

将跳出下面的窗口:

选择“led.c ”文件,点add将led.c文件加入到我们的工程中。

这时“Source Group 1”项左边也会出现“+”号,点击它,展开文件列表,现在只有一个文件,因为我们的程序比较简单,所以一个文件也就足够了。如果功能很复杂,就可以将各个功能的程序放在一个专门的文件,一般我们称每个文件为一个程序模块,一个工程里面可以有很多的模块。点击这个文件名,该文件就会被打开并出现在窗口最上方,方便您进行编程和修改。

现在我们要在led.c文件里开始输入我们的程序代码了。

我们先输入以下程序:

//这是包含默认的寄存器头文件,

//该文件在keil自己的目录里,包含了所有52内核的寄存器定义。

#include

#include

#define TRUE 1

#define FLASE 0

sbit led1=P1^0;

sbit led2=P1^1;

sbit led3=P1^2;

sbit led4=P1^3;

sbit key1=P1^4;

sbit key2=P1^5;

sbit key3=P1^6;

sbit key4=P1^7;

void delay(void) //延时子程序

{

unsigned int i;

for(i=0;i<20000;i++)

{

_nop_();

_nop_();

}

}

unsigned char getkey(void)

{

if(key1==0)

return 1;

if(key2==0)

return 2;

if(key3==0)

return 3;

if(key4==0)

return 4;

}

void main(void)

{

unsigned char i,j;

led1=0; //点亮led1

delay();

led2=0; //点亮led2

delay();

led3=0; //点亮led3

delay();

led4=0; //点亮led4

delay();

led1=1; //熄灭led1

delay();

led2=1; //熄灭led2

delay();

led3=1; //熄灭led3

delay();

led4=1; //熄灭led4

delay();

for(;;)

{

j=getkey();

switch(j)

{

case 1:

led1=0; //点亮led1

break;

case 2:

led2=0; //点亮led2

break;

case 3:

led3=0; //点亮led3 led4

led4=0;

break;

case 4:

led1=1; //熄灭所有的灯

led2=1;

led3=1;

led4=1;

break;

default:

break;

}

}

} 可以看出这段程序的功能是开机时四个灯很快地亮一下,可能人眼看不到,但是等会我们用单步调试时就可以看到了,然后灯全灭了,这时如果按key1,LED1就会被点亮,如果按key2,LED2就会被点亮,如果按key3,LED3、LED4就会被点亮,如果按key4,四个灯就会一起熄灭。

输入完成后,点击编译按钮,或者按F7编译。察看下面的报告框,如果出现Error或者Warning,要根据情况排除错误和警告,对于无关痛痒的警告可以忽略,具体请查看相关C51的编译器说明书籍或文件。直到最后编译成功为止。

如果您希望编译成功后生成一个HEX目标文件,以方便烧写目标芯片,可以右键点击“Target 1”,选第二项“Options for Target 1”,将出现下面的窗口:

我们的主机上的晶振是11.0592M或12的,你可以将上面框中的“Xtal”后边框中填入“11.0592”,以便软件仿真时计算程序运行时间,这个值的设置对于硬件仿真是没有影响的。

下面依次是编译的内存模式,我们用默认的小模式,这时程序中没有注明的变量将编译在芯片内部的256字节里;程序空间大小,也用默认的64K模式,这个决定编译出来的代码主要是用长调用还是短调用,这些设置都是无所谓的了,仅仅是编译出来的程序大小有点差别而已。其他的设置都空着即可。

点击设置窗口的“output”页,在Create HEX Flie前面的框里点一下打个勾,这样程序编译完成之后就会生成一个HEX目标文文件了。类似的你还可以选择生成一个lib库,但是我们现在还用不到。再下面还可以设置在编译完成是是否开始运行debug,即仿真,或者是否运行你自己指定的某些应用程序。这个设置窗口如下图:

另外几个页:listing,C51,A51,BL51 locate,BL51 Misc都默认设置不要改了,将来等到你会C51的高级应用时或许就用得着了。

但是Debug页,就得好好设置一下了,如图: 这里可以设置使用软件仿真或者硬件仿真,我们已经接好了硬件仿真器和电路,当然是选择硬件仿真了。另外在下拉菜单里选上“keil Monitor-51 Driver”,这是我们的仿真设备类型。下面还可以选择是否进入仿真后立即装载程序到仿真机中,和是否开始运行直到main函数。我们都先选上吧。

这里要说明一下为什么有“Go till main” 选项,因为C51的编译中实际上在内部还调用了一个初始化函数,这个函数的作用是清除所有内存,设置sp指针等运行main程序之前的准备工作。你在编程的过程中实际上可以不理会这个函数。但是在硬件仿真时,装载代码之后PC指针是指向0000H位置的,前面的一段内部代码的运行又大家都基本一样,没有必要去调试,所以就有了自动运行到main的选项,这样装载之后就直接运行到main函数,也就是你开始编程的位置了。

不过如果选择了 “Go till main”,装载之后需要等待一小段时间大约一两秒钟等待运行到该位置,因为是在仿真状态中运行,所以较慢。

注:如果您希望不复位单片机就可以直接下载新代码,必须做另外的设置,请参考相关文档。

设置了使用硬件仿真当然还要再设置一下通讯端口和通讯波特率了,点击设置debug框右上角的“setings” ,进入下面的窗口:

选择仿真机所接电脑的串口号,再选择38400bps通讯速度,这个速度本仿真机完全胜任,而且下载迅速仿真速度飞快。另外“Cache

Option”,建议全部不选,这样仿真时需要显示变量值时,全部会从仿真机中读最新的,虽然慢些,但可以保证是当前的值。

下面的“Stop Program Interrupt”项就不要选了,这是全速运行的夭折功能,仿真机虽然做了这个功能,但是由于共用了串口中断,在某些情况下会对用户程序造成一定的影响。如果需要在全速运行中停止程序,需要复位一下仿真机,复位之后keil环境和仿真机会重新自动联机,但是这时仿真机里的程序代码已经被清除,所以必须退出debug环境,再重新联机装载程序。

注意:顺便提一下: 如果在全速运行时你想退出debug环境,keil将要等待比较久的超时退出,表现为报告无法联机。所以,在全速运行时要退出,请先按一下仿真机上的复位按钮,等调试环境重新联机之后,再退出调试环境,就可以顺利退出了。

好了,到此为止,设置完成,点“OK”,再点设置窗口的“确定”。回到编辑环境中,再编译一次。你可以看到信息栏中多出现了一行“creating hex file form "跑马灯" ...”.

终于将程序编译完毕了,下面开始仿真!

点菜单Dubug下的Start/Stop debug session ,进入仿真状态。

在下面几种情况中,会出现连接不上的提示框。

1.硬件没有连接好。(仔细连接好)

2.计算机的串口号设置错了。(重新设置)

3.波特率设置过高,如115200。(重新设置)

4.计算机串口被其他应用程序占用了。(关闭其他应用程序)

5.仿真机正在全速运行。(按仿真机复位键,使程序停止运行) 5.仿真机处于脱机运行状态并且在运行用户程序。(按仿真机复位,并在2秒内联机)

6.用户板对通讯口P3.0和P3.1造成了干扰。(拔除用户板,测试是否可以联机,再检查用户板。)

这时会出现这个窗口;

别急,点settings,就可以重新进入通讯设置,将正确的串口号和波特率设置好。将其它的使用这个串口的应用程序关闭。 再仔细检查连线,按照本文一开始的说明接好.别忘了再按一下复位按钮,

好,现在点“ try again”,通了!出现了以下窗口: 等待片刻,程序自动运行到main函数的第一句代码。那里的一个小箭头就是指向当前的一句代码。左下角时命令输入框,可以输入需要的调试命令。右边两个是观察窗口和内存窗口。在命令窗口里分为底下的输入行和上面的状态栏,在状态栏里可以看到有“connected to Monitor-51

V3.4”字样,“V3.4”就是本仿真器的版本号。注:“V3.4”已经改为3个数字或字母,用来代表该仿真器的编号,每一台monitor-51仿真机都有不同的编号.

窗口中间有一排快捷按钮,表示的意思如下: 现在我们点击单步“Step Over”,可以看到程序代码一句句被运行,你同样可以做其它类型的调试(单步,断点,全速,在线编程,目标代码下载等)。

现在我们可以点击一下显示汇编窗口按钮,可以看到我们的这个程序的汇编代码,在这个窗口按一下右键,可以看到有一个菜单,可以选择是否C和汇编混合显示模式等等,还有一个重要的功能,就是“load Hex

or Object file”,这个功能可以实现将其他已经编译好了的HEX文件下载到仿真机中,也就是下载功能。当然你现在不能下载,因为嵌入式仿真机的限制,每次装载程序之前必须复位一次。以清空内部的用户程序空间。现在已经装载了一个试验程序,就不能重新下载一个新的其他的程序了。要实现下载其他的目标程序,可以在仿真设置那里将自动load代码设置去掉,这样,连接成功后进入仿真状态,用户空间并没有装载任何代码,再显示汇编窗口,点右键/“load Hex or Object file”,就可以下载你需要的代码了。因为本机有脱机运行功能,了解这个就显得非常重要了。当你手头只有你需要运行的目标代码HEX文件,而没有源文件或者调试文件时,你就无法使用debug的装载功能,而只有通过汇编窗口的load HEX文件了。

到此为止,您应该体会到了Monitor-51仿真机的方便易用和强大功能了吧?同时你还基本上掌握仿真器的使用和KEILC51软件的使用,算是已经一只脚跨进了单片机编程的大门了。

你也可以继续发挥您的钻研精神,自己主动的编写一些功能函数,比如将LED和键盘的显示和控制关系做得更加的复杂。

我们也会继续编写一些深入学习的教材,以帮助更加深入地学习和掌握C51。

上面的例程可以在光盘中找到。

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689328224a230566.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信