历史上的今天
返回首页

历史上的今天

今天是:2025年03月16日(星期日)

正在发生

2020年03月16日 | PICC C中的函数

2020-03-16 来源:eefocus

PICC中函数,由于堆栈资源的原因,在PICC中的函数不支持函数的递归调用。


1、带返回值的函数


2、无返回值的函数


在PICC中,我们直接使用寄存器的名字和位名,这些都归功于相关的头文件。还有一些宏定义也在这些头文件中。


’PIC.H‘文件是PICC编译必需的头文件。


根据用户所选用的单片机芯片型号自动包含相应的头文件。


定义常用的嵌入汇编宏定义。配置位定义、EEPROM初始化数据。当中的宏定义如同函数,减少堆栈的使用次数。


注意:宏定义的最后一行通常不用“;”,调用宏定义时就要加上’;‘,这样调用宏定义就像调用一个C函数一样。


PIC168XA.H是对具体单片机的特殊功能寄存器及位进行命名


static volatile unsigned char PORTB @0X06;


所有寄存器定义中均有’static volatile‘关键字,关键字’static‘是说明这些变量是静态的。


在PICC安装目录的INCLUDE目录中,还有许多其他头文件,最常用的数学类函数math.h。


在调用内部函数时,变量类型如不一致,PICC将自动转换。


PICC的中断服务程序的编制


PICC可以实现C语言的中断服务程序。void interrupt INT_SER(void)


函数名“INT_SER”可以是符合命名规则的其他字符。PICC在最后进行代码连接时会自动将该函数定位到0x0004中断服务响应。编译器也会实现中断函数的返回指令’retfie‘.PICC还会自动加入代码实现中断现场的保护与恢复,编程时不要像编写汇编那样加入中断现场保护和恢复指令语句。


注意:在中断服务程序中调用的函数,必须专用,即不能同时在中断之外的程序中调用又在中断服务程序中调用AD_SUB;只要不重名即可。


PIC16系列单片机的中断入口只有一个,即0004,因此程序中只有一个中断服务函数,可以通过判断中断标志位来确定中断程序的执行走向。


在C中嵌入汇编指令


嵌入汇编有2种方法:一是行嵌入,二是块嵌入


1、行嵌入格式为 asm("汇编语句");


2、如果要嵌入几个汇编指令,则用块嵌入,块嵌入的格式为


#asm


汇编指令 1


汇编指令 2


...


汇编指令 n


#endasm


其中的汇编指令必须符合汇编指令规范,而且在汇编指令中引用变量必须是PICC定义的全局变量(包括PICC头文件所定义的特殊功能寄存器和用户定义的变量),且在变量前加上"_".


行嵌入中在后面有分号,块嵌入中每一行都没有分号。


既然用了C语言,就不要惦记着汇编语言!除非万不得已,一般不要嵌入汇编语言。

推荐阅读

史海拾趣

东晨(DC)公司的发展小趣事

东晨(DC)公司注重企业文化的建设,将“创新、务实、协作、共赢”作为企业的核心价值观。公司倡导员工勇于创新、敢于挑战的精神,同时注重团队协作和共赢的理念。这种企业文化不仅增强了员工的凝聚力和向心力,也塑造了公司的良好品牌形象。在业界和客户中,东晨(DC)公司赢得了广泛的赞誉和信任。

请注意,以上故事为虚构内容,旨在展示电子行业公司可能的发展路径和成功要素。如有需要,请结合实际情况进行调整和完善。

Heraeus公司的发展小趣事

在电子行业的激烈竞争中,东晨(DC)公司凭借一项革命性的技术突破——高效能低功耗的芯片设计,迅速崛起。该公司投入大量研发资源,成功开发出了一款性能卓越、能耗极低的芯片,这一创新成果为智能手机、平板电脑等移动设备提供了更长的续航时间和更快的运行速度。凭借这一技术优势,东晨(DC)公司迅速获得了市场的认可,产品销量节节攀升。

APM Hexseal公司的发展小趣事

APM Hexseal的创始人Milton Morse是一位自学成才的工程师和杰出的创新者。他敏锐地洞察到电子行业对密封解决方案的迫切需求,于是开始设计原始的密封开关“靴子”。这种模制的覆盖物能够保护拨动开关和安装面板免受各种液体和气体的渗透。这一创新产品迅速取得了巨大的成功,为APM Hexseal公司奠定了坚实的基础。

Dantona Industries公司的发展小趣事

作为一家有社会责任感的企业,Dantona Industries始终关注环境保护和社会公益。他们积极推广绿色生产理念,采用环保材料和生产工艺,减少对环境的影响。同时,公司还积极参与社会公益活动,为贫困地区的教育、医疗等事业提供援助。这些举措不仅展现了公司的社会担当精神,也为公司赢得了良好的社会声誉和品牌形象。

EXCELTA公司的发展小趣事

随着公司规模的扩大,产品质量的稳定性成为制约Excelta进一步发展的瓶颈。为了解决这一问题,公司决定引入先进的质量管理体系,并投入大量资源进行培训和改造。经过不懈的努力,Excelta的产品质量得到了显著提升,客户满意度也大幅提高。这一转变不仅为公司赢得了更多的订单,还奠定了公司在行业中的领先地位。

HDK(北陆电气)公司的发展小趣事

Excelta公司创立于20世纪90年代初,当时电子元器件市场正处于快速发展阶段。创始人李明看到连接器市场的巨大潜力,决定投身其中。然而,初创时期资金紧张,技术储备薄弱,公司面临巨大挑战。李明带领团队日夜兼程,通过技术创新和成本控制,成功开发出第一款具有竞争力的连接器产品,并迅速获得了市场的认可。此后,Excelta逐渐在连接器领域崭露头角。

问答坊 | AI 解惑

求助:基于DSP的实时滤波器的设计

求助:基于DSP的实时滤波器的设计…

查看全部问答>

【藏书阁】晶体管电路 第一册

目录: 第一章 晶体管的放大作用 第二章 利用PN结组成的一些半导体器件 第三章 交流放大器 第四章 直流放大器 第五章 反馈在放大器中的应用 第六章 调制式直流放大器 由于扫描缘故,书中局部地方不是很清楚 详细信息: 书籍作者:清华大 ...…

查看全部问答>

按键处理与按键防抖动例子

本帖最后由 paulhyde 于 2014-9-15 09:37 编辑 /***************************************************** 本程序的目标是这样的: 1:不使用INTn中断功能,按键接在普通IO上 2:由定时器T/C2每隔一段时间检测按键一次, 并具有防抖动功能 3:每点击按 ...…

查看全部问答>

电工测量与电测仪表--很基础很实用的好书

电工测量与电测仪表--很基础很实用的好书 序言 前言 第一章 电测技术基础 第一节 测量的定义和分类 第二节 测量误差 第三节 电测仪表的分类 第三节 电测仪表的主要技术指标 第二章 电气测量指示仪表 第一节 电气测量指示仪表的概念和分 ...…

查看全部问答>

编译告警中英文对照分享

1.Found clock-sensitive change during activeclockedge at time <time> on register \"<name>\"原因:vector sourcefile中时钟敏感信号(如:数据,允许端,清零,同步加载等)在时钟的边缘同时变化。而时钟敏感信号是不能在时钟边沿变化 ...…

查看全部问答>

有哪位仁兄开发过笔记本快捷键驱动

能否把原理说一下,另外快捷键调节亮度跟显卡驱动还有BIOS有关系是么?…

查看全部问答>

广州公司急聘wince应用开发工程师(高薪诚聘)

广州市澄浩信息科技有限公司是一家集“研发,生产,销售”为一体的高科技企业,主要从事GPS导航仪、车载多媒体娱乐系统等高端电子产品研究、开发、生产及信息数据库的开发等业务领域。本公司以信息服务为发展方向,目标建立一支业务水平精湛、富有 ...…

查看全部问答>

电压比较器问题~~~~~~~~~~~~~~~~~~

为什么在MULTISIM10中,单独做个电压比较器可以出来结果,加的信号源是系统的函数发生器(输入10V,1KHz,正弦波)~~~~~但为什么连到我们自己做的信号源(示波器显示也是10V,1KHz,正弦波)上就出来结果不对呢?…

查看全部问答>

电容耦合效应会产生什么影响?如何减小这一影响

电容耦合效应会产生什么影响?如何减小这一影响…

查看全部问答>

就想散分 问问行情,关于嵌入式!!!谢谢!!!!!!!!!!!!!

  在北京 做嵌入式开发,比如用C ,c++之类 的 做驱动,或者是软硬结合的 产品 嵌入式开发,linux ,arm 等,工资比asp.NET 高很多吗? 比如本科生 两年经验的嵌入式,在北京拿多少? 回答 都有分送,谢谢各位 前辈!!!! 前提是 能力 ...…

查看全部问答>