PIC单片机CCS之C语言(#BIT的用法)

发布者:码农创想家最新更新时间:2016-09-27 来源: eefocus关键字:PIC单片机  CCS  BIT 手机看文章 扫描二维码
随时随地手机看文章
#BIT

语法: #bit  id=x.y

id是一个有效的C标识符;

x是一个常数或是一个C变量;

y是一个常数(为0~7)

目的:创建一个新的C变量(是一位),放置在存储区中,对应的是字节x中y位,有益于在C语言中只接存取CPU特殊功能寄存器中的一位.它也可用来存取标准C变量的一位.

例子:

#bit T0IF = 0xb.2       //定义T0IF的位地址为0xb.2

T0IF=0;               //清除Timer0的中断标志位

int result;

#bit result_odd = result.0  //定义result_odd的位地址为result.0

if(result_odd){;}        //若result_odd为1,则空操作

例子文件: ex_glint.c

#if defined(__PCM__)   //若使用了PCM编译器,则defined(__PCM__)返回值为1

#include <16F877.h>    //包含16F877.h头文件

#fuses HS,NOWDT,NOPROTECT,NOLVP  //HS:高速晶振/谐振器, NOWDT:不使用WDT

                                     // NOPROTECT:程序存储器代码不保护

#use delay(clock=20000000)    //使能内置函数的功能:delay_ms()和delay_us()

                           //#USE DELAY()必须在#use rs232()使用之前出现.

#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)  //使用波特率为9600,

//发送脚为PIN_C6

//接收脚为PIN_C7

//使能内置函数:GETC,PUTC和PRINTF;

#elif defined(__PCH__)

#include <18F452.h>

#fuses HS,NOWDT,NOPROTECT,NOLVP

#use delay(clock=20000000)

#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

#endif   //结束if

 

long counter;  //将counter定义为long型变量

 

#if defined(__PCM__)   //若使用了PCM编译器,则defined(__PCM__)返回值为1

   int save_w;         //将save_w定义为int型变量

   #locate save_w=0x7f  //将save_w定位在RAM中,0x7f的地址处, 用来暂存W的内容

   int save_status;      //将save_status定义为int型变量, 用来暂存status的内容

   #locate save_status=0x20  //将save_status定位在RAM中, 0x20的地址处,

   #byte status = 3     //定义status的地址为3,即状态寄存器的地址

   #bit zero_flag = status.2  //定义zero_flag的位地址为status.2,即status的Z位

   #bit t0if = 0xb.2     //定义t0if的位地址为0xb.2,即timer0的溢出标志位

#elif defined(__PCH__)

   int save_w;

   #locate save_w=0x80

   int save_status;

   #locate save_status=0xFF

  

   #byte status = 0xFD8

   #bit zero_flag = status.2   //status的全0位,即Z

   #bit t0if = 0xFF2.2

#endif    //结束if

#INT_GLOBAL  //指示下面的函数代替编译器产生中断

void isr()  {

   #asm     //插入汇编开始

   //store current state of processor

   MOVWF save_w    //将W的内容存到save_w中,目的是保存W,即将W入栈

   SWAPF status,W    //将status内容高半字节和低半字节进行交换,存入W中

   BCF   status,5     //将status的第5位清0,即将RP0=0

   BCF   status,6     //将status的第6位清0, 即将RP1=0,两句是用来选择bank0

   MOVWF save_status //将W的内容存到save_status中,目的是保存status,即将status入栈

   BCF   t0if        //将timer0的中断标志位t0if清0

   INCF  counter,F    // counter加1后存到counter

   BTFSC zero_flag    //若counter不等于0x00, 则zero_flag=0,跳过下一句;

//若counter=0x00,zero_flag=1,则执行下一句;

   INCF  (&counter+1),F   // counter的地址加1, (&counter+1)的内容加1

   SWAPF save_status,W  //将save_status内容高半字节和低半字节进行交换,存入W中

   MOVWF status     //将W的内容存到status中, status出栈

   SWAPF save_w,F   //将save_w内容高半字节和低半字节进行交换,其结果存入save_w中

   SWAPF save_w,W    //将save_w内容高半字节和低半字节进行交换,存入W 中, W出栈

   #endasm    //插入汇编结束

}

void main()   {

printf("\r\nStarting the counter.\r\n\n");

   counter = 0;

setup_counters(RTCC_INTERNAL,RTCC_DIV_32); //设置Timer0的时钟源为内部时钟源

                                            //每隔32个脉冲,TMR0计数1次

   enable_interrupts(INT_RTCC);      //允许Timer0(RTCC)溢出,建立中断标志位

   enable_interrupts(GLOBAL);        //使能总中断

 

   while(TRUE)

   {

      printf("The counter value is currently:  %5lu\r\n", counter);

      delay_ms(1000);   //延时1000ms

   }

}

//上面的例子只是说明用timer0对内部时钟源进行32分频后计数.

关键字:PIC单片机  CCS  BIT 引用地址:PIC单片机CCS之C语言(#BIT的用法)

上一篇:PIC单片机CCS之C语言(#DEVICE的用法)
下一篇:PIC 8位单片机指令识读技巧

推荐阅读最新更新时间:2024-03-16 15:12

PIC单片机输出比较(PWM)模块介绍
在Android红外遥控器项目中使用了输出比较OC1(PWM)模块来产生38KHz PWM脉冲,脉冲占空比与红外信号发射距离以及产品功耗有关。其中占空比越大,发射距离越远,功耗越大。红外载波的占空比一般在1/3左右。 将输出比较模块配置为PWM 操作,需要以下步骤: 1.将OCx输出配置为可用的外设引脚选择引脚之一。 2.计算所需的占空比并将计算结果装入 OCxR 寄存器。 3.计算所需的周期并将计算结果装入 OCxRS 寄存器。 4.选择当前的 OCx 作为同步源,方法是把 0x1F写入SYNCSEL 4:0 (OCxCON2 4:0 ),把 0 写入OCTRIG (OCxCON2 7 )。 5.通过写 OCTSEL2 2:
[单片机]
PIC单片机电子钟程序+仿真电路
#include pic.h #define uchar unsigned char #define uint unsigned int #define CS RA5 uchar secs = 0; uchar minutes = 0; uchar hours = 0; unsigned char disbuf = {1,2,3,4,5,6,7,8}; void delay_ms(uint n) { uchar i; while(n--) { for(i=0;i 100;i++); } } void Port_Initial(void) { TRISC = 0xD7;
[单片机]
<font color='red'>PIC单片机</font>电子钟程序+仿真电路
关于PIC单片机的14个问题及解答
关于PIC单片机的14个问题及解答 对于一个高可靠性的系统设计,晶体的选择非常重要,尤其设计带有睡眠唤醒(往往用低电压以求低功耗)的系统。这是因为低供电电压使提供给晶体的激励功率减少,造成晶体起振很慢或根本就不能起振。这一现象在上电复位时并不特别明显,原因时上电时电路有足够的扰动,很容易建立振荡。在睡眠唤醒时,电路的扰动要比上电时小得多,起振变得很不容易。在振荡回路中,晶体既不能过激励(容易振到高次谐波上)也不能欠激励(不容易起振)。晶体的选择至少必须考虑:谐振频点、负载电容、激励功率、温度特性、长期稳定性。 2、如何判断电路中晶振是否被过分驱动? 电阻RS常用来防止晶振被过分驱动。过分驱动晶振会渐渐损耗减少晶振的接触电
[单片机]
关于<font color='red'>PIC单片机</font>的14个问题及解答
基于PIC单片机的厨房设备智能组合控制设计
随着智能家电控制技术的不断发展,具有多功能和智能化的厨房控制器成为厨房电器设备发展的主流。和传统单一厨房设备控制器相比,多功能厨房控制器具有占用空间小、成本低、功能多、便于设备统一管理,使用安全、方便等优点。 系统以PIC单片机作为主控制芯片,选用VFD(Vacuum Fluorescent Display)真空荧光屏为显示器,结合气敏传感器,热敏电阻,高压点火器,继电器等受控对象,通过检测外部信号以及内部定时时间状态可以控制各种受控对象工作状态之间的相互转换,实现对厨房电器设备的智能控制。系统结构框图如图1所示。 1 各单元电路硬件设计 1.1 电源电路设计 设计所需的6组工作电源均由如图2所示的电路提供。6组电源分别为
[单片机]
基于<font color='red'>PIC单片机</font>的厨房设备智能组合控制设计
初学PIC单片机--存储器
初学PIC单片机--存储器 存储器可分为数据存储器(RAM)和程序寄存器(ROM或EEPROM)两种. 它是计算机的记忆装置,通过存储程序和数据,使单片机具有记忆能力. RAM用来存放临时数据或中间结果(掉电数据不保存) EEPROM用来存放程序或数据(单片机掉电后EEPROM中的数据/程序可长期保存) 特殊功能寄存器SFR (1)间接寻址寄存器INDF和FSR寄存器 (2)程序状态寄存器STATUS (3)程序计数器PC 1 GOTO跳转 2 堆栈(堆栈的操作遵循一种"后进先出"的规则,即最先进的数据最后出栈,最后进的数据最先出栈.) (4)端口寄存器PORTA---PORTE (5)选择寄器COPTIO
[单片机]
OPPO Find X3系列官宣:搭10亿色臻彩屏,原生支持10bit显示
 今日上午,OPPO 官方宣布,Find X3 系列将搭载 10 亿色臻彩屏,原生支持 10bit 显示。   OPPO 表示,Find X3 系列所搭载的 10 亿色臻彩屏,作为全链路 10bit 色彩引擎的最后一环,10bit 显示的屏幕色彩显示更加真实,色彩间的过渡也更加顺滑。 除了原生支持10bit 显示之外,10 亿色臻彩屏还将支持多项创新显示技术。   IT之家了解到,OPPO Find X3 系列还将搭载 10 亿色双主摄,配备两颗旗舰级摄像头。10 亿色双主摄将作为全链路 10bit 色彩引擎的第一步。   同时,OPPO Find X3 系列将首发搭载全链路 10bit 色彩引擎。全链路 10bit 覆
[手机便携]
基于16-bit MCU实现超低功耗运动检测系统解决方案
谐振 LC 传感器技术用于运动检测已有数年,包括流量计量以及其它低速转动检测系统等。几乎在所有情况下,推动上述传感器设计发展的共同主线都是低功耗解决方案的需求,它通常为电池供电设备的低功耗解决方案。通过模拟测量组件与独立于主 CPU 工作的状态机处理接口相结合,本文以德州仪器 ( TI ) 的 MSP430FW42x 系列16位MCU为例,给出超低功耗运动检测系统解决方案的清晰说明。图 1 显示了简易旋转运动检测系统的实施。除了微控制器与显示器之外,还显示了二通道谐振 LC 传感器的配置。单一传感器仅可用于转动检测,添加了第二个传感器后,就还可提供方向信息。 图 1 MSP430FW42x 转动系统原理图 传感器原理 使
[单片机]
基于16-<font color='red'>bit</font> MCU实现超低功耗运动检测系统解决方案
数字电位器X9241与PIC单片机接口程序
X9241概述   X9241是XICOR公司生产的、把4个E2POT数字电位器集成在单片的CMOS集成电路上的一种数字电位器。它包含4个电阻阵列,每个阵列包含63个电阻单元,在每个单元之间和2个端点之间都有被滑动单元访问的抽头点。滑动单元在阵列中的位置由用户通过2线串行总线接口控制。每个电阻阵列与1个滑动端计数寄存器(WCR)和4个8位数据寄存器联系在一起。这4个数据寄存器可由用户直接写入和读出。WCR的内容控制滑动端在电阻阵列中的位置,其功能框图如图1所示。 2、 X9241工作原理   X9241支持双向总线的定向规约,是一个从属器件。它的高4位地址为0101(器件类型辨识符),低4位地址由A3~A0输入端状态决定。在S
[单片机]
数字电位器X9241与<font color='red'>PIC单片机</font>接口程序
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved