野人的笔记 https://bbs.21ic.com/?79434 [收藏] [复制] [RSS]

日志

keil c51 的 isd51 仿真器使用

已有 3059 次阅读2005-11-26 16:17 |个人分类:单片机设计|系统分类:单片机


   今天需要使用到一款新型的51内核单片机,有一个算法需要使用到单片机的特殊功能,以及外围电路才能实现。使用printf打印数据到串口很难进行调试,手头上又没有现成的支持这个系列51内核的仿真器........................................







    如何是好?


    最后还是使用了keil自带的isd51仿真器实现了,好东西当然需要分享................


下面是一个例子程序:







#include <REG52.H>
#include <intrins.h>
#include <absacc.h>
#include "ISD51.h"


char MyAppTask1(void)
{
 static unsigned char i;
 i++;
 ISDbreak();    //需要设置硬件断点的地方
 return(i);
}


unsigned char MyAppTask2(char in)
{
 return(~in);
}


void main (void) 
{
 unsigned char k;
 
 //以下4行初始化串口
    SCON  = 0x50;          /* SCON: mode 1, 8-bit UART, enable rcvr            */
    TMOD |= 0x20;               /* TMOD: timer 1, mode 2, 8-bit reload              */
    TH1   = 0xfd;               /* TH1:  reload value for 9600 baud @ 11.0592MHz    */
    TR1   = 0xfd;               /* TR1:  timer 1 run                               */
    TI    = 1;                  /* TI:   set TI to send first char of UART          */

   
    //等待Keil进行连接
   ISDwait ();           // wait for connection to uVision2 Debugger

   
   while (1) 
   {
    k = MyAppTask1();
    k = MyAppTask2(k);
  ISDbreak();    //需要设置硬件断点的地方
   }
}







    将编译之后的文件烧写进入单片机--还好现在的51基本上都已经可以在线烧写了,在keil里面设置一下,每次编译之后都自动进行烧写。不知道?倒,没法上传图片,将就将就吧^_^,在project->Options for ....->output -> run user program #1里面可以设置。


    还要设置仿真选项,同样在project->Options for ....->Debug->use Keil isd51 in-system debug里面设置一下,把端口设置成自己主机的端口,波特率必须和程序中设置的一样,本程序是9600。


    设置好之后选择仿真,呵呵,看到没有程序每次运行到ISDbreak(); 的地方都停了下来。


    另外,还可以设置软件断点,不过就是运行起来很慢............


    另外,很重要的一点,需要在工程中加入isd51.a51并进行编译,还要在用户文件中include "isd51.h",这两个文件都可以在keil的安装目录中找到。


    good luck!!!!!!!!!!!!!!!!!!!!


路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (6 个评论)

回复 HUAHUA 2006-2-22 14:54
我和你一样的操作。可是我的就不能连接,不知道怎么回事?我也是这样一步一步的作的,可是就是不能。真希望和你能讨论一下,我的QQ号是360706786。
回复 gwnpeter 2006-2-23 09:55

我得都是一次就好了啦?!!!!

确认你的系统复位正常,串口工作正常。晶体振荡器、串口初始化值、仿真器设置的参数一致。

最好是测试一下下面的代码!

#include <reg51.h>

#include <stdio.h>

main()

{

 //以下4行初始化串口
    SCON  = 0x50;          /* SCON: mode 1, 8-bit UART, enable rcvr            */
    TMOD |= 0x20;               /* TMOD: timer 1, mode 2, 8-bit reload              */
    TH1   = 0xfd;               /* TH1:  reload value for 9600 baud @ 11.0592MHz    */
    TR1   = 0xfd;               /* TR1:  timer 1 run                               */
    TI    = 1;                  /* TI:   set TI to send first char of UART          */

while(1)

     print("qowieuyqoiweur");

}

通过串口通信软件,看看能不能受到打印的信息。

另外,程序中不能有其他的串口初始化程序,这里使用的初始化程序是查询式!!

回复 sanyi 2007-1-4 12:39
这种仿真器哪有买? 有这方面的资料的朋友给我发个信息: sanyi-chen@126.com
回复 叶子 2009-8-8 02:02
搂主,您好! 想请教下你用的是连接硬件进行调试吧?我对8051单片机进行调试的时候为什么全速运行变成了单步执行了呢?就是按下全速运行的按键之后,每执行完一条程序就停止运行,要想继续运行还要继续进行操作,不知道您有没有遇到过这种情况。 您上面设置的TI=1,可以连接上吗?我这样设置时无法连接。 设置软件断点时运行速度具有多慢?比如几分钟,我又时候设置软件断点时程序就不知道跑到哪里去了。您使用的keil软件是哪个版本的?是正版的吗?调试的时候用仿真器了吗?还是直接用keil软件和目标单片机通过串口连接的呢? 期待着您的回复!!! 谢谢!!!
回复 叶子 2009-8-8 02:03
搂主,您好! 想请教下你用的是连接硬件进行调试吧?我对8051单片机进行调试的时候为什么全速运行变成了单步执行了呢?就是按下全速运行的按键之后,每执行完一条程序就停止运行,要想继续运行还要继续进行操作,不知道您有没有遇到过这种情况。 您上面设置的TI=1,可以连接上吗?我这样设置时无法连接。 设置软件断点时运行速度具有多慢?比如几分钟,我又时候设置软件断点时程序就不知道跑到哪里去了。您使用的keil软件是哪个版本的?是正版的吗?调试的时候用仿真器了吗?还是直接用keil软件和目标单片机通过串口连接的呢? 期待着您的回答!!谢谢
回复 jiji 2009-10-23 01:15
楼主你好,请问isd51.a51与"isd51.h"是干嘛用的啊?我做的是nrf9e5.是不是上面两个文件的加载到主程序中啊。
回复 xyp749192072 2010-6-12 12:59
楼主少了个EA=1; //开总中断