英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

标题: PIC单片机技巧 zhuan [打印本页]

作者: star    时间: 2012-8-21 18:53
标题: PIC单片机技巧 zhuan
**********************************************************************************
示例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次方






欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://www.enroobbs.com/) Powered by Discuz! X3.2