在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → PIC CCS C编译器使用手册

PIC CCS C编译器使用手册

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:2.71M
  • 下载次数:8
  • 浏览次数:190
  • 发布时间:2020-10-28
  • 实例类别:一般编程问题
  • 发 布 人:robot666
  • 文件格式:.pdf
  • 所需积分:2
 

实例介绍

【实例简介】
PIC CCS C编译器使用手册,PIC系列单片机在MPLAB IDE环境下的C编译器的一种,有助于初学者的学习
第一部分:综述 相信通过前面单片杌课程和智能电子制作二的学习,大家都已经很熟悉51单片机的编程 规则和编程环境了,现在我们又将要接触PIC系列单片机的编程和学习,面对新的开发环境 和芯片,有些同学觉得这个转换很难,其实一点都不难,大家都要有信心才行,对于每种芯 片和其对应的开发环境,大家只要做到把握里面的规律,学起来是不会难的,在下而的学习 中我们对PIC系列单片杋选用 MPLAB软件编写代码,编译器选用CCS编译器,不管是51 单片机系统的开发还是PIC系列单片机的开发,其基础全是C语言(或者汇编语言),所不 同的是各个编译器拥有不同的数据类型定义和各种特殊的处理器指令以及预处理指令 1、ccS编译器定义的数据类型 在编写程序之前,我们首先需要了解CCS编译器支持的缴据类型 表12变量类型和比特数 标准类塑 CCS-PICC默认类型比特数(位) 取愎范 bit intl, short 0,1 char int8,in,char,signed char, int, 8 -128~127 short int unsigned char unsigned int, unsigned char 0255 signed char int&, int, char, signed char, int,8 -128-127 hort int IDt intl 6, long int 16 3276832767 short int Io -3276832767 nsigned int unsigned long int 16 0-55535 signed int 16 32768-32767 long int int32 52 2147483648-2147483647 unsigned long int unsigned int32 32 44294967295 signed long int signed int32 32 2147483648~2147483647 float float ±1,175e38-士3,402938 2、ccS编译器特有的处理器指令以及预处理指令 DLF|N匚 ID STRING FlF expr ENOLIST FEI SE FIFIFF id PR凸 GMA cd Standard c FENDIE fINCLUDE FILENAME FUNDEF id ERROR LIST 共NL|NE FINT GLOBAL ESEPARATE Function LINT DEFAULT FNT KKK Qua雷er 凸 LINE P Pre Defined DEVICE PCB TIME Identifier FILE PCM FILENAME ETASK EUSE RTOS RTOS T FUSES options 升 D NUMBER Specification EID CHECKSU ESERIALIZE =lISE DFI AY.I OCK ISF FIXFD 10 =SF RS232 Built-in FUSE FASI t FUSE 20 EUSE SANDARD U Libraries USE SPI tASM =BYTE id=id 共ROM aBTidFid const TENDASI ETYPE EBT i=crust. ernst FFII ROI =了 FRO RAM Memory Control EBUILD =LOCATE ic=const TBYTE id=coust FRESERVE ACASE LOPT I LPRIORITY Compiler WIGNORE WARNINGS FORG 这一部分大家可以参看 CCs Microchip PIC. pdf电子文档中的内容得到详细的结果。在 CCS Microchip PIC书本的第三章对其进行了详细的讲解。 第二部分:IO端口操作 1、IO端口操作常用函数如下表所示: Discrete IA void output low(const pin) void output high(const oin vdid output float(const pin); void output bit(const pin, char value) char inputeohst pin). void output如 ortfchar value; char ingot party void port b pullups(char value) void set tris port(char value); 上表常用的函数的参数具体使用规则可以通过下面两个途径得到: (1)芯片的头文件(本材料里面采用的芯片为PIC1683,所以可以在CCS编译器安装 路径中找到PIC16f883h头文件了解)。 (2)通过 MPLAB的帮助键调出cCS编译器的帮助文件进行查找了解 隐藏后退前进 需 目录()索引(四搜系) 键入要查找的关键字): CCS C Compiler T DEVCE FILE lelp File LINE PCB tbuild #C点SE l100010100 匚EFE lEVICE 1001O4O TELE 1100101010290 Q161011 HENDASM TESsIE 三RR0 显示皿〕 TonL Daau 2、有关O口操作的最简单的例子 利用芯片A口的第1位(即RA0)米控制LED的点亮。PIC单片机晶振为10M。具体 代码如下 #include 16f883 h"//head file #fuses hs nowt //set pic #use delay (clock=10000000) //set clock #use fast 1O(A) //set IO void main(void) //main function set tris a(0b00000000): //set io direction output high(PIN AO while(1 output low(PIN∧O); V/LED on delay ms(500) output high(PIN AO) /LED off delay ms (500) 最简单的例子的分析 直处理备 速度 Include“16f83/ head F1e头文件包含指令 fuses HS, NOWDT //set pic #use delay(clock=16555505) //set clock 处理器预处理 设置A口方向: tuse fast lo(A) //set I0 指令 0—输出1--输入 woid main(void)t //main Function set tris a(b』g); //set io direction output high(PIN A6); RAO输出低电平 while(1) 主函数 延时500ms output lOW(PIN A0); //LED on delay ms(500); output high(PIN AO); //LED OFF delay ms(590); RA0输出高电平 注意:默认情况下CCS编译器是不区分大小写的! 通过该例子大家可以了解掌握最基本的PIC编程格式,熟悉PIC编程的基本流程,CCS 编译器的基本知识以及 MPLAB开发坏境 3、上面LED点亮的另一钟实现形式 程序代码: include 16f883h"//head file #fuses hs nowt //set pic Huse delay(clock=10000000) //set clock #use fast iO(A) //set IO #define PORTa ox5 #define POrtB ox6 #define POrto ox7 #bit led-portao void main(void) //main function set tris a(0b00000000) /set io direction LED=1; while(1)i LED=0 V/LED on delay ms (500) LED=l V/LED off delay ms (500) 注意:对PIC单片机来说,一般IO口都是从0x05地址开始依次递增的! 4、IO口操作的扩展--LED流水灯 使用PIC芯片的C口来点亮LED流水灯,LED共阴极。代码如下 #include"16f883."// head file #use fast IO(A //set IO #define PORTa Ox5 #define POrtB ox6 #define PORt Ox7 void main(void) //main function int iled set tris c(0b00000000) //set io direction *+PORTC-OXOO while(1i led=0x01 for(i=0;i<8;i++){ * PORTO=ed;/led变量取反 delay ms (500) ledled<<1 第三部分:中断处理 1、基础知识 该部分内容具体参见 CCS Microchip PIC. pdf电子文档中的第三章第7小节的内容,下 面给出重点的摘抄内容, 3.72# fint default,# int global和井ntxx指令 fint default、# int globa和# int xxx预处理器指令可以为编译器确定中断程序。大多数PIC 微控制器只有一个中断向量,所以当任何中断发生的时候只能调用一个单独的中断服务程序。 默认情况下,在 CCS.PICC中,这个中断服务程序是CCs-PICC编译器内部釣调度程序。这个 调度程序用于调用单个中断程序,调用规则是基于哪些中断的标志是被设置好了的,或者哪些 中断程序是用 int xxx指令定义了的。 如果PC触发一个中断,并且没有设置一个预期的中断标记,那么这个调度程序就会调 用由拜 int default指令指定的函数。这对于检测那些非预期的而且没有被处理的中断是非常有 用的。 使用 fint globa指令会使它后面的函数替代编译器中断调度程序。一般来说都个需要这个 函数,并且在使用它的时候必须非常小心。编译器的中断调度程序包括启动代码以及清除代码, 用于保存和恢复中断的寄存器组。在使用# fint globai指令的时候,应该由用户来编写处理中断 程序的启动和清除的代码。 Fint xxx指令指定它后面的函数是一个中断函数。当PC触发了…个中断时,编译器的中 数可以没有任何参数。并不是所有的指令在任何情况下都是适用的。可以参看设备的文件来 获得相关设备的全部合法中断信息。表35给出了更为通用的中断以及它们的相关指令。 表35中断预处理器指令 预处理器指令 中断描述 fint ad 模数转换完成 #int dof 模数转换超时 Fint busch 总线冲突 Hint button 有按钮按下 #int ccpl 单元1上匝的捕捉或者比较 Hint acp2 单元2上匝的推提或者比较 fint corup 检测到比较器 Fint,eeprom 写入完成 #int ext 外部中断 Hint ext1 外郜中断 #int ext2 外部中断 Hint i2 c C巾断仅仅为1400 #int lcd 活动 fint lowvolt 检测到低电平 Fint _ psp 并行从端口有数据输入 #int rb 端口B上B4B7的任何改变 Hint re 端口CC4C7的任何改变 Hint rd RS32按收到有效的数粥 #int rtcc 定时器0RTC)橙出 #int ssp SPI或者活动 fint the RS232发送缓冲为空 Hint timer0 定时器0RTC溢出 fint timer1 定时器1溢出 Fint timer 2 定时器2溢出 #int timer 3 定时器3溢 注意上表中的指令应根据具体的芯片型号来定,貝体的芯片不同,上面的资源也不同 具体芯片有什么类型的中断,需要查阅对应的头文件。 在CCS编译器中,中断没有中断向量号,这点和51是不同的,而且各个中断的级别是 样的,沿有优先级的分别,同样在编写中断应用程序时,也是需要打开总中断和各白的中 用 disable interrupts( (int level)来关掉中断(或者叫禁止中断) 2、有关中断应用程序的例子 利用外部中断来控制LED灯的点亮。对于16F883,只有一个外部中断,其触发方式有 两种,我们选用上升沿触发。代码如下: #include 16f883." //head file #fuses hs nowt /iset pic #use delay(clock==10000000) //set clock fuse fast IO(A) //set IO 井 define porta0x5 Define pOrtB ox6 井 definC pOrto0x7 #bit Led-POrtCO #INT EXT void EXT Isr(void //interrupt ISR LED=LED MLED--ON--OFF void main(void) // main function set tris c(0b00000000): //set io direction set tris b(ob11111111): port b pullups(true);/B∏做输入时,要打开内部弱上拉 EXT INT EDGE(L TO H) //set eXt mode enable interrupts(global); //enable interrupt enable interrupts(int exl) LED=0 while(1); 注意:有关弱上拉的叙述:不同的芯片IO端口有没有上拉是不同的,这个要具体查看 相应的芯片的数据手册,如果该端口带有内部弱上拉时,当要使用该端口作为输入引脚的话, 就需要打开其内部弱上拉! 第四部分:定时器 PIC系列的单片机不同的型号具有不同数目的定时器,例如我们用到的16F883有3个定 时器,其中 Timer0和 Timer2是8位的定时器, Timer是16位的定时器 1、定时器0 定时器0通常构造在8位计数器单元上,所以它也是个8位的定时器计数器,它的计数 范围是0~255。通常用来充当时间基准或者用作时钟。定时器0的控制寄存器包括 2、足时器1 定时器I是一个16位的定时器,它的用法同定时器0是完全一样的。但是,定时器1的 设计使用方式和风格是完全不叵的。定时器0是通过重载和重新设置定时器产生延迟或者“时 钟”来完成任务的,而定时器被设计成一直保持运作,并且从不重设或者重载。 定时器I可以单独使用,或者也可以同捕捉、比较、PWM模块一起使用。PWM功能在定 时器1和定时器2上的工作原理都是一样的。捕捉和比较功能将会在这里进行介绍,PWM将 连同定时器2一起讲述。 定时器1被殴计成不间断运行,目的是让脉冲捕捉和输出比较模块正确工作。脉宽(或者颎 率的测定是通过记录定时器1在脉冲初始和结束时的计数值然后将结束时间减去初始时间而 得到的。类似的,输出比较模块通过使用定时器1的运行计数来决定在什么时候插入一个输出 信号以提供出。 3、定时器2 通过配置定时器2可以为几个函数提供时间基准。在这种情形下它的工作方式是与定时器 0的工作方式类似的。定时器2的时间基准输出功能可以用在以下几个方面:为脉宽调制功能 提供时间基准,为串行端口提供波特率,或者用作程序操作的时钟。定时器2的基本模块框图 见图2-28。 预分频 重置 14,16 Timer2 时钟 Comparator 后分频 相等 115上一中断 阉期 寄存器,PR2 图228定时器2模块草图 从图2-28可以看出定时器2采用的时钟是指令时钟(系统时钟的14},这个时钟还可以按 照1倍、4倍或者16倍来进一步地预分频。每次当定时器2的计数值等于PR2的值的时候, 定时器2就自动重置、使用重置或者匹配信号来给申行模块提供波特率时钟。请注意定时器2 在累加到匹配点的时候是重置为0的,而不是像定时器0采用的是计数翻转那样的方法。 每一个匹配都会产生一个中断。这个中断可以进行后分频操作,事实上可以在每1次、2 次、3次、4次、5次,依此类推直到16次重置才产生一个中断。对于创建比一个普通8位定 时器可能产生的长得多的延迟来说,这是常有用的 【实例截图】
【核心代码】

标签:

实例下载地址

PIC CCS C编译器使用手册

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警