找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1169|回复: 2
打印 上一主题 下一主题
收起左侧

Keil汇编进阶指南(3) - 头文件、定义与变量

[复制链接]
跳转到指定楼层
楼主
ID:1080301 发表于 2024-11-29 21:14 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
头文件、定义与变量
当你看见这个标题的时候,可能会震惊,啥,汇编也有头文件?
是的,但是和C不同,汇编使用的是.inc文件,和C一样,里面放着一些定义
我们通常使用EQU定义常量和引脚,以及DATA,BIT,IDATA等一系列定义,但最常用的是DATA
(新版有MPL宏,但旧版不支持,估计刚出没多久,在此不再叙述,可去官方文档查看)
按照上一章节的任务,也就是制作一个LCD1602的库函数,我们开始我们的定义
首先新建一个inc文件,里面定义引脚,使用头文件的好处就是可以随时让别人改
  1.         LCD_RS EQU P2^6
  2.         LCD_RW EQU P2^5
  3.         LCD_EN EQU P2^7
  4.         LCD_BUS EQU P0;和C不一样,汇编使用分号打注释
复制代码
好了,当我们使用的时候可以直接使用LCD_RS来代替P2^6,这样的好处就是一旦引脚变了,你只需要改一次
这一部分说完了,现在该变量了
基本上定义是这样的
变量名 类型 地址
比如:
  1. PORT1     DATA    90h
复制代码

支持的有DATA,BIT,XDATA等类型
这些在一些教程中讲解的比较详细,故不再赘述
实际上,还有另一种方法定义变量,特别是连续的变量,我们继续LCD1602的任务,为了快速显示,我们要在内存开辟一块缓冲区(不建议正式程序中使用,无他,内存很宝贵),大小是32个char类型,在上一节中我们介绍了段的声明,我们决定在内存中划一块连续的区域,就像这样
  1. ?DT?LCDMEM SEGMENT DATA
  2.                 PUBLIC LCDMEM
  3.                 RSEG ?DT?LCDMEM
  4.         LCDMEM:
  5.                 DS 32
复制代码

DS就是留出区域,和DB类似,这里不再赘述,可以查看官方文档
至于PUBLIC和标记,我们放在下一节详细叙述


注:针对于ORG等段定位问题在上一个帖子表述错误,我去仔细看了文档,做了一些实验
ORG使用的是一种相当离谱的定位方式,首先它是段内定位,也就是所谓的“相对定位”,它的计数是从上一个SEGMENT标记开始(CSEG在编译时会转换为一个SEGMENT的声明,所以CSEG开头也算一个独立的段),如果没有SEGMENT标记则从0开始,离谱的地方是它直接将前面的内存空间据为己有,也就是说,你如果ORG 0100H,前面0100H都被申请走了,在别的文件里申请这一空白区域的时候会显示被占用的warning
所谓的段和段之间“打架”,确实不会打架(不会报error)
因为它直接覆盖掉了(后面的代码覆盖前面的)……而且最恐怖的是,因为古早写的程序都是这样互相覆盖来复用内存的,所以覆盖本身是没有warning的,最多BL51会给你一个占用的warning……
再加上ORG的离谱特性,你在不同文件内写代码的时候想要利用ORG占用的空间,只能忽略warning,这时候就会根本不清楚有没有覆盖前面或后面的代码……
虽然CSEG也会出现覆盖的情况,但只要保证同一文件内不出现同样的CSEG地址,可以有效避免覆盖的情况(因为会弹warning)
但ORG就不一定了……

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶1 踩
回复

使用道具 举报

板凳
ID:624769 发表于 2024-12-3 21:41 | 只看该作者
定义引脚和定义寄存器其实是一样的,不适合用 EQU。应该用BIT 和 DATA 如果定义 扩展寄存器(XFR) 就用 XDATA
和C 里面不应该用 define 来定义 寄存器一个道理。虽然,现在很多 C 的头文件 用 define 来定义 扩展寄存器,但实际上, 应该用  unsigned char xdata _at_ 0x????  来定义扩展寄存器,起到 “占位” 的作用。

是的, 之所以,不应该用 EQU / define 这些来定义寄存器或者申明变量, 最主要的原因就是 这两样 都不占位。
回复

使用道具 举报

沙发
ID:1127390 发表于 2024-11-30 08:12 | 只看该作者
哦哦哦,这样!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表