下一篇 »

汇编语言学习(二)

    众所周知,C语言虽然是高级语言,但现在大部分的与硬件有关的开发中C语言都是不二之选,它的代码可读性好、能够模块化开发与资源共享、可移植性好、生成的代码效率高等,广泛应用于单片机、嵌入式、工业控制等方面,尽管如此,我们还是不能忘记汇编,汇编是一种直接控制底层硬件的语言,

在某些对功耗与空间有较高要求的场合,我们就必须使用汇编语言,而且它还有一些C很难做到的方面,比如说精确延时。下面我们就来谈下汇编。

    首先来谈一下如何在KEIL中嵌入汇编代码:   

    一、程序部分

要想在KEIL的C文件中嵌入汇编代码,我们首先要添加一段代码:

                 #pragma ASM
                 ;        这里为你的汇编代码
                 #pragma ENDASM



    二、KEIL配置

我们在这个组上右键,然后出现这个界面:

如上图所示,把那两个方框勾成黑色的就行了,配置就完成了,接下来的一步非常重要,我今天就是因为没做第三步,所以调了好久,才发现问题,不然还以为是硬件出问题了。

    三、添加文件

就是在组中添加一个文件“C51S.LIB”,记住一定要把这个文件 添加进工程中,不然的话编译会有一个警告,程序下载进去后就不知道是什么了。这个文件的话一般在KEIL安装目录下的 LIB 目录下,找找就能看到了。

    好了,如何在C中嵌入汇编上面写得很清楚了,前文中有提到汇编可以精确延时,下面我们就来看一看它怎么个精确延时,以我的51单片机为例,12M的晶振,每个机器周期是12个时钟周期,所以每个机器周期的时间是1us,在8051的指令系统中,有一条“NOP”指令,这是一条空指令,执行时间就为一个机器周期,即为1us,那么就很清楚,我们可以利用这条指令来实现精确延时,可以精确到us级,下面是我的程序的截图,延时10000个机器周期=10000us=10ms,,好了,今天的内容就到这里了,明天打算搞自己的封装库文件。


Ps:上文的KEIL中嵌入汇编代码参考自http://blog.chinaunix.net/uid-7563753-id-2609328.html,非常感谢原文作者。