新人再问个程序方面的问题,谢谢

看了一段例程,其中下面一段没太搞清楚 length = CH375_DAT_PORT; THIS_CMD_CODE = CH375_DAT_PORT;那么length=THIS_CMD_CODE ?还是说length里面存放的是上位机发送的第一个字节,而THIS_CMD_CODE存放的第二个字节。谢谢帮忙解答一下 if ( InterruptStatus == USB_INT_EP2_OUT ) { /* 批量端点下传成功 */ CH375_CMD_PORT = CMD_RD_USB_DATA; /* 从当前USB中断的端点缓冲区读取数据块,并释放缓冲区 */ Delay2us( ); /* 如果时钟频率低于16MHz则无需该指令延时 */ length = CH375_DAT_PORT; /* 首先读取后续数据长度 */ if ( length != 0 ) { /* 如果长度为0则不处理 */ THIS_CMD_CODE = CH375_DAT_PORT; /* 保存当前命令码,因为我们测试程序与PC机应用程序约定首字节为命令码 */ if ( THIS_CMD_CODE == TEST_DOWNLOAD ) { /* 测试下传速度 */ while ( --length != 0 ) /* 先减1以去掉首字节后 */ c1 = CH375_DAT_PORT; /* 接收数据,为了测试速度,数据舍弃,24MHz的MCS51每读取一个字节需要2uS */ }

length = CH375_DAT_PORT; --> mov dptr,#CH375_DAT_PORT movx A,@dptr mov length,A THIS_CMD_CODE = CH375_DAT_PORT --> mov dptr,#CH375_DAT_PORT movx A,@dptr mov THIS_CMD_CODE,A

上面的汇编假定length,THIS_CMD_CODE为data类型。其实你把CH375_DAT_PORT想成一个外部RAM就容易理解了。


谢谢您的回答,不过我还是没搞清楚 mov dptr,#CH375_DAT_PORT movx A,@dptr mov length,A 这不就相当于把CH375_DAT_PORT中内容给了length变量吗? 而mov dptr,#CH375_DAT_PORT movx A,@dptr mov THIS_CMD_CODE,A 这不也相当于把CH375_DAT_PORT中内容又给了THIS_CMD_CODE变量吗? 这期间CH375_DAT_PORT中的值有改变吗?如果没有的话,那么length的值和THIS_CMD_CODE的值不还是应该相等的吗? 问的可能有点傻,麻烦再帮忙解答一下


CH375_DAT_PORT中的值是改变的.第一次读出来的是上位机下传的数据长度,第二次读出来的首字节是命令码,看是进行上传还是下传,再接收或是发送数据,长度为第一次读出来保存的长度.


谢谢,我问的就是这个 另外我想知道,这种改变是怎么发生的,是只要你读一个字节后,CH375_DAT_PORT中内容就由硬件立即自动更新吗


实际在C语言中可能是看不到这种变化的,你可以看下汇编代码,实际汇编就很容易看出来怎么复值的了: MOV DPTR,#CH375_DAT_PORT MOVX A,@DPTR 这样之后在将数据放到RAM里面去就可以了


谢谢楼上的,可能我汇编学的也很烂,我还是搞不明白 MOV DPTR,#CH375_DAT_PORT MOVX A,@DPTR 只要CH375_DAT_PORT中的值不变,那么读进A累加器中的数据不都是一样的吗 loveapple说CH375_DAT_PORT中的值是改变的,我想知道这种改变是怎么发生的


CH375_DAT_PORT是外部地址啊!


呵呵,可能我这这问题太弱了,请别见笑啊 length = CH375_DAT_PORT; THIS_CMD_CODE = CH375_DAT_PORT; 这两个程序先后执行,将外部地址CH375_DAT_PORT中的内容先后赋给length和THIS_CMD_CODE(这两个变量得到的值应该不一样吧) 我就想知道外部地址CH375_DAT_PORT中的值是依据什么改变的 比如说 mov dptr,#CH375_DAT_PORT movx A,@dptr mov length,A mov dptr,#CH375_DAT_PORT movx A,@dptr mov THIS_CMD_CODE,A 那么只要CH375_DAT_PORT中的值不改变,那么赋给length和THIS_CMD_CODE的值不就都一样了吗 还是说因为你执行了length = CH375_DAT_PORT这条指令,外部地址CH375_DAT_PORT中的值就自动发生了改变


CH375_DAT_PORT的值实际上就是375端口上面的值,你只要读取走了的话,值就会改变,自己仔细看下375的说明书


哦,我明白了,谢谢您的解答


我晕......估计很少用接口芯片。


只有登录才能回复,可以选择微信账号登录