#BIT

语法: #bit id=x.y本文引用地址:http://www.eepw.com.cn/article/201611/315392.htm

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分频后计数.

函数 单片机glint_PIC单片机CCS之C语言(#BIT的用法)相关推荐

  1. ccs用C语言进行printf时,PIC单片机CCS之C语言(#FUSES的用法)

    #FUSES 语法: #fuse options options要根据设备改变.一系列有效的可选项都要放在每个devices.h文件的顶部,注释用来参考.PCW能有效编辑修改特殊的设备fuses.PC ...

  2. c语言单片机求最小公倍数,单片机常用的14个C语言算法,要熟记在心哦!

    原标题:单片机常用的14个C语言算法,要熟记在心哦! 算法(Algorithm):计算机解题的基本思想方法和步骤. 算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么 ...

  3. DSB算法C语言程序,单片机中使用DSB温度传感器C语言程序.doc

    单片机中使用DSB温度传感器C语言程序 单片机中使用DS18B20温度传感器C语言程序(参考1) /************************************************** ...

  4. 单片机原理及应用c语言编程,单片机原理及应用(C语言版)

    目录 模块1单片微型计算机 项目1:认识单片微型计算机 任务11:认识单片机 任务12:相关知识 项目2:认识单片机应用 任务21:了解单片机应用 任务22:相关知识 项目3:认识仿真软件Pr ...

  5. 开发STC89C51系列单片机需要用到的C语言技术

    文章目录 1. 概述 2. 数据类型 2.1 整数类型 2.2 浮点类型 2.3 无符号类型 3. 控制语句 3.1 分支语句 3.2 循环语句 4. 数组 7. 中断 8. 延时 1. 概述 STC ...

  6. led交通灯c语言程序设计,单片机控制的交通灯C语言编程.doc

    单片机控制的交通灯C语言编程 单片机控制的交通灯 红灯停,绿灯行,黄灯闪烁提示行人红绿灯即将切换.四个方向各有一个红.黄.绿显示和两个数码管. 东西道为人行道(20秒),南北道为车行道(60秒),黄灯 ...

  7. 单片机 题库 分章节 c语言,单片机题库分章节答案C语言

    (红色是考试考过的,蓝色是老师给的习题"重点看")第 1 部分 单片机概述及数学基础一.填空题1.十进制 255 的二进制是 11111111 ,十六进制是 FF .2.单片机是将 ...

  8. SPI存储器c语言51程序,AVR单片机SPI通讯实例程序 (C语言源代码)

    AVR单片机SPI通讯实例程序 (C语言源代码) 来源:-- 作者:-- 浏览:213 时间:2016-08-10 14:18 标签: 摘要: AVR单片机SPI通讯实例程序 (C语言源代码) 一个S ...

  9. 单片机c语言位运算写法,单片机与嵌入式系统中C语言的位运算小记

    原标题:单片机与嵌入式系统中C语言的位运算小记 编了个PIC的项目,对里的还是蛮有感悟的,特此记录一下. 譬如说,在程序中定义了一个char类型的变量, purge_short_enable_flag ...

最新文章

  1. JS原生选项卡 – 幻灯片效果
  2. MVC项目实践,在三层架构下实现SportsStore-03,Ninject控制器工厂等
  3. 万字归纳总结 | 数据库表设计与SQL编写技巧
  4. osg-3D世界到屏幕
  5. 前端学习(1980)vue之电商管理系统电商系统之实现文本框和按钮的切换
  6. PHP笔记-表格及分页功能
  7. node 连接mongodb
  8. 多数元素(哈希表和投票法)
  9. Unity3D设置天空盒skybox
  10. linux中用tailf实时观看tomcat日志
  11. Windows 各平台远程桌面客户端
  12. 计划bom表 java_ERP总结系列(BOM浅谈)
  13. Vue / axios / props 调用后端接口数据并渲染到页面
  14. “发烧请假”是面照妖镜,聊聊我以前遇到的奇葩领导
  15. android多线程讲解与实例
  16. 16省8-四平方和(四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和。 如果把0包括进去,就正好可以表示为4个数的平方和。 比如:)
  17. 零基础想学习Web安全,如何入门?
  18. jquery动态添加带有样式的HTML标签元素
  19. 一周快讯:乐视网市值蒸发349亿,钱宝网张小雷被逮
  20. AndroidManifest.xml--android系统权限定义

热门文章

  1. 网上找的,C# 小票打印机 直接打印,备用
  2. 如何通过ssh登录linux,如何用SSH登录linux?
  3. movelast对数据记录数有要求吗_新颁布丨药品记录与数据管理要求(试行)解读...
  4. android申请多个运行时权限,Android 6.0(API 23) 运行时权限(二)之权限申请
  5. 3d建模电脑配置要求_建模你会一个软zbrush够吃一辈子,你学会了吗?
  6. ktv app html,ktv.html
  7. matlab 矩阵引用,MATLAB矩阵生成、引用
  8. oracle一列有多个约束,在oracle中创建unique唯一约束(单列和多列)
  9. 智能贴图样机素材在手,海报逼格马上就有!
  10. java maven jar 打包_使用Maven打包可运行jar和javaagent.jar的区别