bit EvenParity(unsigned char data)<br />{<br /> //data += 3; [注]<br /> #asm<br /> swapf ?a_EvenParity+0,w //入口参数data 的寻址符为?a_EvenParity+0<br /> xorwf ?a_EvenParity+0,f<br /> rrf ?a_EvenParity+0,w<br /> xorwf ?a_EvenParity+0,f<br /> btfsc ?a_EvenParity+0,2<br /> incf ?a_EvenParity+0,f<br /> #endasm<br /> //至此,data 的最低位即为偶校验位<br /> if (data&0x01) return(1);<br /> else return(0);<br />}<br />注意//data += 3行,不要这一航的时候计算结果是错误的。察看编译后的汇编指令,发现参数data没有正确导入。<br /> <br />有data += 3时:<br /> 062E 0183 CLRF 0x3<br /> 062F 00B8 MOVWF 0x38 //*参数传递近来<br />293: data += 3;<br /> 0630 3003 MOVLW 0x3<br /> 0631 07B8 ADDWF 0x38, F<br /><br />没有data += 3时:<br />291: bit EvenParity(unsigned char data)<br />292: {<br />293: // data += 3;<br />294: #asm<br />295: swapf ?a_EvenParity+0,w //入口参数data 的寻址符为?a_EvenParity+0<br /> 062F 0E38 SWAPF 0x38, W //*没有参数传递,直接就用了<br />296: xorwf ?a_EvenParity+0,f<br /> 0630 06B8 XORWF 0x38, F<br /><br />请问是不是有什么地方设置的不对,使用的MPLAB是7.31的,PICC8.05<br /><br />另外使用memecpy(), 等指令时,不能从低两Bank,拷贝数据到 高两Bank,是否正常??<br /><br />新用PICC16,望高手不吝赐教:)<br /> |
|