微控制器原理4.pptVIP

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
微控制器原理4

* C语言程序中嵌入单片机汇编语言程序例: KL25-Light例之 common.h 中(P.114) //2.定义开关总中断 #define ENABLE_INTERRUPTS asm(CPSIE i) //开总中断 #define DISABLE_INTERRUPTS asm(CPSID i) //关总中断 1.基本数据类型 C语言的数据类型有基本类型和构造类型两大类。 * 例如: KL25-Light例之 common.h 中(P.118) 在编写嵌入式程序时使用的基本数据类型多以8位、16位、32位数据长度为单位,且要明确使用变量的字长。但不同的编译器为基本整型数据类型分配的位数存在不同,因此,需根据具体编译器重新定义嵌入式基本数据类型。 关于typedef: 1)定义新的类型名代替已有的类型名。 2)不能定义变量名。 3)不能创造新的类型。 4)与define类似,也有不同。 5)往往单独存放在一个文件中,用include包含近来。 #includestdio.h void main() {register int i,s=0; for(i=1;i=10;i++) s+=i*i; printf(s=%d,s); } 特别关注: 1)变量说明为register类型,可以提高程序效率。寄存器变量,是由寄存器分配空间,访问速度比访问内存快,加快执行速度。在c语言当中可以使用寄存器变量来优化程序的性能。 例: __fastcall应用,如下所示的C++语言编写的函数: __fastcall test22(int x, int y) //由寄存器传 参数 { return ( 2 * x + 5 * y + 100 ); } __fastcall ? 指的是建议编译器采用“寄存器”传参方式,即从左到右的头3个参数分别用80X86CPU中的寄存器ECX,EDX,EAX传递,这样效率比较高。 编译上述程序后,得到如下所示的目标代码,采用汇编格式指令的形式表示: LEA EAX,DWORD PTR [EDX+EDX*4+100] LEA EAX,DWORD PTR [EAX+ECX*2] RET 2)类型属性主要与微控制器汇编语言相对应 例如:汇编语言对以下变量定义 .section .data var1: .byte 0x0a var2: .short 0x1004 var3: .word 0对应C语言变量声明 var1 unsigned char var2 unsigned short var3 unsigned long 3)不优化的数据类型:volatile 该类型声明的变量不能随意优化(暂时使用CPU寄存器存储数据,以优化存储和读取),编译器将安排该变量使用系统存储器的具体地址单元。 例如: vuint_32 *portB_ptr = (uint_32*)0x4004A000u 2.运算符 C语言的运算符分为算术、逻辑、关系和位运算及一些特殊的操作符。C语言的常用运算符及使用方法举例见书P14表1-2。 特别关注: 1)逻辑复合运算的应用 例如: KL25-Light例之 common.h 中(P.118) 解释: ?将二进制1左移bit 位以后,与register按位或,达到置1目的。 ?将二进制1左移bit 位以后取反,即该二进制中只有一个0,与register按位与,达到清0目的。 ?将register右移bit位,bit位到达最低位,与二进制1相与,结果为0,该位为0;结果非0,该位为1。达到获取bit位状态的目的。 3.流程控制 在程序设计中主要有三种基本控制结构:顺序结构、选择结构和循环结构。 特别关注: 1) 嵌入式程序中经常使用case语句,并且应该使用break。 2)case结构中,一般应该有default。 3)主程序往往是一个无限循环程序。 例如: KL25-Light例之 main.c 中(P.80) //进入主循环,使 红、绿、兰三灯闪烁 //主循环开始 for(;;) //一个无限循环程序 { run_counter++; //主循环计数+1 if (run_counter RUN_COUNTER_MAX) {

文档评论(0)

wyjy + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档