PICC——嵌入汇编

来源:本站
导读:目前正在解读《PICC——嵌入汇编》的相关信息,《PICC——嵌入汇编》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《PICC——嵌入汇编》的详细说明。
简介:单片机系统强调的是控制的实时性,为了实现这一要求,有时必须用汇编指令实现部分代码以提高程序运行的效率。这样,一个项目中就会出现 C 和汇编混合编程的情形,我们在此讨论一些混合编程的基本方法和技巧。

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

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

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

嵌入行内汇编的方法

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

asm("clrwdt")

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

for (;;) {

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

Task();

ClockRun();

asm("sleep"); //休眠

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

}

如果需要编写一段连续的汇编指令,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——嵌入汇编》最后刷新时间 2024-03-14 01:08:30,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《PICC——嵌入汇编》该内容的真实性请自行鉴别。