[MCU] 【沁恒试用】单步仿真

ddllxxrr   2019-7-7 09:01 楼主

我记得STC单片机有个芯片可以单步仿真。没想到沁恒也可以,今天试了下,表示好用。

其实很简单 :

1.将ISD51.A51和ISD51.H加入项目工程;

         2.初始化串口,配置合适的波特率,最后必须使能全局中断;

         3.选择合适的ISD51初始化函数;

                   ISDinit():初始化并运行用户程序,如果KEIL与单片机通信成功,程序就会立即终止运行

                   ISDwait():初始化ISD51并一直等待KEIL连接上

                   ISDcheck():周期性检查ISD51连接

         4.编译用户程序烧录到单片机内;

         5.在KEIL -> option for target -> DEBUG 设置选择ISD51 In-system Debugger,在setup里设置与ISD51串口初始化相对应的串口波特率。

    6.点击DEBUG按钮进入硬件调试模式。

         ISD51接口函数可在KEIL帮助文档中查到。

那么果真如此么?

我在仿真例程上修改了一下读ID那个程序:


#include	"CH554.H"
#include	"debug.h"
#include	"STDIO.H"
//#include	<absacc.h>										/* Direct access to memory areas. */
#include 	"ISD51.H"										/* Find it at the location like 'C:\Keil\C51\ISD51' */

UINT8 str[] = "hello CH55X!\n";
UINT8 t = 0;
sbit LED	= P1^0;


#define ROM_CHIP_ID_ADDR 0x20

/*******************************************************************************
* Function Name  : GetChipID(void)
* Description    : 获取ID号和ID号和校验
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
UINT32 GetChipID( void )
{
	UINT8	d0, d1;
	UINT16	xl, xh;
	E_DIS = 1;                                                                  //避免进入中断
	d0 = *(PUINT8C)( ROM_CHIP_ID_ADDR + 0 );
	d1 = *(PUINT8C)( ROM_CHIP_ID_ADDR + 1 );                                    //ID号低字
	xl = ( d1 << 8 ) | d0;
	d0 = *(PUINT8C)( ROM_CHIP_ID_ADDR + 2 );
	d1 = *(PUINT8C)( ROM_CHIP_ID_ADDR + 3 );                                    //ID号高字
	xh = ( d1 << 8 ) | d0;
	d0 = *(PUINT8C)( ROM_CHIP_ID_ADDR + 6 );
	d1 = *(PUINT8C)( ROM_CHIP_ID_ADDR + 7 );                                    //ID校验和
	E_DIS = 0;
	if ( (UINT16)( xl + xh ) != (UINT16)( ( d1 << 8 ) | d0 ) ) return( 0xFFFFFFFF );//校验ID号
	return( ( (UINT32)xh << 16 ) | xl );
}

/*******************************************************************************
* Function Name  : CopyChipID(void)
* Description    : 获取ID号,因为Flash双字节访问,低字节在前,使用时要注意
* Input          : PUINT32X buf
* Output         : None
* Return         : None
*******************************************************************************/
void CopyChipID( PUINT32X buf )
{
	E_DIS = 1;
	*( (PUINT16X)buf + 0 ) = *(const unsigned short code *)( ROM_CHIP_ID_ADDR + 0 );
	*( (PUINT16X)buf + 1 ) = *(const unsigned short code *)( ROM_CHIP_ID_ADDR + 2 );
	E_DIS = 0;
}


void main( void )
{
	UINT32 x;
	CfgFsys();
	mDelaymS(10);
	mInitSTDIO();											/* Baudrate = 57600, 8, 1, N */
	EA = 1;
	printf("INIT OK!\n");
	printf("%s",str);
	ISDwait();												/* Wait until Debugger sends 0xA5, comment it if not nessery. */
	while(1)
	{
		t++;												/* Add t to watch windos, this can be changged by manual. */
		ISDcheck();											/* Wait util Debugger send 0xA5, if ISD51 UART already initialized. */
		LED ^= 1;											/* Toggle P1^0 bit. */
		mDelaymS(10);	
		CopyChipID(&x);
        printf("ID:%lx\n",x);	
	}


}

结果仿真如下:

ISO.JPG

我觉得泌恒这个仿真比较好。不花任何费用。只是考两个程序。然后按排一下函数即可。

 

附仿真例程:

1507967901967569.rar (159.06 KB)
(下载次数: 8, 2019-7-7 09:00 上传)



此内容由EEWORLD论坛网友ddllxxrr原创,如需转载或用于商业用途需征得作者同意并注明出处
 

 

http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr

回复评论 (4)

还有人用XP吗

拿PADS和Allegro软件来吹牛的都是些土鳖
点赞  2019-7-7 13:28
引用: lingking 发表于 2019-7-7 13:28 还有人用XP吗

有啊,我司都用的是XP,怎么????能干活就行呗。 

http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
点赞  2019-7-7 20:26
引用: ddllxxrr 发表于 2019-7-7 20:26 有啊,我司都用的是XP,怎么????能干活就行呗。 

好多设计软件已经不再支持XP了

拿PADS和Allegro软件来吹牛的都是些土鳖
点赞  2019-7-7 20:41

。CH554功能还有不少呢,期待老哥的进一步发掘,分享

点赞  2019-7-8 09:28
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复