函数 单片机glint_PIC单片机CCS之C语言(#BIT的用法)
#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的用法)相关推荐
- ccs用C语言进行printf时,PIC单片机CCS之C语言(#FUSES的用法)
#FUSES 语法: #fuse options options要根据设备改变.一系列有效的可选项都要放在每个devices.h文件的顶部,注释用来参考.PCW能有效编辑修改特殊的设备fuses.PC ...
- c语言单片机求最小公倍数,单片机常用的14个C语言算法,要熟记在心哦!
原标题:单片机常用的14个C语言算法,要熟记在心哦! 算法(Algorithm):计算机解题的基本思想方法和步骤. 算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么 ...
- DSB算法C语言程序,单片机中使用DSB温度传感器C语言程序.doc
单片机中使用DSB温度传感器C语言程序 单片机中使用DS18B20温度传感器C语言程序(参考1) /************************************************** ...
- 单片机原理及应用c语言编程,单片机原理及应用(C语言版)
目录 模块1单片微型计算机 项目1:认识单片微型计算机 任务11:认识单片机 任务12:相关知识 项目2:认识单片机应用 任务21:了解单片机应用 任务22:相关知识 项目3:认识仿真软件Pr ...
- 开发STC89C51系列单片机需要用到的C语言技术
文章目录 1. 概述 2. 数据类型 2.1 整数类型 2.2 浮点类型 2.3 无符号类型 3. 控制语句 3.1 分支语句 3.2 循环语句 4. 数组 7. 中断 8. 延时 1. 概述 STC ...
- led交通灯c语言程序设计,单片机控制的交通灯C语言编程.doc
单片机控制的交通灯C语言编程 单片机控制的交通灯 红灯停,绿灯行,黄灯闪烁提示行人红绿灯即将切换.四个方向各有一个红.黄.绿显示和两个数码管. 东西道为人行道(20秒),南北道为车行道(60秒),黄灯 ...
- 单片机 题库 分章节 c语言,单片机题库分章节答案C语言
(红色是考试考过的,蓝色是老师给的习题"重点看")第 1 部分 单片机概述及数学基础一.填空题1.十进制 255 的二进制是 11111111 ,十六进制是 FF .2.单片机是将 ...
- SPI存储器c语言51程序,AVR单片机SPI通讯实例程序 (C语言源代码)
AVR单片机SPI通讯实例程序 (C语言源代码) 来源:-- 作者:-- 浏览:213 时间:2016-08-10 14:18 标签: 摘要: AVR单片机SPI通讯实例程序 (C语言源代码) 一个S ...
- 单片机c语言位运算写法,单片机与嵌入式系统中C语言的位运算小记
原标题:单片机与嵌入式系统中C语言的位运算小记 编了个PIC的项目,对里的还是蛮有感悟的,特此记录一下. 譬如说,在程序中定义了一个char类型的变量, purge_short_enable_flag ...
最新文章
- JS原生选项卡 – 幻灯片效果
- MVC项目实践,在三层架构下实现SportsStore-03,Ninject控制器工厂等
- 万字归纳总结 | 数据库表设计与SQL编写技巧
- osg-3D世界到屏幕
- 前端学习(1980)vue之电商管理系统电商系统之实现文本框和按钮的切换
- PHP笔记-表格及分页功能
- node 连接mongodb
- 多数元素(哈希表和投票法)
- Unity3D设置天空盒skybox
- linux中用tailf实时观看tomcat日志
- Windows 各平台远程桌面客户端
- 计划bom表 java_ERP总结系列(BOM浅谈)
- Vue / axios / props 调用后端接口数据并渲染到页面
- “发烧请假”是面照妖镜,聊聊我以前遇到的奇葩领导
- android多线程讲解与实例
- 16省8-四平方和(四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和。 如果把0包括进去,就正好可以表示为4个数的平方和。 比如:)
- 零基础想学习Web安全,如何入门?
- jquery动态添加带有样式的HTML标签元素
- 一周快讯:乐视网市值蒸发349亿,钱宝网张小雷被逮
- AndroidManifest.xml--android系统权限定义
热门文章
- 网上找的,C# 小票打印机 直接打印,备用
- 如何通过ssh登录linux,如何用SSH登录linux?
- movelast对数据记录数有要求吗_新颁布丨药品记录与数据管理要求(试行)解读...
- android申请多个运行时权限,Android 6.0(API 23) 运行时权限(二)之权限申请
- 3d建模电脑配置要求_建模你会一个软zbrush够吃一辈子,你学会了吗?
- ktv app html,ktv.html
- matlab 矩阵引用,MATLAB矩阵生成、引用
- oracle一列有多个约束,在oracle中创建unique唯一约束(单列和多列)
- 智能贴图样机素材在手,海报逼格马上就有!
- java maven jar 打包_使用Maven打包可运行jar和javaagent.jar的区别