avr宏汇编和表达式

发布者:科技狂人最新更新时间:2019-11-15 来源: 51hei关键字:avr  宏汇编  表达式 手机看文章 扫描二维码
随时随地手机看文章

汇编器提供一些伪指令伪指令并不直接转换成操作数而是用于调整存储器中程序的位置

定义宏初始化存储器等全部伪指令在表4.2 中给出


1 BYTE 保存字节到变量

BYTE 伪指令保存存储的内容到SRAM 中为了能提供所要保存的位置BYTE 伪指令前应有

标号该伪指令带一个表征被保存字节数的参数该伪指令仅用在数据段内见伪指令CSEG DSEG

和ESEG 注意必须带一个参数字节数的位置不需要初始化

语法LABEL BYTE 表达式


2 CSEG 一代码段

CSEG 伪指令定义代码段的开始位置一个汇编文件包含几个代码段这些代码段在汇 编时

被连接成一个代码段在代码段中不能使用BYTE 伪指令典型的缺省段为代码段代码段有一个

字定位计数器ORG 伪指令用于放置代码段和放置程序存储器指定位置的常数

CSEG 伪指令不带参数

语法CSEG


表4.2 伪指令表

序号 伪指令 说 明 序号 伪指令 说 明

1 BYTE 保存字节到变量 10 ESEG E2PROM 段

2 CSEG 代码段 11 EXIT 退出文件

3 DB 定义字节常数 12 INCLUDE 从指定文件开始读

4 DEF 设置寄存器的符号名 13 LIST 打开列表文件

5 DEVICE 定义被汇编的器件 14 LISTMAC 打开宏表达式

6 DSEG 数据段 15 MACRO 宏开始

7 DW 定义字常数 16 NOLIST 关闭列表文件

8 ENDMACRO 宏结束 17 ORG 设置程序起始位置

9 EQU 符号相等于表达式 18 SET 赋值给一个标号

3 DB 在程序存储器或E2PROM 存储器中定义字节常数


DB 伪指令保存数据到程序存储器或E2PROM 存储器中为了提供被保存的位置在DB 伪指令

前必须有标号DB 伪指令可带一个表达式表至少有一个表达式DB 伪指令必须放在代码段或

E2PROM 段表达式表是一系列表达式用逗号分隔每个表达式必须是一128 255 之间的有效值

如果表达式有效值是负数则用8 位2 的补码放在程序存储器或E2PROM 存储器中如果DB 伪指令用在代码段并且表达式表多于一个表达式则以两个字节组合成一个字放在程序存储器中如果表达式表是奇数那么最后一个表达式将独自以字格式放在程序存储器中而不管下一行汇编代码是否是单个DB 伪指令

语法LABEL DB 表达式


4 DEF 设置寄存器的符号名

DEF 伪指令允许寄存器用符号代替一个定义的符号用在程序中并指定一个寄存器,一个寄

存器可以赋几个符号符号在后面程序中能再定义

语法DEF 符号一寄存器


5 DEVICE 定义被汇编的器件

DEVICE 伪指令允许用户告知汇编器被执行的代码使用那种器件如果使用该伪指令若在代

码中有指定的器件不提供的指令则提示一个警告如果代码段或E2PROM 段的尺寸大于被指定器件的尺寸也提示警告如果不使用DEVICE 伪指令则假定器件提供所有的指令也不限制存储

器尺寸

语法 .DEVICE AT90S1200 AT90S2313 AT90S4414 AT9OS8515


6 DSEG 一数据段

DSEG 伪指令定义数据段的开始一个汇编文件能包含几个数据段这些数据段在汇编时

被连接成一个数据段一个数据段正常仅由BYTE 伪指令和标号组成数据段有自己的定

位字节计数器ORG 伪指令被用于在SRAM 指定位置放置变量DSEG 伪指令不带参数

语法 .DSEG


7 DW——在程序存储器和E2PROM 存储器中定义字常数

DW 伪指令保存代码到程序存储器或E2PROM 存储器为了提供被保存的位置在DW 伪指

令前必须有标号DW 伪指令可带一个表达式表至少有一个表达式DW 伪指令必须放在

代码段或E2PROM 段表达式表是一系列表达式用逗号分隔每个表达式必须是一32 768

65 535 之间的有效值如果表达式有效值是负数则用 16 位2 的补码放在程序存储器中 

语法LABEL .DW 表达式表


8·ENDMACRO 一宏结束

ENDMACRO 伪指令定义宏定义的结束该伪指令并不带参数参见MACRO 宏定义伪指令

语法 .ENDMACRO


9 EQU——设置一个符号相等于一个表达式

EQU 伪指令赋一个值到标号该标号用于后面的表达式用EQU 伪指令赋值的标号是一个

常数不能改变或重定义

语法 .EQU 标号= 表达式


10 ESEG - E2PROM 段

ESEG 伪指令定义E2PROM 段的开始位置一个汇编文件包含几个E2PROM 段这些E2PROM

段在汇编时被连接成一个E2PROM 段在E2PROM 段中不能使用BYTE 伪指令E2PROM 段有一

个字节定位计数器ORG 伪指令用于放置E2PROM 存储器指定位置的常数ESEG 伪指令不带参数

语法 .ESEG


11 EXIT——退出文件

EXIT 伪指令告诉汇编器停止汇编该文件正常情况下汇编器汇编到文件的结束如果

EXIT 出现在包括文件中则汇编器从文件中INCLUDE 伪指令行继续汇编

语法 .EXIT


12·INCLUDE——包括另外的文件

INCLUDE 伪指令告诉汇编器从指定的文件开始读然后汇编器汇编指定的文件直到文件

结束或遇到EXIT 伪指令一个包括文件也可能自己用INCLUDE 伪指令来表示

语法 .INCLUDE“文件名”


13 LIST——打开列表文件生成器

LIST 伪指令告诉汇编器打开列表文件生成器汇编器生成一个汇编源代码地址和操作

代码的文件列表列表文件生成器缺省值是打开该伪指令总是与NOLIST 伪指令一起出现

用于生成列表或汇编源文件有选择的列表

语法 .LIST


14 LISTMAC——打开宏表达式

LISTMAC 伪指令告诉汇编器当调用宏时用列表生成器在列表文件中显示宏表达式

缺省值仅是在列表文件中显示宏调用参数

语法 .LISTMAC


15 MACRCO 一宏开始

MACRO 伪指令告诉汇编器这是宏开始MACRO 伪指令带宏名和参数当后面的程序中写

了宏名被表达的宏程序在指定位置被调用一个宏可带10 个参数这些参数在宏定义中

用0 9 代表当调用一个宏时参数用逗号分隔宏定义用ENDMACRO 伪指令结束

缺省值为汇编器的列表生成器仅列表宏调用为了在列表文件中包括宏表达式必须使

用 LISTMAC 伪指令在列表文件的操作代码域内宏用 a+ 作记号

语法 .MACRO 宏名


16 NOLIST--关闭列表文件生成器

NOLIST 伪指令告诉汇编器关闭列表文件生成器正常情况下汇编器生成一个汇编源

代码地址和操作代码文件列表缺省时为打开列表文件但是可用该伪指令禁止列表为

了使被选择的汇编源文件部分产生列表文件该伪指令可以与LIST 伪指令一起使用

语法 .NOLIST


17 ORG 一设置程序起始位置

ORG 伪指令设置定位计数器一个绝对值设置的值为一个参数如果ORG 伪指令放在数

据段则设置SRAM 定位计数器如果该伪指令放在代码段则设置程序存储器计数器如

果该伪指令放在E2PROM 段则设置E2PROM 定位计数器如果该伪指令前带标号在相同

的源代码行则标号由参数值给出代码和E2PROM 定位计数器的缺省值是零而当汇编启

动时 SRAM 定位计数器的缺省值是32 因为寄存器占有地址为 0 31 注意E2PROM 和

SRAM 定位计数器按字节计数而程序存储器定位计数器按字计数

语法 .ORG 表达式


18 SET 设置一个与表达式相等的符号

SET 伪指令赋值给一个标号这个标号能用在后面的表达式中用SET 伪指令赋值的

标号在后面的程序中能改变

语法 .SET 标号 = 表达式


4 ·1 3 表达式

汇编器包括一些表达式表达式由操作数运算符和函数组成所有的表达式内部为32

一操作数

1 用户定义的标号该标号给出了放置标号位置的定位计数器的值

2 用户用SET 伪指令定义的变量

3 用户用EQU 伪指令定义的常数

4 整数常数包括下列几种形式

·十进制缺省值 10 255

·十六进制数二进制表示法0x0a,$0a,0xff.$ff

二进制数0b0O00101O,0bllllllll


5 PC 程序存储器定位计数器的当前值

二 函 数

1 LOW 表达式返回一个表达式的低字节

2 HIGH 表达式返回一个表达式的第二个字节

3 BYTE2 表达式与HIGH 函数相同

4 BYTE3 表达式返回一个表达式的第三个字节

5 BYTE4 表达式返回一个表达式的第四个字节

6 LWRD 表达式返回一个表达式的 0 15 位

(7) HWRD 表达式返回一个表达式的 16 31 位

8 PAGE 表达式返回一个表达式的 16 21 位

9 EXP2 表达式返回2 表达式

10 LOG2 表达式返回LOG2 表达式的整数部分


关键字:avr  宏汇编  表达式 引用地址:avr宏汇编和表达式

上一篇:avr单片机的内部结构
下一篇:avr单片机使用注意点

推荐阅读最新更新时间:2024-11-13 11:26

如何利用AVR单片机实现AT24C256的数据高速稳定的读取
最近刚买回一块AT24C256 EEPROM ,容量为32K Byte ,数据地址宽度为 16Bit ,支持IIC 1M (5V)400K (2.7V) 速度模式 ,利用AVR M16 片内IIC 可以高速稳定地读取数据! 经过调试的,与各位大虾分享分享。 程序如下:(winavr) #include #include #include #include #define FREQ 8 #include #include #include #define uchar unsigned char #define uint unsigned int #define ulong unsigned long //管脚定义 #defin
[单片机]
如何利用<font color='red'>AVR</font>单片机实现AT24C256的数据高速稳定的读取
8051、AVR和ARM的关系及实际情况
今天有位爱好者朋友希望我可以推出AVR和ARM的视频教程,我说ARM的视频可以录录看,不过AVR已经没有必要讲。我说AVR不必要让这位朋友很是不解。是呀,还有许多爱好者朋友都会有疑问,这是我们这个行业的广告宣传和死板教学方式所造成的。这里我花一点时间简单聊一聊8051、AVR和ARM之间的关系,及它们在行业市场中的实际情况。一家之言,一定有不足和偏激,仅供大家参考。 首先,我们先来谈谈我们对8051、AVR、ARM或其它单片机的现有印象是怎么来的。主要的来源其实有两种,来自于网络上关于芯片的介绍,来自书架上芯片的教学书籍。主要都是一些官话、套话,什么具有精简指令集、增加了多个定时器、更快的速度、价格更低,更适合工业设备开发之类。
[单片机]
AVR开发 Arduino方法(三) 定时/计数器子系统
Arduino UNO R3的主处理器ATMega328P拥有3个定时/计数器,它们分别是Timer0,Timer1和Timer2;它们都通过对来自内部或外部的脉冲信号进行计数的方式完成基本的定时/计数功能以及一些其他的功能。 Timer0和Timer2是8位定时/计时器,Timer1是16位定时/计数器;下面以Timer2为例讨论定时/计数器子系统的典型应用,这些内容同样适用于Timer0和Timer1。 1. 精准延时 在前面的例子中,已经使用了一些与精准延时相关的Arduino库函数:   delay(ms):延迟一段时间   ms:延迟的时长,单位是毫秒 请注意,上面的Arduino库函数使用了Timer0的中
[单片机]
<font color='red'>AVR</font>开发 Arduino方法(三) 定时/计数器子系统
74HC595 74HC165程序例子(AVR)
硬件说明:ATmega48/88/168的PB5是SPI时钟输出,接74HC595/74HC165的移位时钟输入端;PB4是SPI的MISO数据输人,接74HC165的数据输出;PB3是SPI的MOSI数据输出,接74HC595的串行数据输入端SER;PB2接74HC595/74HC165的锁存时钟输入端。 程序1:本例子是用硬件SPI接口循环发送一个变量到74HC595,并且在数据发送完毕后通过 单片机 的另外一个IO接口PB2输出一个 锁存 脉冲 ,使74HC595把移位寄存器的数据输出到锁存寄存器,并驱动8个LED输出,实现来回流水的效果。 //本程序在本站的 M8 V2.0 实验板 通过 // CodeWizard A
[单片机]
AVR单片机定时/计数器学习笔记(二)
定时/计数器1(16位)有普通模式、CTC模式、快速PWM模式、相位修正PWM模式等工作模式。 2.CTC模式(需要用到OC1A、OC1B两个引脚) 应用:用于产生占空比为50%的方波信号 ( N为分频系数 ) 需要配置的寄存器:T/C1控制寄存器A(TCCR1A)、T/C1控制寄存器B(TCCR1B)、输出比较寄存器1A(OCR1A)。 (1)TCCR1A的bit7、bit6用于设置OC1A脚的比较输出模式,bit5、bit4用于设置OC1B脚的比较输出模式。(此处我们都设为,比较匹配时OC1A、OC1B电平取反) (2)TCCR1B的bit4、
[单片机]
<font color='red'>AVR</font>单片机定时/计数器学习笔记(二)
AVR第5课:蜂鸣器
span style= font-size:18px; /* *info:buzzer *author:chenlu *date:2014.11.20 */ //input the head file so that the program can work normally //iom16v---know the register //macros---know the BIT(x) #include iom16v.h #include macros.h //use those can make your study very conveninet #define uint unsigned int #define uc
[单片机]
linux下avr单片机开发:中断服务程序
不管是什么单片机程序,中断总是非常重要的一部分 ,linux 下的avr开发,主要是依靠avr-gcc,以及avr-libc,它们对中断程序的格式要求,与window下的icc-avr以及win-avr有所差异,这里对linux下中断服务程序编写做个简要介绍。 首先是要引入的库: #include avr/io.h #include avr/interrupt.h 这两个是中断程序所要用到的,中断程序的编写位置,只要是在工程里的某个c文件里面就可以了。 具体格式: ISR(INT1_vect) { //...................................// } 其中的INT1
[单片机]
基于ATMEL AVR单片机的居家安全卫士系统实现,附软硬件架构
1.设计方案目标: 智能居家安全卫士系统是利用先进的计算机技术、综合布线技术、依照人体工程学原理,融合个性需求,将与家居生活有关的各个子系统有机地结合在一起,实现“以人为本”的全新家居生活体验。高性能ATMEL最新MCU及Xmega和UC3系列产品是基于设计出一款高处理性能和低功耗功能的内核而开发的产品。此系列继承ATMEL家族优良基础。基于ATMEL最新MCU及Xmega和UC3系列产品为控制芯片的居家安全卫士(MI—home),以“方便、舒适、享受、超前、舒心”为主题,我们设计了以下几个模块:“非接触式IC刷卡门禁模块”、“防盗防火报警模块”、“安全控电模块”、“空气质量检测模块”、“温湿度检测模块”、“GSM无线通信模块”、
[电源管理]
基于ATMEL <font color='red'>AVR</font>单片机的居家安全卫士系统实现,附软硬件架构
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved