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

 找回密码
 立即注册
搜索
电子烟方案单片机单片机开发深圳单片机开发
单片机方案国产单片机8位单片机电子烟方案开发
查看: 4638|回复: 4
打印 上一主题 下一主题

PIC单片机技巧 zhuan

[复制链接]
跳转到指定楼层
1#
发表于 2012-8-21 18:53:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
**********************************************************************************
示例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次方

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|公司首页|Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 ( 粤ICP备09008620号 )

GMT+8, 2024-4-26 22:49 , Processed in 0.055992 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表