用PICC编译器语言开发PIC系列单片机的代码0铁铸件

2022-08-12 08:14

用PICC编译器语言开发PIC系列单片机的代码

用PICC编译器语言开发PIC系列单片机的代码 2011年12月09日 来源: 一.前言  目前在市场上应用最广泛的应该属于8位单片机,Microchip Technoloogy公司推出的8位PIC系列单片机目前在国内市场上深受用户欢迎,已经逐渐成为单片机应用的新潮流,但遗憾的是,目前国内介绍它的C语言开发工具的书籍和文章却比较少,而且用的人也不多,广大的程序员在用其开发的过程中都在慢慢摸索,可能会走一些弯路,笔者最近在用PIC的C语言时就遇到了好些问题,在这里笔者想就最近一段时间用PIC的C语言的一些经验和广大的底层软件程序员做一下交流和介绍,希望本文对用PICC开发PIC系列单片机的人有所帮助。目前在国内用的比较多的是Hi-Tech的HI-TECH PICC编译器,而且目前市场上一些国内的PIC单片机仿真器也开始支持HI-TECH PICC编译格式,因此本文主要以Hi-Tech的PICC为基础介绍一下PIC的C语言的基本特点。二.HI-TECH PICC的C语言开发工具的语言特点  PICC的C语言按ANSI C来定义,并进行了C语言的扩展,PICC和ANSI C有一个根本的区别就是PICC不支持函数的递归调用,这是因为PIC单片机内的堆栈大小是由硬件决定的,资源有限,所以不支持递归调用。它的数据也遵从标准C的数据结构,PICC的数据结构是以数据类型的形式出现的。PICC编译器支持的数据类型有位类型(bit)、无符号字符(unsigned char)、有符号字符(signed char)、无符号整形(unsigned int)、有符号整形(signed int)、无符号长整型(unsigned long)、有符号长整型(signed long)、浮点(float)和指针类型等,需要注意的是,PICC支持的多字节数据都采用低字节在前,高字节在后的原则,即一个多字节数,比如int型,在内存单元中存储顺序为低位字节存储在地址低的存储单元中,高位字节存储在地址高的存储单元中,程序员在用union定义变量时一定要注意这一特点。  PIC的C语言变量分为局部变量和全局变量,所有变量在使用前必须先定义后使用。全局变量是在任何函数之外说明的、可被任意模块使用的、在整个程序执行期间都保持有效的变量;局部变量在函数内部说明,局部变量有两种:自动变量和静态变量,缺省类型为自动变量,除非明确将其声明为静态变量,而且,所有的自动变量都被分配在寄存器页0,所以bank限定词不能用于自动变量,但可以用于静态的局部变量,当程序退出时,自动变量占用的空间释放,自动变量也就失去意义;静态变量是一种局部变量,因此只在声明他的函数内部有效,但它占用固定的存储单元,而这个存储单元不会被别的函数使用,因此其它函数可以通过指针访问或修改静态变量的值;静态变量在程序开始只初始化一次,因此若需只在某函数内部使用一变量,而又希望其值在2次函数调用期间保持不变,为实现程序模块化,则可将其声明为静态变量。例如以下声明中,有些为合法,有些为非法:void max(void){unsigned char var1; //合法声明unsigned char bank1 var2; //非法声明static unsigned char bank1 var3; //合法声明unsigned char var4 = 0x02; //合法声明,每次调用都初始化static unsigned char bank1 var5 = 0x02; //合法声明,但只初始化一次…………}  PICC编译器对局部变量及传递参数使用RAM覆盖技术,编译时,连接器会自动把一些不可能被同时调用的函数的自动变量区重叠在一起,以达到内存的高效利用,因此其内部RAM的利用效率非常高。1、位变量的使用需要说明的是虽然PICC允许利用bit定义位变量,比如:static bit init_flag;但位变量不能定义为自变量,也能不能作为函数参数,但可以作为函数的返回值。而且位变量也不能被静态初始化。比如若只想在某一个函数中使用位变量flag,用如下两种方法都是错误的:void max(void){bit flag; //非法,位变量不能定义为局部自变量…………}void max(void){static bit flag = 1; //非法,位变量不能被静态初始化…………}PICC 支持在结构中定义位成员,位成员按最低有效位在前的方式存储,位成员总是以8bit为单位进行分配,当当前字节分配满后再分配下一个字节,但位成员不会跨字节存放.,例如定义:struct {unsigned lo: 1;unsigned mid: 1;unsigned hi: 7;} flag @ 0x60;结构flag占用两个单元0x60和0x61, lo分配到0x60单元的第0位, mid分配到0x60单元的第1位, 由于位成员不会跨字节存放,故hi分配到0x61单元的0-6位(第6位为最高有效位),而0x60单元的2-7位则跳过。当然,上述的结构定义也可不使用绝对地址定义:struct {unsigned lo: 1;unsigned mid: 1;unsigned hi: 7;} flag;  另外,不使用的位可用未命名的位成员来定义, 如果我们不使用mid, 就可定义为:struct {unsigned lo: 1;unsigned : 1;unsigned hi: 7;}flag;如果将一个整型数赋给位变量,只是将最低位赋给位变量,如果你是想要将一个整型

癫痫专科医院

东莞治疗青少年白癜风专科医院哪家好

大同早泄医院哪家好

重庆哪家医院专治白癜风好

深圳不孕不育

相关阅读
最火贸易摩擦影响铝短期出口长期看技术升级电缆接头换网器抹布天馈系统纸板生产线Rra

贸易摩擦影响铝短期出口 长期看技术升级【铝道】铝材出口经历年伴随原铝产量的高速增长之后,受到海外反倾销政策和产品附加值低等影响,目前增速有所放缓。近期受到美国钢铝反倾销税影响,预计占出口13%的对美出口将受

2024-03-22 19:43
最火16日遵义市场建筑钢材价格行情昌吉高州矿石分析仪绍兴秧盘Rra

16日遵义市场建筑钢材价格行情您当前位置:首页 价格行情16日遵义市场建筑钢材价格行情16日遵义市场建筑钢材价格行情来源:中国五金商机日期:品名 规格(mm) 材质 钢厂/产地 价格(元/吨)涨跌备注 高线Ф6.HPB300山西星原4120+

2024-03-22 04:05
最火上海市最新铅价格行情2012年6月13日差压表高压断路器控制装置汕头氩弧焊丝Rra

上海保护板市最新铅价格行情(2012年6月13日)纸杯机您当前位置:首页 价格行情上海市最新铅价格行该生产线的实行国内外创新高情(2012年6月13日)上海市最新铅价格行情(2012年6月13日)来源:油脂泵中国五金商机日期:今日铅价格_上海

2024-03-22 00:26
最火深圳新星拟总投资10亿元建设轻合金材料生传动带管封口机连接阀手机转接头饮料包装机Rra

深圳新星拟总投资10亿元建设轻合金材料生产项目【铝道】深圳新星9月28日晚公告,公司近日与洛阳市偃师市人民政府签订了《轻合金材料生产项目合同书》,拟在偃师市新材料产业集聚区开展铝晶粒细化剂、铝基中间合金、70高

2024-03-21 20:31
最火智利12月铜出口额同比减少136但全年增Ic卡座多轴器交流电压表起重设备乌兰察布Rra

智利12月铜出口额同比减少13.6% 但全年增4.7%【铝道】据外电1月7日消息,智利央行公布的数据显示,智利2018年全年铜出口额同比增长4.7%,因该行业表现较好,但中美台式攻丝机贸易紧张局势影响了下半年铁叉的铜价表现。不过12

2024-03-21 17:18
最火浅谈河北兆基精模量具生产的大理石平台定转子间隔柱频谱分析仪微调电容器自控阀门Rra

浅谈河北兆基精模量具生产的大理石平台您当前位置:首页 企业信号转换器浅谈河北兆基精模量具生产的大理石平台浅谈河北兆基精模量具生产的大理石平台来源:中国五金商机日期:理石平台(大理石平板)取材於地下优质的岩

2024-03-21 06:41