注意:访问本站需要Cookie和JavaScript支持!请设置您的浏览器! 打开购物车 查看留言付款方式联系我们
初中电子 单片机教材一 单片机教材二
搜索上次看见的商品或文章:
商品名、介绍 文章名、内容
首页 电子入门 学单片机 免费资源 下载中心 商品列表 象棋在线 在线绘图 加盟五一 加入收藏 设为首页
本站推荐:
价廉物美的STC 89C516RD在线仿真器
文章长度[] 加入时间[2007/6/20] 更新时间[2024/12/26 8:18:52] 级别[0] [评论] [收藏]

价廉物美的STC 89C516RD在线仿真器

    仿真器对单片机初学者来说既是那么耳熟,同时又有些陌生,这主要是因为市场上传统的仿真器价格都在千元以上,对经济不是非常宽裕的人来说是不小的开支。同时仿真器是用来提高调试程序效率的,也不是非需不可的,所以站长在自学单片机开始的时候也没有用过仿真器,碰到程序出错的时候,只好苦思冥想,或者在程序中插入一些驱动端口的指令,然后再接上一些发光二极管做简单指示,一般调试一个程序,反复烧写几十次芯片是很经常的。

    现在我们介绍一种新型的廉价在线仿真器:它使用一片宏晶公司 【SST公司】的STC89C516RD 的单片机,仿真机通过串口与 PC 连接,该型号单片机是51系列单片机中的一种,具有ISP(在系统可编程)功能,程序可串行下载,可仿真63K用户程序空间,具有450个外部RAM字节。

   本仿真器是由湖南的一位知名老师开发的,他开发单片机十几年,经常在电子报刊上发表单片机方面的文章,现在STC89C516RD仿真器销售累计超过800台,被当地少年宫用于单片机教学效果非常好,高中生只要半天时间就能掌握操作技能,同时仿真器的定价也考虑到大多数单片机初学者的经济承受能力,远低于而网上同类型产品,我们开发推广这个产品的目的在于让更多的人熟悉掌握单片机技术。  

廉价仿真器的产品特点:

1、和市场上采用SST公版监控程序的仿真器有本质的区别,采用SST公版监控程序的仿真器单步运行缓慢,并且每次下载都要手动复位,而我们的仿真器下载程序极快,17K的程序代码下载只需4S。

2、我们自己开发监控程序,所以仿真器具有脱机运行功能,可以简化开发的过程!而采用SST公版监控程序的仿真器是不具有脱机功能的。

3、我们的仿真器克服了单片机的FLASHROM容易损坏的缺点,而改用XDATA RAM保存数据减少了耗时的FLASHROM操作,无论是跨步还是单步执行的速度奇快,性能也大大提高。

4、为解决单步执行区存在频繁读写的问题,创新地采用循环写入法,用多个FLASHROM来做单步执行区,避免了对某一个固定字节的读写,产品寿命提高56倍。

5、仿真器采用Monitor-51 V4.8的驱动。支持Keil V7.0 uVision2、uVision3。

6、下载用户程序,采用“比对”法,可以减少写入的次数!同时提高了下载速度!

7、仿真器的端口可以驱动8mA电流,轻松驱动LED等负载

廉价仿真器的主要性能:

1、 直接支持 KEIL C51 的 IDE 开发仿真环境。
2、 可单步、断点、全速运行调试程序、可参考变量、RAM变量。
3、 支持汇编、C语言混合调试。
4、 片内 63K 程序空间可以随时进行在线程序更新。
5、 完全仿真 P0、P2 、P1、P3口(P3.0,P3.1除外)。
6、 系统仿真频率配置 11.0592 MHz晶振,采用115.2kb波特率通讯,可以极速下载程序!。
7、 可以仿真标准的 89C51、89C52、89C58、SST89C58 等51内核的单片机。
8、 仿真时仅2个sp占用,仿真更加全面真实。监控程序和用户程序采用独立的模拟堆栈,互不影响。
9、  不需用复位键复位仿真机,即可N次下载仿真!
10、监控程序自我修复功能,不会出现监控程序被用户程序覆盖后无法再仿真的情况,这也是本仿真器的一大特色!
11、片上带有450字节的xdata,您可以在仿真时选择使用他们,进行xdata的仿真。
12、仿真时监控和用户代码分离,而且监控代码被硬件锁定,不可能产生不能仿真的软故障。
13、有脱机运行用户程序模式,这时仿真机就相当于目标板上烧好的一个芯片,可以完全真实的运行,完全不占用任何资源。这种情况下实际上就变了一个下载器,而且下次上电时仍然可以运行上次下载的程序。

    这是本仿真器的一个特色。你可以在仿真的过程中设置一个标记,之后即使脱离仿真状态,仿真机中的用户程序也可以单独运行,而且这种运行状态就像是烧录好的芯片一样,是完全真实的运行,没有占用任何用户资源。

    标记设立的方法:当你装载程序到仿真机中后,在断开连接之前,在非全速运行状态下,在命令行输入:“e c:0ffffh=0”。仿真器就会在程序空间的0FFFFh地址位置写一个0,这个内部标志就是脱机运行用户程序标记。如果程序正在全速运行则标记写不进去,建议在下载完代码之后立即做这个操作。

标记设立的方法如下图:

    这时再断开连接,按仿真机复位键之后,仿真器不再擦除用户先前仿真时下载的用户程序代码,同时仿真机将进入3秒钟的等待连接时间,3秒钟过后,开始进入用户程序运行。这时的运行结果就如同烧片结果一样。即使是断电后再启动,用户程序也不会消失,复位后可以照常运行。

操作过程:正常仿真->设立标志->复位->自动延迟3秒->进入脱机用户程序运行

    如果你希望返回到仿真状态,只要在启动时的3秒钟等待连接时间段,从电脑连接进入KEIL UV2的调试环境。连接后会自动擦除脱机运行标记和用户空间,重新根据用户操作进行新的调试,这时就和平时仿真的情况一样的了。因为标记已擦除,下次重新进入仿真时也不会只有3秒钟的等待,而是无限等待了,这和刚开始使用时是一样的。

廉价仿真器占用资源:☆ T2定时器、UART口。☆ XRAM:1BAH-2FFH ☆ FE00H-FFFFH

仿真软件安装,就是Keil C51软件的安装。(请自行安装!)

二、Keil C51 V6.12软件安装:

    首先我们要安装Keil C51 V6.12软件,这个软件也是STC89C516RD仿真器电脑端调试软件。

点击这里可以下载Keil C51 V6.12软件(已经汉化解密)

    将网上下载到的KEILc51v612.rar文件经过vrv解压缩软件解压缩到某个目录下,如复D:\keilC51 然后执行D:\keilC51\setup\setup.exe 安装程序,选择安装Eval Version版进行(试用版)进行安装,这时会有2K程序限制。这2K是指最终代码大小,通常已经足够使用。

    您也可以选择FULL Version正式版安装。注册码:K199U-20071-12A9U当出现Please insert the add-on disk的提示画面,可按next按钮(不用插入软盘)安装好之后就可以使用,没有代码大小的限制,这是完全版,比 Eval版增 加浮点库等内容。软件安装成功后请执行补丁程序和汉化程序,详细看内部说明. KEIL 51软件安装完成后,双击桌面图标运行软件:

2.2 仿真器硬件连接

§仿真器直接插入用户的应用板MCU的位置(注意晶振部分不能和目标板连接)。

§仿真器通过串口插头,插入COM口与PC通讯。

§仿真器上电后,LED指示灯会闪烁2下。

§仿真器可以由目标板提供电源,也可以独立提供电源。建议使用目标板提供电源!

2.3 仿真器使用设置

仿真器采用Monitor-51 V4.8协议,在使用之前应必须对软件项目进行如下设置:

1、单击“Project”菜单,再在下拉菜单中单击“” 在下图中,单击“Target”选择工作频率(11。0592MHz)。

2、单击“Debug”中单击 “Keil Monitor-51 Driver”,即选择了C51-II仿真器。

7、 单击“Settings”选择您要使用串口,波特率 115200。

4、单击“Serial Interrupt”选择通过串口中断,停止用户运行程序。

此项选择非常重要!必须选择

为了不用仿真机的复位键,而能N次仿真,必须在用户程序中定义如下的变量:

char code reserve [3] _at_ 0x23; //Mon51用! *

这样仿真机就会在程序空间:0x23,0x24,0x25放入一个中断跳转语句。以后只要有串口中断,便会去执行MON51程序,从而避免了用复位键复位仿真机!

三、例程介绍

控制P3.7、P3.6交替闪烁。(Keil C51、汇编)

#include <REG52.H>

//************************************************

char code reserve [3] _at_ 0x23; //Mon51用! *

//************************************************

sbit Led1=P3^6; //定义IO脚

sbit Led2=P3^7;

/*------------延时程序-----------------------------*/

void Delay (int i)

{

while (i--);

}

//*************************

void main (void)

{

while (1)

{

Led1 ^=1; //异或1

Led2 ^=Led1; //异或LED1

Delay(30000); //延时0。5秒

}

}

汇编:

org 0000h

ljmp start

org 0100h

start: ;开始

CPL p3.6 ;取反P3。6

CPL p3.7 ;取反P3。7

call Delay ;延时

sjmp start

;*************************

;延时子程序255mS

Delay:

mov r6,#0

De1:

mov r7,#0

djnz r7,$

djnz r7,$

djnz r6,De1

ret

四、调试过程

4.1 建立工程项目

添加文件(Led_F.C):

4.2 编译工程项目

4.3 调试工程,进入DEBUG画面,如果未出现下面画面,请检查“Debug”中是否选择了“Keil Monitor-51 Driver”。


4.4 通讯中断出现下面画面,请先按下仿真机上的复位按键,再点击“Try Again”。每次重新调试,不必复位仿真机,可以N次下载。当出现通讯中断或用户程序死机在按复位键。

五、注意事项

5.1 插入用户板时请注意方向,否则回烧毁C51-II仿真器。

5.2 请在断电时,拔插通讯线。

5. 3 出现如下画面,说明用户程序太大,超出63.5K,或占用了XDATA资源,被Mon51禁止。这是一种软件保护的方法,同时MON51监控程序被硬件锁定,不能被修改!

   在线仿真器STC89C516RD是完全依托KEIL 51软件强大的功能来实现仿真的,所以必须配合KEIL 51软件才能工作,学习使用STC89C516RD在线仿真器的过程也就是对KEIL 51软件的学习过程,这里我们详细介绍一下一个汇编文件如何在KEIL 51软件中如何创建、设置、编译、仿真的。  

1。汇编源文件的建立

    点击菜单文件中的新建...命令新建一个文本编辑窗口,在里面输入下面的程序范例:(可以将蓝色字体复制-粘贴入窗口)

MOV A,#0FEH
MAIN:MOV P1,A
RL A
LCALL DELAY
AJMP MAIN

DELAY:MOV R7,#255
D1:MOV R6,#255
D2:DJNZ R6,D2
DJNZ R7,D1
RET

END

(这是一个使单片机P1口的8个发光二极管轮流点亮的简单程序)

    然后点击菜单文件中的保存命令保存文件,注意必须输入文件的后缀名,我们这里用的是汇编语言所以后缀为*.ASM,例如保存为001.asm

2.建立一个项目:

     点击工程菜单中选择弹出的下拉式菜单中的新建 工程...,接着弹出一个标准Windows文件对话窗口,在"文件名"中输入您的第一个程序项目名称,这里我们用"test",这是笔者惯用的名称,大家不必照搬就是了,只要符合Windows文件规则的文件名都行。"保存"后的文件扩展名为uv2,这是KEIL uVision2项目文件扩展名,以后我们可以直接点击此文件以打开先前做的项目。


   这时会弹出让你选择单片机型号的对话框,我们选择ATMEL---AT89C51


    然后点击Target 1前面的“+”,出现Source Group 1,选中右键点选“增加文件到组 Source Group 1”


    这时选择文件类型为Asm 源文件,再选中001.asm文件,再按添加,在随后出现的提示框中按“确定”

    STC89C516RD 仿真器采用Mon51协议,在使用之前应必须对软件项目进行如下设置:

    1、单击工程菜单,再在下拉菜单中单击"目标target 1属性" 在下图中,单击"Target"输入仿真器的工作频率(11.0592MHz)。

    2、在调试菜单中点选"Keil Monitor-51 Driver",即选择了STC89C516RD硬件仿真器。


    3、单击设置选项选择您要使用串口波特率115200,注意和图片中的是错误的,应该是115200!!!。


4、如果需要生成HEX代码给编程器烧写芯片的话,需要选中“生成 HEX 文件”的选项,按钮“选择OBJ文件夹...”是用来选择最终HEX文件的存放目录的。


5、按F7快捷键可以进行编译,编译成功后如会出现上图红箭头所指的文字,表示编译成功!

   然后可以进行硬件仿真了,将仿真器按照图中的位置放入51单片机试验开发板的40脚活动插座中,这时仿真器的电源由实验开发板提供,开始仿真时务必按一下仿真器上的复位按钮。

  现在按Ctrl+F5可以进入仿真,这时再按F5全速运行状态。

    这时你会看到实验板开发板P1的八个红色LED,轮流点亮,表示运行成功,你可以查看相关的变量和参数,非常方便,这里我们完整演示一个汇编语言的仿真过程,其实KEIL C最擅长的还是C语言,建议有基础的网友尽量采用C语言。

    当调试时出现下面的界面时说明KEIL软件和仿真器之间通讯失败,请先退出仿真

    然后按F7,进行通讯连接,再按Ctrl+F5可以进入仿真,这时再按F5全速运行状态。

五、注意事项

1、插入用户板时请注意方向,否则会烧毁STC89C516RD仿真器。

2、如何配合实验板或者用户板仿真时需要断开用户板或者实验板的晶振回路,否则仿真器上晶振和用户板的晶振相互并联会无法工作!!!

3、仿真器可以由目标板提供电源(5V),也可以独立提供电源。建议使用目标板提供的电源!

疑问解答:

1:仿真机的工作原理是什么?

答:这个问题很专业也是问的最多。一句话是无法回答的。只能简单说明:就是通过Keil开发平台,将用户的程序下载到MON51仿真机中,根据Keil开发平台的命令,不断地执行用户程序,再将临时数据传回Keil开发平台的过程。MON51仿真机的软件,基本上由:通讯模块、Keil命令解析模块、51系列单片机的指令分析模块、断点处理模块、运行模块、单步执行模块等组成。

3:MON51仿真机的“运行到断点处(光标处)”和“单步运行” 、“跨步”、“全速运行”有什么区别?

答:这些功能是每一个仿真机所具有的。但它们实现的方法是不同的。这里的仿真机是借用单片机的IAP功能,来实现仿真的。所以上述几种运行模式(除开单步运行),全部改写了用户下载到FLASGROM中的程序代码。在断点表中保存了断点的地址,和用户代码。仿真器的监控程序会在用户要设立断点的地址处写入一条指令: LCALL STOP 。STOP是停止用户程序,保存用户数据,并恢复监控程序的数据后,再进入监控程序的一段处理程序。实际上就是任务切换。当用户执行到断点处时,会通过LCALL STOP,自动进入监控程序。再把用户的数据发送到Keil平台。

“跨步”运行实际上也是一种变相的断点运行模式。只不过断点不是用户定义的,而是Keil开发平台计算的。是隐含处理的。这里很明显,如果改用FLASHROM保存中间数据,则要频繁地删除、写入数据,STOP的执行速度就会明显下降。而用RAM保存,是最快的。而且没有寿命问题。

“全速运行” 有2中方式:一种是不带中断响应运行。它完全不再受Keil平台的控制,一旦开始运行,用户只有通过手动复位,停止用户程序。

另一种是带中断运行。既勾选Serial Interrupt 选项。这样便会在用户程序的串口中断向量处,写入一条指令LJMP BREAK ,这样发生中断后,就跳转到MON51监控程序的中断处理程序。BREAK程序判别Keil平台是否发来停机命令。如果是停机命令(0x1B),便会进入STOP程序,保存用户程序数据,并进入MON51监控程序。如果不是,则退出中断程序,继续运行应户程序!这也是所谓的“夭折功能”。它也不是什么新技术,任何仿真机都有。而且实现也很简单!

“单步运行”是比较繁杂的一种运行模式。仔细分析51系列单片机的指令,可以知道,虽然有100多条指令,但把转移指令、判位指令、数据转移指令、运算指令等归类后,实际只有10种类型的指令。首先MON51监控程序分析是哪一种指令,如果是转移类指令(LJMP、AJMP 、SJMP、 LCALL、 ACAL、RET、 RETI),MON51监控程直接计算PC指针的地址,并不执行。而其它类的指令则,全部复制到单步执行区(最大9个字节)。再在后面添加2条转移指令 LCALL STOP 、LCALL STOP。为什么要2个LCALL STOP 。主要是用来判别:判位指令是否发生了跳转而设的。进入“单步运行”后,MON51监控程跳转到单步执行区,就可以执行用户的一条指令。然后进入STOP程序。完成一次单步!如果大量采用单步执行的话,单步执行区会被频繁修改,严重影响寿命!这是现在所有采用IAP技术仿真的弊病!如果有个单片机内部有9个字节的RAM执行区就好了,专业仿真机就要下岗了。

实际上我们的监控程在读取、写入特殊功能寄存器时,也要用“单步运行”方法来实现!例如:“mov a,direct ; mov direct,R0”这俩条指令必须要用“单步运行”来实现。如果用户程序有大量的此类指令,寿命问题就会暴露出来。我们做破坏性实验,就是循环执行它。

现在市面上所有的仿真机,都不会去说明FLASHROM是在什么地方被写入?寿命是如何受影响的?也许是扬长避短吧,或许是根本就不知道。通过上面的分析就知道,FLASHROM中到底是哪里被频繁写入了。有些网站要求,尽量少用“单步”,也就是回避这个问题!

4:廉价仿真器SP堆栈占用了2个字节,是什么意思?

这个问题,我被无数次问起,但我首先问一下:你做的软件预留了多少个字节做堆栈?一般的回答是:把剩余的字节全部做堆栈!试想一下,谁做软件只预留几个字节做堆栈。更何况是2个字节!

仿真器监控程占用用户堆栈,是在STOP程序运行时占用的,进入STOP程序时,单片机的硬件已经将PC指针自动压入用户堆栈。此时占用2个字节。随后因为要保护用户的临时数据,必须要用到ACC、DPTR。所以必须先保存好这3个寄存器的值才行。直接压入用户堆栈,最简单!但占用了3个字节!(实际上用户的堆栈,绝对不应该是5个字节的余量)。所以许多网站上,都说采用了新技术,占用2个字节的堆栈。实际上不压入堆栈,用单片机内部不用的寄存器就可以保存就可以了!例如:看门狗寄存器WDTD或IAP操作的寄存器组:SFAL、SFAH、SFDT(但不能用SFCM寄存器)所以SP堆栈占用了2个字节的技术并不神秘!

5:廉价仿真机采用XDATA保存数据,哪我要使用它们,怎么办?

首先我要说明:简单的东西,肯定是有弊端的。如果要用它们,就只有自己扩展RAM了。当用户使用自己扩展的外部RAM时(必须定义AUXR寄存器的EXTRAM位!),地址可以从00H开始,连续存放。

注:本文是站长自己收集并向别人学习的精彩文集,本站没有本文介绍的仿真器,需要本仿真器者请访问http://www.xie-gang.com/

1、 本站不保证以上观点正确,就算是本站原创作品,本站也不保证内容正确。
2、如果您拥有本文版权,并且不想在本站转载,请书面通知本站立即删除并且向您公开道歉! 以上可能是本站收集或者转载的文章,本站可能没有文章中的元件或产品,如果您需要类似的商品请 点这里查看商品列表!
本站协议 | 版权信息 |  关于我们 |  本站地图 |  营业执照 |  发票说明 |  付款方式 |  联系方式
深圳市宝安区西乡五壹电子商行——粤ICP备16073394号-1;地址:深圳西乡河西四坊183号;邮编:518102
E-mail:51dz$163.com($改为@);Tel:(0755)27947428
工作时间:9:30-12:00和13:30-17:30和18:30-20:30,无人接听时可以再打手机13537585389