piccc语言基础和特点

上传人:桔**** 文档编号:568650262 上传时间:2024-07-25 格式:PPT 页数:114 大小:758.50KB
返回 下载 相关 举报
piccc语言基础和特点_第1页
第1页 / 共114页
piccc语言基础和特点_第2页
第2页 / 共114页
piccc语言基础和特点_第3页
第3页 / 共114页
piccc语言基础和特点_第4页
第4页 / 共114页
piccc语言基础和特点_第5页
第5页 / 共114页
点击查看更多>>
资源描述

《piccc语言基础和特点》由会员分享,可在线阅读,更多相关《piccc语言基础和特点(114页珍藏版)》请在金锄头文库上搜索。

1、2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程第二章PICC C语言基础和特点2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程基基于于 PICC 编编译译环环境境编编写写 PIC 单单片片机机C程程序序的的基基本本方方式式和和标标准准 C 程程序序类类似似,程程序一般由以下几个主要部分组成:序一般由以下几个主要部分组成:在在程程序序的的最最前前面面用用#include 预预处处理理指指令令引引用用包包含含头头文文件件,其其中中必必须须包包含含一一个个编编译译器器提提供供的的“pic.h”文文件件,实实现现单单片片机内特殊

2、寄存器和其它特殊符号的声明;机内特殊寄存器和其它特殊符号的声明;2.1 PIC2.1 PIC单片机的单片机的C C语言源程序基本框架语言源程序基本框架 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程用用“_ _CONFIG”预预处处理理指指令令定定义义芯芯片的配置位;片的配置位;声声明明本本模模块块内内被被调调用用的的所所有有函函数数的的类类型型,PICC 将将对对所所调调用用的的函函数数进进行行严严格格的类型匹配检查;的类型匹配检查; 定义全局变量或符号替换;定义全局变量或符号替换; 实实现现函函数数(子子程程序序),特特别别注注意意 main 函数必须

3、是一个没有返回的死循环。函数必须是一个没有返回的死循环。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程下面的例子为一个下面的例子为一个C源程序的范例:源程序的范例:#include/包含单片机内部资源预定义包含单片机内部资源预定义#include “pc68.h” /包含自定义头文件包含自定义头文件_ _CONFIG (HS & PROTECT & PWRTEN & BOREN & WDTDIS); /定义芯片工作时的配置位定义芯片工作时的配置位 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程void SetSFR(v

4、oid); void Clock(void); void KeyScan(void); void Measure(void); void LCD_Test(void); void LCD_Disp(unsigned char);/声明本模块中所调用的函数类型声明本模块中所调用的函数类型 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程unsigned char second, minute, hour; bit flag1,flag2; /定义变量定义变量 void main(void) /函数和子程序函数和子程序SetSFR( ); PORTC = 0x0

5、0; TMR1H += TMR1H_CONST; LED1 = LED_OFF; LCD_Test( );2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程while(1) asm(“clrwdt”); /清看门狗清看门狗 Clock(); /更新时钟更新时钟 KeyScan(); /扫描键盘扫描键盘 Measure(); /数据测量数据测量 SetSFR(); /刷新特殊功能寄存器刷新特殊功能寄存器 / /程序工作主循环程序工作主循环2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程注意:注意:PICC不不支支持持C+,这这

6、对对于于习习惯惯了了C+的同学还得翻翻的同学还得翻翻C 语言的书。语言的书。我我 们们 在在 源源 程程 序序 一一 开开 始始 使使 用用 了了“#include”实实现现了了相相关关单单片片机机的的一一些些预预定定义义符符号号的的直直接接引引用用,但但没没有有具具体体指指明是哪一个型号。明是哪一个型号。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程实实际际上上,“pic.h”头头文文件件是是很很多多头头文文件件的的集集合合,是是一一个个简简单单的的管管理理工工具具(条条件件判判别别),它它会会按按照照MPLAB-IDE所所选选择择的的特特定定型型号号的

7、的单单片片机机,把把真真正正对对应应的的头头文文件包含进来。件包含进来。也也就就是是说说:C 编编译译器器在在pic.h 中中根根据据你你的的芯芯片片自自动动载载入入相相应应的的其其它它头头文文件件,这这点点比汇编好用。比汇编好用。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程调用真正头文件调用真正头文件调用真正头文件调用真正头文件头文件头文件用记事本打开用记事本打开2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程载载入入的的头头文文件件中中其其实实是是声声明明芯芯片片的的寄寄存存器和一些函数,摘抄一个片段:例如:器和一

8、些函数,摘抄一个片段:例如:static volatile unsigned char TMR0 0x01;static volatile unsigned char PCL 0x02;static volatile unsigned char STATUS 0x03; 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程可可以以看看出出和和汇汇编编的的头头文文件件中中定定义义寄寄存存器器是差不多的。如下:是差不多的。如下:TMR0 EQU 0X01;PCL EQU 0X02;STATUS EQU 0X03;都都是是把把无无聊聊的的地地址址定定义义为为大大家家公

9、公认认的的名名字。字。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程2.2.1 PICC 2.2.1 PICC 中的基本变量类型中的基本变量类型 PICC编编辑辑器器支支持持基基本本的的1,2及及4B数数据据。所所有有多多字字节节数数据据遵遵循循Little-endian标标准准,多多字字节节变变量量的的低低字字节节放放在在存存储储空间的低地址,高字节放在高地址空间的低地址,高字节放在高地址下下表表中中列列出出了了PICC支支持持的的数数据据类类型型及及对应的大小和数学表达:对应的大小和数学表达:2.2 PICC2.2 PICC中的变量定义中的变量定义20

10、24/7/25DownUpMainReturn单片机单片机C C语言编程语言编程Little-endianLittle-endian和和Big-endianBig-endian是是表表示示计计算算机字节顺序的两种格式。机字节顺序的两种格式。简简单单的的说说,Little-endianLittle-endian把把低低字字节节存存放放在在内内存存的的低低位位;而而Big-endianBig-endian将将低低字字节节存放在内存的高位。存放在内存的高位。现现在在主主流流的的CPUCPU,IntelIntel系系列列的的是是采采用用的的Little-endianLittle-endian的的 格格

11、 式式 存存 放放 数数 据据 , 而而MotorolaMotorola系系列列的的CPUCPU采采用用的的是是Big-endianBig-endian。 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程表21 PICC 的基本变量类型2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程2.2.2 PICC 2.2.2 PICC 中的高级变量中的高级变量 基基于于表表2-1的的基基本本变变量量,除除了了bit型型位位变变量量外外,PICC 完完全全支支持持数数组组、结结构构和和联联合合等等复复合合型型高高级级变变量量,这这和和

12、标标准准的的C语语言言所所支支持的高级变量类型没有什么区别。持的高级变量类型没有什么区别。例如:联合:例如:联合:union int_Byte unsigned char c2; unsigned int i; ;2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程数组:数组:unsigned int data10;结构:结构:struct commInData unsigned char inBuff8; unsigned char getPtr, putPtr; ; 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程为为了了

13、使使编编译译器器产产生生最最高高效效的的机机器器码码,PICC把把单单片片机机中中数数据据寄寄存存器器的的bank问问题题交交由由编编程程员员自自己己管管理理,因因此此在在定定义义用用户户变变量量时时你你必必须须自自己己决决定定这这些些变变量量具具体体放在哪一个放在哪一个bank中。中。2.2.3 PICC2.2.3 PICC对数据寄存器对数据寄存器bankbank的管理的管理 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程如如果果没没有有特特别别指指明明,所所定定义义的的变变量量将将被被定定位位在在bank0,例例如如下下面面所所定定义义的的这这些变量:

14、些变量:unsigned char buffer32;bit flag1,flag2; float val8; 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程除除了了bank0内内的的变变量量声声明明时时不不需需特特殊殊处处理理外外,定定义义在在其其它它bank内内的的变变量量前前面面必必须加上相应的须加上相应的bank序号,例如:序号,例如:bank1 unsigned char buffer32; /变量定位在变量定位在bank1中中bank2 bit flag1,flag2;/变量定位在变量定位在bank2中中bank3 bit float val8

15、;/变量定位在变量定位在bank3中中 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程注意事项:注意事项:中中档档系系列列PIC单单片片机机数数据据寄寄存存器器的的一一个个bank大大小小为为128字字节节,刨刨去去前前面面若若干干字字节节的的特特殊殊功功能能寄寄存存器器区区域域,在在C语语言言中中某某一一bank内内定定义义的的变变量量字字节节总总数数不不能能超超过过可可用用RAM字节数。字节数。如如果果超超过过bank容容量量,在在最最后后链链接接时时会会报报错,大致信息如下:错,大致信息如下:2024/7/25DownUpMainReturn单片机单

16、片机C C语言编程语言编程2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程Error000 : Cant find 0x12C words for psect rbss_1 in segment BANK1 链链接接器器告告诉诉你你总总共共有有0x12C(300)个个字字节节准准备备放放到到bank1中中但但bank1容容量量不不够够。显显然然,只只有有把把一一部部分分原原本本定定位位在在bank1中中的的变变量量改改放放到到其其它它bank中中才才能能解解决决此此问问题。题。 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言

17、编程虽虽然然变变量量所所在在的的bank定定位位必必须须由由编编程程员员自自己己决决定定,但但在在编编写写源源程程序序时时进进行行变变量量存存取取操操作作前前无无需需再再特特意意编编写写设设定定bank的的指指令令,C编编译译器器会会根根据据所所操操作作的的对对象象自动生成对应自动生成对应bank设定的汇编指令;设定的汇编指令;为为避避免免频频繁繁的的bank切切换换以以提提高高代代码码效效率率,尽尽量量把把实实现现同同一一任任务务的的变变量量定定位位在在同一个同一个bank内;内;2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程数据寄存器怎么附值?数据寄存

18、器怎么附值?如对如对 TMR0 附值,汇编中:附值,汇编中:MOVLW 200;MOVWF TMR0;当当然然得得保保证证当当前前bank在在0或或2,不不然然会会出出错(如在错(如在bank1或或3)。)。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程C语言中:语言中:TMR0=200;无无论论在在任任何何bank都都不不会会出出错错,可可以以看看出出来来C是是很很直直接接了了当当的的。并并且且最最大大好好处处是是操操作作一一个个寄寄存存器器时时候候,不不用用考考虑虑bank的的问问题,一切由题,一切由C编译器自动完成。编译器自动完成。2024/7/25

19、DownUpMainReturn单片机单片机C C语言编程语言编程2.2.4 PICC 2.2.4 PICC 中的局部变量中的局部变量PICC把把所所有有函函数数内内部部定定义义的的auto型型局局部部变变量量放放在在bank0。为为节节约约宝宝贵贵的的存存储储空空间间,它它采采用用了了一一种种被被叫叫做做“静静态态覆覆盖盖”的技术来实现局部变量的地址分配。的技术来实现局部变量的地址分配。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程其其大大致致的的原原理理是是:在在编编译译器器编编译译源源代代码码时时扫扫描描整整个个程程序序中中函函数数调调用用的的嵌嵌套

20、套关关系系和和层层次次,算算出出每每个个函函数数中中的的局局部部变量字节数;变量字节数;然然后后为为每每个个局局部部变变量量分分配配一一个个固固定定的的地地址址,且且按按调调用用嵌嵌套套的的层层次次关关系系各各变变量的地址可以相互重叠。量的地址可以相互重叠。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程利利用用这这一一技技术术后后所所有有的的动动态态局局部部变变量量都都可可以以按按已已知知的的固固定定地地址址进进行行直直接接寻寻址址,但但这这时时不不能能出出现现函函数数递递归归调调用用。PICC在在编编译译时时会会严严格格检检查查递递归归调调用用问问题题并

21、并认认为为这是一个严重错误而立即终止编译过程。这是一个严重错误而立即终止编译过程。所所有有的的局局部部变变量量将将占占用用bank0的的存存储储空空间间,因因此此用用户户自自己己定定位位在在bank0内内的的变变量量字字节节数数将将受受到到一一定定的的限限制制,在在实实际际使使用用时需注意。时需注意。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程 2.2.5 PICC2.2.5 PICC中的位变量中的位变量 bit型位变量只能是全局的或静态的。型位变量只能是全局的或静态的。PICC将将把把定定位位在在同同一一bank内内的的8个个位位变变量合并成一个字节存

22、放于一个固定地址。量合并成一个字节存放于一个固定地址。PIC单单片片机机的的位位操操作作指指令令是是非非常常高高效效的的。因因此此,PICC在在编编译译源源代代码码时时只只要要有有可可能能,对对普普通通变变量量的的操操作作也也将将以以最最简简单单的的位位操操作作指令来实现。指令来实现。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程假假设设一一个个字字节节变变量量tmp最最后后被被定定位位在在地址地址 0x20,那么:,那么:tmp =0x80 =bsf 0x20,7tmp &=0xf7 =bcf 0x20,3if(tmp&0x01) =btfsc 0x20

23、,02024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程通通过过以以上上内内容容可可以以看看出出,所所有有只只对对变变量量中中某某一一位位操操作作的的C语语句句代代码码将将被被直直接接编译成汇编的位操作指令。编译成汇编的位操作指令。虽虽然然编编程程时时可可以以不不用用太太关关心心,但但如如果果能能了了解解编编译译器器是是如如何何工工作作的的,那那将将有有助助于于引引导导我我们们写写出出高高效效简简洁洁的的C语语言言源源程序。程序。 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程另另外外,在在有有些些应应用用中中需需要要将将一

24、一组组位位变变量量放放在在同同一一个个字字节节中中以以便便需需要要时时一一次次性性地地进进行行读读写写,这这一一功功能能可可以以通通过过定定义义一一个个位位域域结结构构和和一一个个字字节节变变量量的的联联合来实现,例如:合来实现,例如:2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程union struct unsigned b0: 1; unsigned b1: 1; unsigned b2: 1; unsigned b3: 1; unsigned b4: 1; unsigned b5: 1; unsigned : 2; /最高两位保留最高两位保留 one

25、Bit; unsigned char allBits; myFlag; 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程需要存取其中某一位时可以:需要存取其中某一位时可以:myFlag.oneBit.b3=1; /b3 位置位置 1一次性将全部位清零时可以一次性将全部位清零时可以 :myFlag.allBits=0; /全部位变量清全部位变量清 0 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程如何进行位操作?如何进行位操作?汇汇编编中中的的位位操操作作是是很很容容易易的的。在在PICC中中更更简简单单。C的的头头文文件

26、件中中已已经经对对所所有有可可能能需需要要位位操操作作的的寄寄存存器器的的每每一一位位都都有有定定义义名称:名称:如如:PORTA的的每每一一个个I/O口口定定义义为为:RA0、 RA1、 RA2、 RA3、 RA4、RA5 、RA6 、RA7 。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程可以对其直接进行运算和附值。如:可以对其直接进行运算和附值。如:RA0=0;RA2=1;在汇编中是:在汇编中是:BCF PORTA,0;BSF PORTA,2;可可以以看看出出两两者者是是大大同同小小异异的的,只只是是C中中不需要考虑不需要考虑bank的问题。的问题。

27、2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程PICC中中描描述述浮浮点点数数是是以以IEEE-754标标准准格格式式实实现现的的。此此标标准准下下定定义义的的浮浮点点数数为为 32位长,在单片机中要用位长,在单片机中要用4个字节存储。个字节存储。为为了了节节约约单单片片机机的的数数据据空空间间和和程程序序空空间间,PICC专专门门提提供供了了一一种种长长度度为为24位位的的截截短短型型浮浮点点数数,它它损损失失了了浮浮点点数数的的一一点精度,但浮点运算的效率得以提高。点精度,但浮点运算的效率得以提高。2.2.6 PICC2.2.6 PICC中的浮点数中的

28、浮点数2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程在在程程序序中中定定义义的的float型型标标准准浮浮点点数数的的长长度度固固定定为为24位位,双双精精度度double型型浮浮点点数数一一般般也也是是24位位长长,但但可可以以在在程程序序编编译译选选项项中中选选择择double型型浮浮点点数数为为32位位,以以提高计算的精度。提高计算的精度。一一般般控控制制系系统统中中关关心心的的是是单单片片机机的的运运行行效效率率,因因此此在在精精度度能能够够满满足足的的前前提提下下尽量选择尽量选择24 位的浮点数运算。位的浮点数运算。 2024/7/25DownU

29、pMainReturn单片机单片机C C语言编程语言编程首首先先必必须须强强调调,在在用用C语语言言写写程程序序时时变变量量一一般般由由编编译译器器和和链链接接器器最最后后定定位位,在在写写程程序序之之时时无无需需知知道道所所定定义义的的变变量量具具体体被放在哪个地址;被放在哪个地址;除除了了bank必必须须声声明明,真真正正需需要要绝绝对对定定位位的只是单片机中那些特殊功能寄存器;的只是单片机中那些特殊功能寄存器;2.2.7 PICC 2.2.7 PICC 中变量的绝对定位中变量的绝对定位 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程而而这这些些寄寄存

30、存器器的的地地址址定定位位在在PICC编编译译环环境境所所提提供供的的头头文文件件中中已已经经实实现现,无无需需用用户操心。户操心。编编程程员员所所要要了了解解的的只只是是PICC是是如如何何定定义义这这些些特特殊殊功功能能寄寄存存器器和和其其中中的的相相关关控控制制位的名称。位的名称。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程好好在在PICC的的定定义义标标准准基基本本上上按按照照芯芯片片的的数数据据手手册册中中的的名名称称描描述述进进行行,这这样样就秉承了变量命名的一贯性。就秉承了变量命名的一贯性。一个变量绝对定位的例子如下:一个变量绝对定位的例子

31、如下:unsigned char tmpData 0x20; /tmpData定位在地址定位在地址0x20 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程千万注意:千万注意:PICC对对绝绝对对定定位位的的变变量量不不保保留留地地址址空空间。间。换换句句话话说说,上上面面变变量量tmpData的的地地址址是是0x20,但但最最后后0x20处处完完全全有有可可能能又又被被分分配配给给了了其其它它变变量量使使用用,这这样样就就发发生生了了地地址址冲冲突突。因因此此针针对对变变量量的的绝绝对对定定位位要要特特别小心。别小心。2024/7/25DownUpMain

32、Return单片机单片机C C语言编程语言编程由由此此可可见见,在在一一般般的的程程序序设设计计中中用用户户自自定定义义的的变变量量实实在在是是没没有有绝绝对对定定位位的的必要。必要。 如如果果需需要要,位位变变量量也也可可以以绝绝对对定定位位。但但必必须须遵遵循循上上面面介介绍绍的的位位变变量量编编址址的的方式。方式。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程如果一个普通变量已经被绝对定位,那如果一个普通变量已经被绝对定位,那么此变量中的每个数据位就可以用下面么此变量中的每个数据位就可以用下面的计算方式实现位变量指派:的计算方式实现位变量指派:uns

33、igned char tmpData 0x20; /tmpData定位在地址定位在地址0x20 tmpData必须先被绝对定位,然后才能必须先被绝对定位,然后才能用下面的位变量定位方式:用下面的位变量定位方式: 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程bit tmpBit0 tmpData*8+0;/tmpBit0对应于对应于tmpData第第0位位bit tmpBit1 tmpData*8+1; /tmpBit1对应于对应于tmpData第第1位位bit tmpBit2 tmpData*8+2; /tmpBit2对应于对应于tmpData第第2位位

34、2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程extern 外部变量声明外部变量声明如如果果在在一一个个C程程序序文文件件中中要要使使用用一一些些变变量量但但其其原原型型定定义义写写在在另另外外的的文文件件中中,那那么么在在本本文文件件中中必必须须将将这这些些变变量量声声明明成成“extern”外部类型。外部类型。2.2.8 PICC 2.2.8 PICC 的其它变量修饰关键词的其它变量修饰关键词2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程例如程序文件例如程序文件 code1.c 中有如下定义:中有如下定义:bank

35、1 unsigned char var1, var2; /定义了定义了 bank1 中的两个变量中的两个变量在在另另外外一一个个程程序序文文件件code2.c中中要要对对上上面面定定义义的的变变量量进进行行操操作作,则则必必须须在在程程序序的的开头定义:开头定义:extern bank1 unsigned char var1, var2; /声明位于声明位于 bank1 的外部变量的外部变量2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程volatile 易变型变量声明易变型变量声明PICC中中还还有有一一个个变变量量修修饰饰词词在在普普通通的的 C语语言言

36、介介绍绍中中一一般般是是看看不不到到的的,这这就就是是关键词关键词“volatile”。顾顾名名思思义义,它它说说明明了了一一个个变变量量的的值值是是会会随随机机变变化化的的,即即使使程程序序没没有有刻刻意意对对它进行任何赋值操作。它进行任何赋值操作。 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程在在单单片片机机中中,作作为为输输入入的的I/O端端口口其其内内容将是随意变化的;容将是随意变化的;在在中中断断内内被被修修改改的的变变量量相相对对主主程程序序流流程程来讲也是随意变化的;来讲也是随意变化的;很很多多特特殊殊功功能能寄寄存存器器的的值值也也将将随

37、随着着指指令令的运行而动态改变。的运行而动态改变。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程所所有有这这种种类类型型的的变变量量必必须须将将它它们们明明确确定义成定义成“volatile”类型。类型。例如:例如:volatile unsigned char STATUS 0x03;volatile bit commFlag; 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程千万注意:千万注意:“volatile”类类型型定定义义在在单单片片机机的的C语语言言编编程程中中是是如如此此的的重重要要,是是因因为为它它可可以

38、以告告诉诉编编译译器器的的优优化化处处理理器器这这些些变变量量是是实实实实在在在存在的,在优化过程中不能无故消除。在存在的,在优化过程中不能无故消除。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程假假定定你你的的程程序序定定义义了了一一个个变变量量并并对对其其作作了了一一次次赋赋值值,但但随随后后就就再再也也没没有有对对其其进进行行任任何何读读写写操操作作,如如果果是是非非volatile型型变变量量,优优化化后后的的结结果果是是这这个个变变量量将将有有可可能能被被彻彻底底删删除除以以节节约约存存储储空间。空间。2024/7/25DownUpMainRet

39、urn单片机单片机C C语言编程语言编程另另外外一一种种情情形形是是在在使使用用某某一一个个变变量量进进行行连连续续的的运运算算操操作作时时,这这个个变变量量的的值值将将在在第一次操作时被复制到中间临时变量中,第一次操作时被复制到中间临时变量中,如如果果它它是是非非volatile型型变变量量,则则紧紧接接其其后后的的其其它它操操作作将将有有可可能能直直接接从从临临时时变变量量中中取数以提高运行效率。取数以提高运行效率。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程显显然然这这样样做做后后对对于于那那些些随随机机变变化化的的参参数就会出问题。数就会出问题。

40、只只要要将将其其定定义义成成volatile类类型型后后,编编译译后后的的代代码码就就可可以以保保证证每每次次操操作作时时直直接接从变量地址处取数。从变量地址处取数。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程const 常数型变量声明常数型变量声明如如果果变变量量定定义义前前冠冠以以“const”类类型型修修饰饰,那那么么所所有有这这些些变变量量就就成成为为常常数数,程序运行过程中不能对其修改。程序运行过程中不能对其修改。除除了了位位变变量量,其其它它所所有有基基本本类类型型的的变变量量或或高高级级组组合合变变量量都都将将被被存存放放在在程程序序空间(

41、空间(ROM区)以节约数据存储空间。区)以节约数据存储空间。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程显显然然,被被定定义义在在 ROM区区的的变变量量是是不不能能再再在在程程序序中中对对其其进进行行赋赋值值修修改改的的,这也是这也是“const”的本来意义。的本来意义。实实际际上上这这些些数数据据最最终终都都将将以以“retlw”的的指指令令形形式式存存放放在在程程序序空空间间,但但PICC会会自自动动编编译译生生成成相相关关的的附附加加代代码码从从程程序序空空间间读读取取这这些些常常数数,编编程程员员无无需需太太多操心。多操心。2024/7/25D

42、ownUpMainReturn单片机单片机C C语言编程语言编程例如:例如:const unsigned char name =“This is a demo”; /定义一个常量字符串定义一个常量字符串 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程persistent 非初始化变量声明非初始化变量声明 按按照照标标准准C语语言言的的做做法法,程程序序在在开开始始运运行行前前首首先先要要把把所所有有定定义义的的但但没没有有预预置初值的变量全部清零。置初值的变量全部清零。PICC会会在在最最后后生生成成的的机机器器码码中中加加入入一一小小段段初初始始化化代代

43、码码来来实实现现这这一一变变量量清清零零操操作作,且且这这一一操操作作将将在在main函函数数被被调调用之前执行。用之前执行。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程事事实实上上一一个个单单片片机机的的控控制制系系统统有有很很多多变变量量是是不不允允许许在在程程序序复复位位后后被被清清零零的的。为为了了达达到到这这一一目目的的,PICC提提供供了了“persistent”修修饰饰词词以以声声明明此此类类变变量无需在复位时自动清零;量无需在复位时自动清零;编编程程员员应应该该自自己己决决定定程程序序中中的的哪哪些些变变量量是是必必须须声声明明成成“pe

44、rsistent”类类型型,而而且且须须自自己己判判断断什什么么时时候候需需要要对对其其进进行初始化赋值。行初始化赋值。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程例如:例如:persistent unsigned char hour,minute,second; /定义时分秒变量定义时分秒变量2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程PICC中中指指针针的的基基本本概概念念和和标标准准C语语法法没没有有太太多多的的差差别别。但但是是在在PIC单单片片机机这这一一特特定定的的架架构构上上,指指针针的的定定义义方方

45、式式还还是有几点需要特别注意:是有几点需要特别注意:2.2.9 PICC 2.2.9 PICC 中的指针中的指针2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程指向指向 RAM 的指针的指针 指向指向 ROM 常数的指针常数的指针 指向函数的指针指向函数的指针指针的类型修饰指针的类型修饰2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程指向指向 RAM 的指针的指针 如如果果是是汇汇编编语语言言编编程程,实实现现指指针针寻寻址址的的方方法法肯肯定定就就是是用用FSR寄寄存存器器,PICC 也不例外。也不例外。为为了了生生成成

46、高高效效的的代代码码,PICC在在编编译译C源源程程序序时时将将指指向向RAM的的指指针针操操作作最最终终用用FSR来实现间接寻址。来实现间接寻址。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程这这样样就就势势必必产产生生一一个个问问题题:FSR能能够够直直 接接 连连 续续 寻寻 址址 的的 范范 围围 是是 256字字 节节(bank0/1或或bank2/3),要要覆覆盖盖最最大大 512字字节节的的内内部部数数据据存存储储空空间间,又又该该如如何定义指针?何定义指针?PICC还还是是将将这这一一问问题题留留给给编编程程员员自自己己解解决决:在在定定义

47、义指指针针时时必必须须明明确确指指定定该该指针所适用的寻址区域。指针所适用的寻址区域。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程例如:例如:unsigned char *ptr0; /定义覆盖定义覆盖 bank0/1的指针的指针bank2 unsigned char *ptr1; /定义覆盖定义覆盖 bank2/3的指针的指针bank3 unsigned char *ptr2; /定义覆盖定义覆盖 bank2/3的指针的指针 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程上上面面定定义义了了三三个个指指针针变变量量

48、,其其中中指指针针没没有有任任何何bank限限定定,缺缺省省就就是是指指向向 bank0和和bank1;和和一一个个指指明明了了bank2,另另一一个个指指明明了了bank3,但但实实际际上上两两者者是是一一样样的的,因因为为一一个个指指针针可可以以同同时时覆覆盖盖两两个个bank的的存储区域。存储区域。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程既既然然定定义义的的指指针针有有明明确确的的bank适适用用区区域域,在在对对指指针针变变量量赋赋值值时时就就必必须须实实现现类类型型匹匹配,下面的指针赋值将产生致命错误:配,下面的指针赋值将产生致命错误:un

49、signed char *ptr0; /定义指向定义指向bank0/1的指针的指针bank2 unsigned char buff8; /定义定义bank2的一个缓冲区的一个缓冲区2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程程序语句:程序语句:ptr0 = buff;/错误!试图将错误!试图将bank2内的变量内的变量地址赋给指向地址赋给指向bank0/1的指针的指针 若出现上述错误的指针操作,若出现上述错误的指针操作,PICC 在在最后链接时会告知类似于下面的信息:最后链接时会告知类似于下面的信息: Fixup overflow in expressi

50、on (.)2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程提示:提示:根根据据以以往往的的编编程程经经验验,如如果果你你看看到到了了“Fixup overflow”的的错错误误指指示示,几几乎乎可可以以肯肯定定是是指指针针类类型型不不匹匹配配的的赋赋值值所所至至。请请重重点点检检查查程程序序中中有有关关指指针针的的操操作。作。 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程指向指向 ROM 常数的指针常数的指针 如如果果一一组组变变量量是是已已经经被被定定义义在在ROM区区的的常数,那么指向它的指针可以这样定义:常数,

51、那么指向它的指针可以这样定义:2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程const unsigned char company =“Microchip”; /定义定义ROM中的常数中的常数 const unsigned char *romPtr; /定义指向定义指向ROM的指针的指针2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程程程序序中中可可以以对对上上面面的的指指针针变变量量赋赋值值和和实现取数操作:实现取数操作:romPtr company; /指针赋初值指针赋初值 data = *romPtr+; /取指针

52、指向的一个数,取指针指向的一个数, 然后指针加然后指针加 1 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程反反过过来来,下下面面的的操操作作将将是是一一个个错错误误,因因为为该该指指针针指指向向的的是是常常数数型型变变量量,不不能赋值。能赋值。*romPtr data; /往指针指向的地址写一个数往指针指向的地址写一个数 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程指向函数的指针指向函数的指针单单片片机机编编程程时时函函数数指指针针的的应应用用相相对对较较少少,但但作作为为标标准准C语语法法的的一一部部分分,PIC

53、C同同样样支持函数指针调用。支持函数指针调用。如如果果你你对对编编译译原原理理有有一一定定的的了了解解,就就应应该该明明白白在在PIC单单片片机机这这一一特特定定的的架架构构上上实现函数指针调用的效率是不高的:实现函数指针调用的效率是不高的:2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程PICC将将在在RAM中中建建立立一一个个调调用用返返回回表表,真真正正的的调调用用和和返返回回过过程程是是靠靠直直接接修改修改 PC 指针来实现的。指针来实现的。因因此此,除除非非特特殊殊算算法法的的需需要要,建建议议大大家尽量不要使用函数指针。家尽量不要使用函数指针。2

54、024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程指针的类型修饰指针的类型修饰 前前面面介介绍绍的的指指针针定定义义都都是是最最基基本本的的形形式式。和和普普通通变变量量一一样样,指指针针定定义义也也可可以以在在前前面面加加上上特特殊殊类类型型的的修修饰饰关关键键词词,例例 如如 “persistent”、 “volatile”等。等。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程 bank bank 修饰词的位置含义修饰词的位置含义 前前面面介介绍绍的的一一些些指指针针有有的的作作用用于于 bank0/1,有有的的作作用用

55、于于bank2/3,但但它它们本身的存放位置全部在们本身的存放位置全部在 bank0。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程显显然然,在在一一个个程程序序设设计计中中指指针针变变量量将将有有可可能能被被定定位位在在任任何何可可用用的的地地址址空空间间,这这时时,bank修修饰饰词词出出现现的的位位置置就就是是一一个个关关键,看下面的例子:键,看下面的例子: unsigned char *ptr0; /定义指向定义指向bank0/1的指针,的指针, 指针变量位于指针变量位于bank0中中2024/7/25DownUpMainReturn单片机单片机C

56、 C语言编程语言编程bank2 unsigned char *ptr0; /定义指向定义指向bank2/3的指针,的指针, 指针变量位于指针变量位于 bank0 中中bank2 unsigned char * bank1 ptr0; /定义指向定义指向bank2/3的指针,的指针, 指针变量位于指针变量位于bank1中中 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程从中可以看出规律:从中可以看出规律:前面的前面的bank修饰词指明了此指针的作修饰词指明了此指针的作用域;后面的用域;后面的bank修饰词定义了此指修饰词定义了此指针变量自身的存放位置。针变量

57、自身的存放位置。只要掌握了这一法则,你就可以定义只要掌握了这一法则,你就可以定义任何作用域的指针且可以将指针变量任何作用域的指针且可以将指针变量放于任何放于任何bank中。中。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程 volatile volatile、persistentpersistent和和constconst修修饰词的位置含义饰词的位置含义 如如果果能能理理解解上上面面介介绍绍的的bank修修饰饰词词的的位位置置含含义义,实实际际上上volatile、persistent 和和const这这些些关关键键词词出出现现在在前前后后不不同同位位置置

58、上上的的含含义义规规律律是是和和bank一一词词相相一一致致的。例如:的。例如:2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程volatile unsigned char *ptr0; /定定义义指指向向bank0/1易易变变型型字字符符变变量量的的指指针针,指指针针变变量量位位于于bank0中中且且自自身身为非易变型为非易变型 。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程bank2 unsigned char * volatile bank1 ptr0; /定定义义指指向向bank2/3非非易易变变型型字字符符变

59、变量量的的指指针针,指指针针变变量量位位于于bank1中中且自身为易变型且自身为易变型 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程const unsigned char * const ptr0; /定定义义指指向向ROM区区的的指指针针,指指针变量本身也是存放于针变量本身也是存放于ROM区的常数。区的常数。 通通过过以以上上三三个个例例子子可可以以知知道道:出出现现在在前前面面的的修修饰饰词词其其作作用用对对象象是是指指针针所所指指向向的的变变量量;出出现现在在后后面面的的修修饰饰词词其其作作用对象就是指针变量自己。用对象就是指针变量自己。 2024

60、/7/25DownUpMainReturn单片机单片机C C语言编程语言编程中中档档系系列列PIC单单片片机机的的程程序序空空间间有有分分页页的的概概念念,但但用用C语语言言编编程程时时基基本本不不用用太太关关心代码的分页问题。心代码的分页问题。因因为为所所有有函函数数或或子子程程序序调调用用时时的的页页面面设设定定(如如果果代代码码超超过过一一个个页页面面)都都由由编编译译器自动生成的指令实现。器自动生成的指令实现。2.3 PICC2.3 PICC中的子程序和函数中的子程序和函数 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程PICC决决定定了了C源源程

61、程序序中中的的一一个个函函数数经经编编译译后后生生成成的的机机器器码码一一定定会会放放在在同同一一个个程序页面内。程序页面内。中中档档系系列列的的PIC单单片片机机其其一一个个程程序序页页面面的的长长度度是是2K字字,换换句句话话说说,用用C语语言言编编写写的的任任何何一一个个函函数数最最后后生生成成的的代代码码不不能能超过超过2K字。字。2.3.1 2.3.1 函数的代码长度限制函数的代码长度限制 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程一一个个良良好好的的程程序序设设计计应应该该有有一一个个清清晰晰的的组组织织结结构构,把把不不同同的的功功能能用

62、用不不同同的的函函数实现是最好的方法;数实现是最好的方法;因因此此一一个个函函数数2K字字长长的的限限制制一一般般不不会会对程序代码的编写产生太多影响。对程序代码的编写产生太多影响。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程如如果果为为实实现现特特定定的的功功能能确确实实要要连连续续编编写写很很长长的的程程序序,这这时时就就必必须须把把这这些些连连续续的的代代码码拆拆分分成成若若干干函函数数,以以保保证证每每个个函函数数最最后后编编译译出出的的代代码码不不超超过过一一个个页面空间(页面空间(2K)。)。2024/7/25DownUpMainReturn

63、单片机单片机C C语言编程语言编程PICC在在编编译译时时将将严严格格进进行行函函数数调调用用时时的的类类型型检检查查。一一个个良良好好的的习习惯惯是是在在编编写写程程序序代代码码前前先先声声明明所所有有用用到到的的函函数数类类型型。例如:例如:void Task(void); unsigned char Temperature(void); 2.3.2 2.3.2 函数类型声明函数类型声明2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程void BIN2BCD(unsigned char);void TimeDisplay(unsigned char, u

64、nsigned char); 这这些些类类型型声声明明确确定定了了函函数数的的入入口口参参数数和和返返回回值值类类型型,这这样样编编译译器器在在编编译译代代码时就能保证生成正确的机器码。码时就能保证生成正确的机器码。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程提示:提示: 在在实实际际编编程程中中有有时时碰碰到到一一些些用用户户声声称称发发现现C编编译译器器生生成成了了错错误误的的代代码码,最最后后究究其其原原因因就就是是因因为为没没有有事事先先声声明明函函数数类型所致。类型所致。2024/7/25DownUpMainReturn单片机单片机C C语言编

65、程语言编程建建议议大大家家在在编编写写一一个个函函数数的的源源代代码码时时,立立即即将将此此函函数数的的类类型型声声明明复复制制到到源源文文件的起始处,见本章的第一个例子;件的起始处,见本章的第一个例子;或或是是复复制制到到专专门门的的包包含含头头文文件件中中,再再在每个源程序模块中引用。在每个源程序模块中引用。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程PICC可以实现可以实现C语言的中断服务程序。语言的中断服务程序。中断服务程序有一个特殊的定义方法:中断服务程序有一个特殊的定义方法: void interrupt ISR(void); 2.3.3 2

66、.3.3 中断函数的实现中断函数的实现 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程其其中中的的函函数数名名“ISR”可可以以改改成成任任意意合合法的字母或数字组合法的字母或数字组合;其其入入口口参参数数和和返返回回参参数数类类型型必必须须是是“void”型型,亦亦即即没没有有入入口口参参数数和和返返回参数回参数;中间必须有一个关键词中间必须有一个关键词“interrupt”。 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程中中断断函函数数可可以以被被放放置置在在源源程程序序的的任任意意位位置置,因因为为已已有有关关

67、键键词词“interrupt”声明。声明。PICC在在最最后后进进行行代代码码链链接接时时会会自自动动将将其其定定位位到到0004H中中断断入入口口处处,实实现现中中断断服务响应。服务响应。编编译译器器也也会会实实现现中中断断函函数数的的返返回回指指令令“RETFIE”。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程一个简单的中断服务示范函数如下:一个简单的中断服务示范函数如下: void interrupt ISR(void) /中断服务程序中断服务程序 if (T0IE & T0IF) /判断判断TMR0中断中断 T0IF0; /清除清除TMR0中断标

68、志中断标志/在此加入在此加入TMR0 中断服务中断服务 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程if (TMR1IE & TMR1IF) /判断判断TMR1中断中断 TMR1IF=0; /清除清除 TMR1 中断标志中断标志 /在此加入在此加入TMR1中断服务中断服务 /中断结束并返回中断结束并返回 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程提示:提示: PICC会会自自动动加加入入代代码码实实现现中中断断现现场场的的保保护护,并并在在中中断断结结束束时时自自动动恢恢复复现现场场,所所以以编编程程员员无无需需

69、象象编编写写汇汇编编程程序序那那样样加加入中断现场保护和恢复的额外指令语句。入中断现场保护和恢复的额外指令语句。但但如如果果在在中中断断服服务务程程序序中中需需要要修修改改某某些些全全局局变变量量时时,是是否否需需要要保保护护这这些些变变量量的的初值将由编程员自己决定和实施。初值将由编程员自己决定和实施。 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程用用C语语言言编编写写中中断断服服务务程程序序必必须须遵遵循循高高效的原则:效的原则: 代代码码尽尽量量简简短短,中中断断服服务务强强调调的的是是一一个个“快快”字;字;中中档档系系列列PIC单单片片机机的的

70、中中断断入入口口只只有有一一个个,因因此此整整个个程程序序中中只只能能有有一一个个中中断断服服务函数。务函数。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程避避免免在在中中断断内内使使用用函函数数调调用用。虽虽然然PICC允允许许在在中中断断里里调调用用其其它它函函数数,但但为为了了解解决决递递归归调调用用的的问问题题,此此函函数数必必须为中断服务独家专用。须为中断服务独家专用。既既如如此此,不不妨妨把把原原本本要要写写在在其其它它函函数数内的代码直接写在中断服务程序中。内的代码直接写在中断服务程序中。2024/7/25DownUpMainReturn单片

71、机单片机C C语言编程语言编程避免在中断内进行数学运算。避免在中断内进行数学运算。数数学学运运算算将将很很有有可可能能用用到到库库函函数数和和许许多多中中间间变变量量,就就算算不不出出现现递递归归调调用用的的问问题题,光光在在中中断断入入口口和和出出口口处处为为了了保保护护和和恢恢复复这这些些中中间间临临时时变变量量就就需需要要大大量的开销,严重影响中断服务的效率。量的开销,严重影响中断服务的效率。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程PICC提提供供了了较较完完整整的的C标标准准库库函函数数支支持持,其其中中包包括括数数学学运运算算函函数数和和字

72、字符符串串操操作函数。作函数。在在程程序序中中使使用用这这些些现现成成的的库库函函数数时时需需要注意的是入口参数必须在要注意的是入口参数必须在bank0中。中。 2.3.4 2.3.4 标准库函数标准库函数 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程如如果果需需要要用用到到数数学学函函数数,则则应应在在程程序序前前“#include ”包含头文件;包含头文件;如如果果要要使使用用字字符符串串操操作作函函数数,就就需需要要包含包含“#include ”头文件。头文件。在在这这些些头头文文件件中中提提供供了了函函数数类类型型的的声声明明。通通过过直直接接查

73、查看看这这些些头头文文件件就就可可以以知道知道 PICC 提供了哪些标准库函数。提供了哪些标准库函数。 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程C语语 言言 中中 常常 用用 的的 格格 式式 化化 打打 印印 函函 数数“printf/sprintf”用用在在单单片片机机的的程程序中时要特别谨慎。序中时要特别谨慎。printf/sprintf是是一一个个非非常常大大的的函函数数,一一旦旦使使用用,程程序序代代码码长长度度就就会会增增加加很很多。多。2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程PICC提提供供了

74、了相相关关的的预预处处理理指指令令以以实实现现在在源源程程序序中中定定义义单单片片机机的的配配置置字字和和标标记单元。记单元。 2.4 PICC 2.4 PICC 定义特殊区域值定义特殊区域值2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程在源程序中定义在源程序中定义 PIC 单片机工作配置字单片机工作配置字的重要性在前面章节中已经阐述。在用的重要性在前面章节中已经阐述。在用 PICC写程序时同样可以在写程序时同样可以在C源程序中定源程序中定义,具体方式如下:义,具体方式如下: _ _CONFIG (HS & UNPROTECT & PWRTEN & BOR

75、DIS & WDTEN); 2.4.1 2.4.1 定义工作配置字定义工作配置字 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程上上面面的的关关键键词词“_ _CONFIG”(注注意意前前面面有有两两个个下下划划线线符符)是是专专门门用用于于芯芯片片配配置字的设定;置字的设定;后后面面括括号号中中的的各各项项配配置置位位符符号号在在特特定定型型号号单单片片机机的的头头文文件件中中已已经经定定义义(注注意意不不是是 pic.h头文件);头文件);2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程相相互互之之间间用用逻逻辑辑“

76、与与”操操作作符符组组合合在在一一起起。这这样样定定义义的的配配置置字字信信息息最最后后将将和程序代码一起放入同一个和程序代码一起放入同一个HEX文件。文件。在在这这里里列列出出了了适适用用于于16FXX系系列列单单片片机机配配置置位位符符号号预预定定义义,其其它它型型号号或或系系列列的的单单片片机机配配置置字字定定义义方方式式类类似似,使使用前查阅一下对应的头文件即可。用前查阅一下对应的头文件即可。 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程/*振荡器配置振荡器配置*/ #define RC 0x3FFF / RC 振荡振荡#define HS 0x

77、3FFE / HS 模式模式高速晶体高速晶体/陶瓷振荡器陶瓷振荡器#define XT 0x3FFD / XT 模式模式晶体晶体/陶瓷振荡器陶瓷振荡器#define LP 0x3FFC / LP 模式模式低功耗振荡器低功耗振荡器2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程/*看门狗配置看门狗配置*/ #define WDTEN 0x3FFF /看门狗打开看门狗打开#define WDTDIS 0x3FFB /看门狗关闭看门狗关闭 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程/*上电延时定时器配置上电延时定时器配置*

78、/#define PWRTEN 0x3FF7 /上电延时定时器打开上电延时定时器打开#define PWRTDIS 0x3FFF /上电延时定时器关闭上电延时定时器关闭 2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程/*低电压复位配置低电压复位配置*/ #define BOREN 0x3FFF /低电压复位允许低电压复位允许#define BORDIS 0x3FBF /低电压复位禁止低电压复位禁止2024/7/25DownUpMainReturn单片机单片机C C语言编程语言编程/*代码保护配置代码保护配置*/#define UNPROTECT 0x3FFF /没有代码保护没有代码保护#define PROTECT 0x3FEF /程序代码保护程序代码保护

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号