PICC——嵌入汇编

2020-02-14来源: eefocus关键字:PICC  嵌入汇编  实时性

江苏11选5_[官网首页]简介:单片机系统强调的是控制的实时性,为了实现这一要求,有时必须用汇编指令实现部分代码以提高程序运行的效率。这样,一个项目中就会出现 C 和汇编混合编程的情形,我们在此讨论一些混合编程的基本方法和技巧。


有两个原因决定了用 C 语言进行单片机应用程序开发时使用汇编语句的必要性:


单片机的一些特殊指令操作在标准的 C 语言语法中没有直接对应的描述,例如 PIC 单片机的清看门狗指令“clrwdt”和休眠指令“sleep”;


单片机系统强调的是控制的实时性,为了实现这一要求,有时必须用汇编指令实现部分代码以提高程序运行的效率。这样,一个项目中就会出现 C 和汇编混合编程的情形,我们在此讨论一些混合编程的基本方法和技巧。


嵌入行内汇编的方法


在 C 原程序中直接嵌入汇编指令是最直接最容易的方法。如果只需要嵌入少量几条的汇编指令,PICC 提供了一个类似于函数的语句:

asm("clrwdt")

双引号中可以编写任何一条 PIC 的标准汇编指令。例如:

for (;;) {

asm("clrwdt"); //清看门狗

Task();

ClockRun();

asm("sleep"); //休眠

asm("nop"); //空操作延时

}


江苏11选5_[官网首页]如果需要编写一段连续的汇编指令,PICC 支持另外一种语法描述:用“#asm”开始汇编指令段,用“#endasm”结束。例如下面的一段嵌入汇编指令实现了将 0x20~0x7F 间的

RAM 全部清零:

#asm

movlw 0x20

movwf _FSR

clRF _INDF

incf _FSR,f

btfss _FSR,7

goto $-3

#endasm


C 语言中定义的全局或静态变量寻址是最容易的,因为这些变量的地址已知且固定。按C 语言的语法标准,所有 C 中定义的符号在编译后将自动在前面添加一下划线符“_”,因此,若要在汇编指令中寻址 C 语言定义的各类变量,一定要在变量前加上一“_”符号,我们在上面例中已经体现了这一变量引用的法则,因为 FSR 和 INDF 等所有特殊寄存器是以 C 语言语法定义的,因此汇编中需要对其寻址时前面必须添加下划线。


对于 C 语言中用户自定义的全局变量,用行内汇编指令寻址时也同样必须加上“_” ,下面的例 11-10 说明了具体的引用方法:

volatile unsigned char tmp; //定义位于bank0的字符型全局变量


void Test(void) //测试程序

{

#asm //开始行内汇编

clrf _STATUS //选择bank0

movlw 0x10 //设定初值

movwf _tmp //tmp=0x10

#endasm //结束行内汇编

if (tmp==0x10) { }; //开始C语言程序

关键字:PICC  嵌入汇编  实时性 编辑:什么鱼 引用地址:http://news.baoyatucs.com/mcu/ic488249.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:PICC——基本知识(变量)
下一篇:PICC ME16 C简要说明书

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

PICC环境写PIC单片机程序的探讨
简介:一般C语言产生的代码是比较繁琐的,所以要写出高质量、实用的C语言程序,就必须对单片机体系结构和硬件资源作详尽的了解.目前,Microchip公司生产的PIC系列单片机以其低成本、低功耗、高性能、开发速度快且一次性用户可编程等优点迅速占领了国内市场,成为国内销售量最大的单片机.但国内介绍其C语言开发工具的书籍和文章却比较少,在开发过程中给广大程序员带来了许多困难和不便.Microchip公司没有针对中低档系列PIC单片机的C语言编译器,但很多专业的第三方公司提供众多支持PIC单片机的C语言编译器,常见的有Hitech、CCS、IAR以及Bytecraft等公司.Hitech公司的PICC编译器稳定可靠,编译生成的代码效率高
发表于 2020-02-18
PICC ME16 C简要说明书
第一部分为了对PIC单片机有更好的支持,PICC在标准C的基础上作了一些扩充:定义I/O函数,以便在你的硬件系统中使用中定义的函数。用C语言编写中断服务程序用C语言编写I/O操作程序C语言与汇编语言间的接口1-1 与标准C的不同PICC只在一处与标准C不同:函数的重入。因为PIC单片机的寄存器及堆栈有限,所以PICC不支持可重入函数。1-2 支持的PIC芯片PICC 支持很多PIC单片机,支持PIC单片机的类型在LIB目录下的picinfo.ini 文件中有定义。1-3 PICC 包含一些标准库1-4 PICC 编译器可以输出一些格式的目标文件,缺省设置为输出Bytecraft的'COD' 格式和 Intel
发表于 2020-02-14
PICC——基本知识(变量)
江苏11选5_[官网首页]利用这一技术后所有的动态局部变量都可以按已知的固定地址地进行直接寻址,用 PIC 汇编指令实现的效率最高,但这时不能出现函数递归调用。PICC 在编译时会严格检查递归调用的问题并认为这是一个严重错误而立即终止编译过程。为了使编译器产生最高效的机器码,PICC 把单片机中数据寄存器的 bank问题交由编程员自己管理,因此在定义用户变量时你必须自己决定这些变量具体放在哪一个 bank 中。如果没有特别指明,所定义的变量将被定位在 bank0,除了 bank0 内的变量声明时不需特殊处理外,定义在其它 bank 内的变量前面必须加上相应的 bank序号中档系列 PIC 单片机数据寄存器的一个 bank 大小为 128 字节,刨去前面若干
发表于 2020-02-14
PICC编译指针详解
指向 RAM 的指针如果是汇编语言编程,实现指针寻址的方法肯定就是用 FSR 寄存器,PICC 也不例外。为了生成高效的代码,PICC 在编译C原程序时将指向 RAM 的指针操作最终用 FSR 来实现间接寻址。这样就势必产生一个问题:FSR 能够直接连续寻址的范围是 256 字节(bank0/1或 bank2/3),要覆盖最大 512 字节的内部数据存储空间,又该如何让定义指针?PICC 还是将这一问题留给编程员自己解决:在定义指针时必须明确指定该指针所适用的寻址区域,例如:unsigned char *ptr0; //①定义覆盖bank0/1的指针bank2 unsigned char *ptr1; //②定义覆盖bank2
发表于 2020-02-14
PICC ---- 函数
江苏11选5_[官网首页]简介:一个良好的程序设计应该有一个清晰的组织结构,把不同的功能用不同的函数实现是最好的方法,因此一个函数 2K字长的限制一般不会对程序代码的编写产生太多影响。函数的代码长度限制PICC决定了C原程序中的一个函数经编译后生成的机器码一定会放在同一个程序页面内。中档系列的 PIC 单片机其一个程序页面的长度是 2K字,换句话说,用 C 语言编写的任何一个函数最后生成的代码不能超过 2K字。一个良好的程序设计应该有一个清晰的组织结构,把不同的功能用不同的函数实现是最好的方法,因此一个函数 2K字长的限制一般不会对程序代码的编写产生太多影响。如果为实现特定的功能确实要连续编写很长的程序,这时就必须把这些连续的代码拆分成若干函数,以保证每个
发表于 2020-02-13
STM8S103F单片机编程——在C文件中嵌入汇编代码
江苏11选5_[官网首页]最近在使用STM8S103F单片机,需要在C程序中嵌入汇编代码。经过搜索,找到下面的解决方法。方法1:方法2:上面的内容摘自COSMIC的安装目录下,COSMICCXSTM8_32KDocsCXSTM8_UsersGuide.pdf
发表于 2020-01-31
STM8S103F单片机编程——在C文件中嵌入汇编代码
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 baoyatucs.com, Inc. All rights reserved

页面底部区域 foot.htm