硬件仿真的话,仿真器可以让程序单步执行,还能够设置断点,看程序运行的时候相应的寄存器的值是否跟设计的一样,对调试软件很有帮助。
软件仿真的话常用的就是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];
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)