嵌入式mcu-m16c应用举例.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式mcu-m16c应用举例

嵌入式MCU应用举例 一.预备知识: 预处理命令#pragma 介绍一些常用的#pragma命令的扩展功能。 1.用于SB相对地址预处理命令: #pragma SBDATA 变量名 对变量进行声明,访问该变量时NC30会生成AS30伪指令“.SBSYM”,并使用SB相对寻址模式。这样可以生成高效的ROM代码,下图是“#pragma SBDATA”命令的图形说明。 2.生成位操作指令 NC30允许用户以位为单位处理数据。设置一个位段来实现位操作,位段利用结构体定义符号,其格式如下: stuct tag{ 类型说明符号 位符号:比特数 }; 引用一个位符号时,用点“.”分割开: 变量名.位符号 指定该位的方法和对结构体的处理相同。位段在存储器中的位置的分配与编译器有关。NC30对位段分配存储区时有两条规则: 从LSB开始顺次分配 另一种类型的数据放到下一个地址 下图是如何对位段分配存储区的例子: 设定位段后,虽然已可以在程序中处理位符号,但生成的是一条运算、逻辑指令,并不是位指令,若使用扩展功能 “# pragma BIT”对位段进行声明,则可以生成代码效率更高的“直接位操作指令” 下图示出了一个例子,说明了如何写这条预处理命令及其展开情况的。 除了用“#pragma BIT”声明的数据外,对下面的变量NC30编译器也可以生成直接位操作指令: 用“pragma SBDATA”声明的变量 用“pragma ADDRESS”声明的变量,且其地址位于绝对地址00000到01FFF内 用‘-fbit’指定的近程变量。 3.I/O接口的控制 在控制内置I/O接口时,需指定变量的绝对地址。在NC30中可以使用扩展功能 “#pragma ADDRESS”来指定变量的绝对地址,其格式如下: #pragma ADDRESS 变量名 绝对地址 注意只对函数外定义的变量和在函数内定义的静态变量有效。扩展功能 “#pragma ADDRESS”也可以用来设置SFR区。使用这种方法设置SFR时,一般准备一个独立的文件,并将其包含在源程序中。 下图是一个SFR区定义文件的例子 二.I/O口控制 1.LED特性 LED是发光二极管的简称,它通过一定的电流发光,LED有极性 2.LED的电路连接 在M16C/62C学习板上,将电阻和LED分别接在M30620FCAFP的p7口上,如下图所示: 3.LED亮灯程序(2) 编写使LED1和LED2交错亮的程序 编写顺序如下: 1.源文件的准备 启动程序和向量文件按照原来的使用,仅做成控制I/O的主程序。 (1).在硬盘里做新的文件夹,文件夹名采用集成开发环境TM的项目名,此处用”sampleA” (2).对于sampleA.c”,采用编译程序用合乎规则的内容编写。 2.编译 用集成开发环境TM做成项目,并进行编译,做成在调试器(kd30)上的可运行的文件(sampleA.x30)以及用闪存写入器写入闪存的文件(sampleA.mot) 3.调试 用调试程序确认其操作。 4.将程序固化到ROM 控制程序清单如下: #pragma ADDRESS P7 3edh /*定义P7口的地址*/ #pragma ADDRESS PD7 3efh void _main(void) unsigned char P7,PD7; /*在p7方向寄存器和数据器里装入值作为变量*/ /*宏定义*/ #define LED_off /*LED1,2灯灭*/ #define LED1_on /*LED1灯亮,LED2灯灭*/ #define LED2_on /*LED1灯灭,LED2灯亮*/ main( ) { unsigned long i; P7=LED_off; /*p7口输出H,灯灭*/ PD7=0Xff; /*p7口方向输出*/ for(; ;) { P7=LED1_on; /*LED1灯亮*/ for(i=0x8ffff; ;) /*等待(软等待)*/ { i--; if(i==0) break; } P7=LED2_on; /*LED2灯亮*/ for(i=0x8ffff; ; ) /*软等待

文档评论(0)

asd522513656 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档