单片机c语言设计基础,单片机的C语言程序设计基础.ppt

单片机的C语言程序设计基础

10.4.3 C51程序的开发流程 C51程序开发与在Windows中运行的项目工程的开发有所不同,在Windows中,一般程序的编译结果是后缀名为“.exe”的可执行文件,该文件在Windows系统中能直接运行。 而单片机C51程序的开发属于嵌入式开发,遵循主流的交叉编译模式,即在宿主机(运行Keil μVision3的PC机)上开发编译,在目标机(51系列单片机)上运行。 在宿主机上的编译结果为COFF文件或是满足Intel规范的文件,文件包含了可执行的机器码,要经过编程器烧写到单片机的程序区(Flash ROM)才能执行。 一个单片机C51应用程序的开发流程如下 在Keil μVision3中新建项目工程 建立并编辑源文件 编译调试项目工程 生成目标文件 下载到程序存储器中 程序运行。 有关Keil μVision3的具体使用,请见Keil μVision3的使用操作说明。 10.5 C51与汇编语言的混合编程 目前多数开发人员都在用C51开发单片机程序,但在一些速度和时序敏感的场合下,C51略显不足,而有些特殊的要求必须通过汇编语言程序来实现,但是用汇编语言编写的程序远不如用C51语言编写的可读性好和效率高。因此采用C51与汇编语言混合编程是解决这类问题的最好方案。 10.5.1 C51与MCS-51汇编语言的比较 无论是采用C51语言还是汇编语言,源程序都要转换成机器码,单片机才能执行。对于用C51编制的程序,要经过编译器,而采用汇编语言编写的源程序要经过汇编器汇编后产生浮动地址作为的目标程序,然后经过链接定位器生成十六进制的可执行文件。 用MCS-51汇编语言编程时,需要考虑它的存储器结构,尤其要考虑其片内数据存储器与特殊功能寄存器的合理正确使用,及按实际地址处理端口数据。就是说编程者必须具体地组织、分配存储器资源和正确处理端口数据。 C语言能直接对计算机的硬件进行操作,与汇编语言相比它具有如下优点: C51要比MCS-51汇编语言的可读性好。 程序由若干函数组成,为模块化结构。 使用C51编写的程序可移植性好。 编程及程序调试的时间短。 C51中的库函数包含了许多标准的子程序,且具有较强的数据处理能力。大大减少编程工作量。 对单片机中的寄存器分配、不同存储器的寻址以及数据类型等细节可由编译器来管理。 10.5.1 C51与MCS-51汇编语言的比较 汇编语言的特点如下: 代码执行效率高。 占用存储空间少。 可读性和可移植性差。 使用C51编程,虽不像汇编语言那样要具体地组织、分配存储器资源和处理端口数据,但是对数据类型和变量的定义,必须与AT89C51的存储器的存储器结构相关联,否则编译器就不能正确地映射定位。用C51编写的程序与标准C程序编写的不同之处必须根据AT89C51的存储器结构以及内部资源定义相应的数据类型和变量。 10.5.1 C51与MCS-51汇编语言的比较 所以用C51编程时,如何定义与单片机相对应的数据类型和变量,是使用C51编程的一个重要问题。 混合编程多采用如下的编程思想,程序的框架或主体部分以及数据处理及运算用C51编写,时序要求严格的部分用汇编语言编写。这种混合编程的方法将C语言和汇编语言的优点结合起来,已经成为目前单片机程序开发的最流行的编程方法。 10.5.1 C51与MCS-51汇编语言的比较 10.5.2 C51与汇编语言混合编程的方法 在把汇编语言程序加入到C语言程序前,须使汇编语言和C51程序一样具有明确的边界、参数、返回值和局部变量;必须为汇编语言编写的程序段指定段名并进行定义;如果要在它们之间传递参数,则必须保证汇编程序用来传递参数的存储区和C51函数使用的存储区是一样的。 在C51中使用汇编语言有以下三种方法。 C51代码中嵌入汇编代码 可通过预编译指令“asm”在C51代码中嵌入汇编代码。方法是用#pragma语句,具体结构为: #pragma asm 汇编指令行 #pragma endasm 这种方法是通过asm和endasm告诉C51编译器,中间的行不用编译为汇编行,例如: #include extern unsigned char code newval[256] ; void func1(unsigned char param) { unsigned char temp; temp = newval[param] temp*=2; temp/=3; #pragma asm; 预编译指令asm MOVP1,R7; 这些汇编语言代码行不用再编译为汇编行 NOP NOP NOP MOVP1,#0 #pragma endasm } C51代码中嵌入汇编代码 注意,Keil μVision3的默认设置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值