PIC单片机技巧 zhuan
**********************************************************************************
示例1:
BTFSSSTATUS,C
BCF PORTA,0
BTFSCSTATUS,C
BSF PORTA,0
判断 进位/借位 C 的状态,然后输出到 RA0端口
说明:在PIC单片机软件摸拟串行通信中,经常会使用到! 如I2C总线,SPI总线等
示例2:
判断一个数是否2的N次方(注:此时0也视为2的N次方,可在前加入对零的判断) lxyppc 提供
DECF TEMP,W
ANDWFTEMP,W
BTFSC STATUS,Z
GOTO _YES_; 是2的N次方
GOTO _NO_ ; 不是2的N次方
C言语版本
unsigned char temp = 0x40;
if(!(temp & (unsigned char)(temp-1))){
// 2的N次方
}
示例3:
摸拟串口接收程序,定义GPIOC为串口数据的接收端,数据接收后放在temp变量中
由: lxyppc 提供
#defineRx GPIO,0
#defineCARRY(STATUS & 0x01)
unsigned char Recieve()
{
unsigned char temp = 0x80;
do{
Delay();
temp>>=1;
if(Rx){ temp |= 0x80; }
}while(!CARRY);
return temp;
}
汇编版本:
CLRF temp
BSF temp,7
LOOP:
CALL Delay ;跟据串口波特率有关
BCF STATUS,C
RRF temp,F
BTFSCGPIO,GPIOC
BSF temp,7
BTFSSSTATUS,C ;先放个1在第8位,然后多次右移,
;一旦这个先放的1跑到进位位,8位数字就收完了
GOTO LOOP
示例4:
双字节无符号加减子程序, W 传递减数!
data_LEQU20H
data_HEQU21H
MAIN
MOVLW 21H ;使用示例
CALLDATA_ADD
MOVLW 1H ;使用示例
CALLDATA_SUB
GOTOMAIN
;双字节无符号加法程序
DATA_ADD:
ADDWF data_L,F
BTFSC STATUS,C ;是否进位
INCFdata_H,F ;高字节加1
RETLW 0 ;程序返回
;双字节无符号减法程序
DATA_SUB:
SUBWF data_L,F
BTFSS STATUS,C ;是否错位
DECFdata_H,F ;高字节减1
RETLW 0 ;程序返回
判断一个数是否2的N次方(注:此时0也视为2的N次方,可在前加入对零的判断)
例如:
DECF TEMP,W
ANDWFTEMP,W
BTFSCSTATUS,Z
GOTO _YES_; 是2的N次方
GOTO _NO_ ; 不是2的N次方
页:
[1]