我是想用372完成51单片机和pc机的通讯,板子是自己画的,现在在用仿真器进行调试,顺利地时候可以正确的完成上位机和下位机的数据传输, 但是,有的时候会出现连372初始化,也就是CHECK_EXIST命令就是执行不过去。可能有时候一天都不能成功的初始化,但是如果不管它,转天来调试又很顺利地连数据都能传。我用的是万利的仿真器 有没有哪位能给我分析一下可能是什么原因造成这种不稳定性??谢谢各位了!不然小妹就要天天看372的脸色了!谢谢!!
附上我初始化的关键代码,大家帮我看看是不是代码的问题,再次谢谢大家! void Delay2us( )//延时程序 { unit8 i; for ( i = 4; i != 0; i -- ); } void CH372_INIT() /* CH372初始化代码 */ { unit8 i,j,k; CH372_WR_CMD_PORT(CMD_RESET_ALL); Delay50ms();
CH372_CMD_PORT=0; CH372_DAT_PORT=0;
CH372_WR_CMD_PORT(CMD_CHECK_EXIST); CH372_WR_DAT_PORT_8(0xAA); i=~0xAA; j=CH372_RD_DAT_PORT();
if(j!=i) /*CH372出错*/ { // while(1) // { // LED=0; //}
for(k=10;k!=0;k--) { CH372_WR_CMD_PORT(CMD_RESET_ALL); Delay50ms(); } /*重复发送复位命令*/ CH372_WR_DAT_PORT_8(0);/*数据归零 */ Delay50ms(); }
当你测试命令不成功的话,那么,计算机上面可以找到新的硬件吗?
我在调下位机的时候发现,如果我的372可以顺利执行完check_exist的话,pc的“设备管理器”里就能显示出“外部接口——CH372”,但是如果我说的这种不能顺利初始化的时候,pc的“设备管理器”里就没有显示ch372
如果没显示的话,那就不能和计算机进行通信,估计程序上面还有问题,你用的是什么单片机?采用的是总线方式还是模拟I/O口的方式?可以不可以看下三个读写子函数?
下面的程序你可以参考一下: /********************************************************************** ch372初始化 测试CH372是否正常工作 /**********************************************************************/ void ch372_init() { uchar i; CH372_CMD_PORT=CMD_CHECK_EXIST; /* 测试CH372是否正常工作 */ delay2us(); CH372_DAT_PORT=0x33; /* 写入测试数据 */ delay2us(); i = ~0x33; /* 返回数据应该是测试数据取反 */ for (i=80;i!=0;i--) { if(CH372_DAT_PORT!= i) /* CH372不正常 */ { CH372_CMD_PORT=CMD_RESET_ALL; /* 多次重复发命令,执行硬件复位 */ delay2us(); } } CH372_CMD_PORT=0; delay50ms(); /* 延时50ms */ }
好的,代码如下,采用的89c52,我可不可以弱弱的问一句什么是总线方式?什么是模拟I/O口的方式? void CH372_WR_CMD_PORT(unit8 cmd) /*向CH372命令端口写命令数据,周期不小于4uS */ { Delay2us(); CH372_CMD_PORT=cmd; Delay2us(); /* 至少延时2uS */ } void CH372_WR_DAT_PORT_8(unit8 dat)/*向CH372的数据端口写入单字节数据*/ { CH372_DAT_PORT=dat; Delay1us(); } unit8 CH372_RD_DAT_PORT() /*从CH372的数据端口读出数据,周期不小于1.5us */ {
Delay1us(); return(CH372_DAT_PORT);
}
这三个子函数没有问题, 至于什么是总线方式和模拟I/O口的方式,建议你看一下CH372的datasheet,最后有讲到CH372如何与单片机连接的部分. 还有就是建议你把程序下载到单片机去看一下结果,确认一下是不是受仿真器的影响!!!
恩,谢谢各位的解答 正在跟大家请教这会,我又把仿真器插了拔,拔了插,穷鼓捣了半天,竟然莫名其妙的又好了,现在真的怀疑是仿真器的问题。 不管怎样,谢谢大家热心的帮忙!!谢谢!