||
今天需要使用到一款新型的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!!!!!!!!!!!!!!!!!!!!
我得都是一次就好了啦?!!!!
确认你的系统复位正常,串口工作正常。晶体振荡器、串口初始化值、仿真器设置的参数一致。
最好是测试一下下面的代码!
#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");
}
通过串口通信软件,看看能不能受到打印的信息。
另外,程序中不能有其他的串口初始化程序,这里使用的初始化程序是查询式!!