star 发表于 2012-8-21 18:53:43

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]
查看完整版本: PIC单片机技巧 zhuan