|
**********************************************************************************
示例1:
BTFSS STATUS,C
BCF PORTA,0
BTFSC STATUS,C
BSF PORTA,0
判断 进位/借位 C 的状态,然后输出到 RA0端口
说明:在PIC单片机软件摸拟串行通信中,经常会使用到! 如I2C总线,SPI总线等
示例2:
判断一个数是否2的N次方(注:此时0也视为2的N次方,可在前加入对零的判断) lxyppc 提供
DECF TEMP,W
ANDWF TEMP,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 提供
#define Rx GPIO,0
#define CARRY (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
BTFSC GPIO,GPIOC
BSF temp,7
BTFSS STATUS,C ;先放个1在第8位,然后多次右移,
;一旦这个先放的1跑到进位位,8位数字就收完了
GOTO LOOP
示例4:
双字节无符号加减子程序, W 传递减数!
data_L EQU 20H
data_H EQU 21H
MAIN
MOVLW 21H ;使用示例
CALL DATA_ADD
MOVLW 1H ;使用示例
CALL DATA_SUB
GOTO MAIN
;双字节无符号加法程序
DATA_ADD:
ADDWF data_L,F
BTFSC STATUS,C ;是否进位
INCF data_H,F ;高字节加1
RETLW 0 ;程序返回
;双字节无符号减法程序
DATA_SUB:
SUBWF data_L,F
BTFSS STATUS,C ;是否错位
DECF data_H,F ;高字节减1
RETLW 0 ;程序返回
判断一个数是否2的N次方(注:此时0也视为2的N次方,可在前加入对零的判断)
例如:
DECF TEMP,W
ANDWF TEMP,W
BTFSC STATUS,Z
GOTO _YES_; 是2的N次方
GOTO _NO_ ; 不是2的N次方
|
|
|