单片机的仿真问题

单片机的仿真问题,第1张

首先,,烧到单片机里面和单片机的仿真,你说的仿真应该指的是软件仿真。不论是软件仿真还是硬件仿真都代替不了程序实际运行的真实效果,首先,软件仿真的话,软件毕竟是软件,可能会有漏洞,我有时候用KEIL自带的软件仿真器程序能运行但是烧写之后不能运行是很正常的;
硬件仿真的话,仿真器可以让程序单步执行,还能够设置断点,看程序运行的时候相应的寄存器的值是否跟设计的一样,对调试软件很有帮助。
软件仿真的话常用的就是protues,我一般直接用KEIL的软件仿真,功能没有protues强大,但是方便;
硬件大致仿真器分两种,一种是用FGPA或者特殊的CPU来模拟单片机,程序每次是烧在RAM里面运行的,网上有用SST89E516做51单片机仿真器的,就是这个原理,每执行一次单步,就重新烧写一次程序,只不过SST89E516是烧在FLASH里面的,单步用多了的话,SST89E516很快就挂了,这种仿真器效果要比上面的软件仿真效果好,但是也有问题,它是用别的东西模拟的单片机,跟真实的还是有差异;现在用的很多的都是叫做JTAG的嵌入式仿真,这种仿真让单片机自己仿真自己,只是使用者可以随时把程序运行停下来看寄存器,效果就好多了,现在很多单片机都具有这个功能,像C8051F,AVR,ARM都有,仿真器的硬件也比上面的一种简单很多,便宜许多
初学51的话,硬件仿真成本太大,可以多用用软件仿真,但是肯定不能完全只用软件仿真,还是要实际运行一下看效果的;不用仿真器,用串口帮助调试也是很不错的选择,在感觉有问题的地方用串口发点数据,证明前面没有卡死或者直接就发单片机的状态,调试起来也很快

问题可能出在你发送数据的格式

while(1)
{
while(RI==0);
RI=0;
k=SBUF;
P1=tab[k];
}
}
//以上程序,串口助手只能以十六进制发送数据才能正常显示。
//以字符形式发送数据,程序做如下修改。
while(1)
{
while(RI==0);
RI=0;
k=SBUF;
P1=tab[k-0x30];
}
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12753360.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-27
下一篇 2023-05-27

发表评论

登录后才能评论

评论列表(0条)

保存