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