AVR单片机4_20100326.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《AVR单片机4_20100326.ppt》由会员分享,可在线阅读,更多相关《AVR单片机4_20100326.ppt(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、AVR单片机原理及应用陈渊睿Tel:13002086301E-mail:华南理工大学电力学院第四章汇编语言程序设计4.1 汇编语言基础汇编语言基础汇编语言汇编语言源文件源文件是由汇编语言代码和汇编是由汇编语言代码和汇编程序指令所组成的程序指令所组成的ASCII 字符文件。字符文件。汇编语言源文件包括汇编语言源文件包括指令助记符指令助记符、标号标号和和伪指令伪指令。指令助记符和伪指令常带。指令助记符和伪指令常带操作数操作数4.1.1 汇编汇编语句格式语句格式程序输入行有下列种形式:程序输入行有下列种形式:【标号标号】伪指令伪指令【操作数操作数】【】【注释注释】。【标号标号】指令指令【操作数操作数
2、】【】【注释注释】。注释。注释。空行。空行。例子:例子:Label:.EQU Var1=100;置置Var1 等于等于100 伪指令伪指令 .EQU Var2=200;置置Var2 等于等于200test:rjmp test;无限循环指令无限循环指令 ;纯注释行纯注释行注意:不限制有关标号伪指令注释或指令的注意:不限制有关标号伪指令注释或指令的列位置列位置4.1.2汇编器伪指令伪指令伪指令并不直接转换成操作数,而是用于调整存储并不直接转换成操作数,而是用于调整存储器中程序的位置,定义宏,初始化存储器等器中程序的位置,定义宏,初始化存储器等伪伪指令表指令表序号序号伪伪指令指令说说 明明序号序号伪
3、伪指令指令说说 明明1 1BYTEBYTE在在RAMRAM中定中定义预义预留存留存储单储单元元1010EXITEXIT退出文件退出文件2 2CSEGCSEG声明代声明代码码段段1111INCLUDEINCLUDE包含指定的文件包含指定的文件3 3DBDB定定义义字字节节常数常数1212MACROMACRO宏定宏定义义开始开始4 4DEFDEF定定义义寄存器符号名寄存器符号名1313ENDMACROENDMACRO宏定宏定义结义结束束5 5DEVICEDEVICE指定指定为为何器件生成何器件生成汇编汇编代代码码1414LISTMACLISTMAC列表宏表达式列表宏表达式6 6DSEGDSEG声明
4、数据段声明数据段1515LISTLIST列表文件生成允列表文件生成允许许器器7 7DWDW定定义义字常数字常数1616NOLISTNOLIST关关闭闭列表文件生成列表文件生成8 8EQUEQU定定义标识义标识符常量符常量1717ORGORG设设置程序起始位置置程序起始位置9 9ESEGESEG声明声明E E2 2PROMPROM段段1818SETSET赋值给标识赋值给标识符符表达式汇编器的表达式汇编器的表达式由操作数、运算符和函数组成。由操作数、运算符和函数组成。所有的表达式内部为所有的表达式内部为32位位(二进制二进制)操作数操作数(1)用户定义的标号,该标号给出了放置标号位置的用户定义的标
5、号,该标号给出了放置标号位置的定位计数器定位计数器的值的值(2)用户用用户用SET伪指令定义的变量伪指令定义的变量(3)用户用用户用EQU伪指令定义的常数伪指令定义的常数(4)整数常数,包括下列几种形式整数常数,包括下列几种形式十进制缺省值十进制缺省值10 255十六进制数二进制表示法十六进制数二进制表示法0 x0a,$0a,0 xff.$ff二进制数二进制数0b00001010,0b11111111(5)PC,程序存储器定位计数器的当前值程序存储器定位计数器的当前值汇编器的函数(而非单片机内的函数而非单片机内的函数)有LOW、HIGH、BYTE2、BYTE3汇编器所认的运算符部分运算符表部分
6、运算符表序序 号号 运算符运算符名名 称称优优先先级级说说 明明1 1!逻辑逻辑非非1414单单目运算符,表达式是目运算符,表达式是0 0则则返回返回1 1,表达式是表达式是1 1则则返回返回0 02 2逐位非逐位非1414单单目运算符,将表达式的目运算符,将表达式的值值按位取反按位取反3 3-负负号号1414单单目运算符,使表达式目运算符,使表达式为为算算术负术负4 4*乘法乘法1313双目运算符,两个表达式相乘双目运算符,两个表达式相乘5 5/除法除法1313双目运算符,左双目运算符,左边边表达式除以右表达式除以右边边表达式,表达式,得整数的商得整数的商值值6 6+加法加法1212双目运算
7、符,两个表达式相加双目运算符,两个表达式相加7 7减法减法1212双目运算符,左双目运算符,左边边表达式减去右表达式减去右边边表达式表达式8 8右移右移1111双目运算符,左双目运算符,左边边表达式表达式值值右移右右移右边边表达式表达式给给出的次数出的次数1010 小于小于1010双目运算符,左双目运算符,左边带边带符号表达式符号表达式值值小于小于右右边带边带符号表达式符号表达式值值,则为则为1 1,否,否则为则为0 01111=大于大于1010双目运算符,左双目运算符,左边带边带符号表达式符号表达式值值大于大于右右边带边带符号表达式符号表达式值值,则为则为1 1,否,否则为则为0 01313
8、=大于等于大于等于1010双目运算符,左双目运算符,左边带边带符号表达式符号表达式值值大于或大于或等于右等于右边带边带符号表达式符号表达式值值,则为则为1 1,否,否则为则为0 01414=等于等于9 9双目运算符,左双目运算符,左边带边带符号表达式符号表达式值值等于等于右右边带边带符号表达式符号表达式值值,则为则为1 1,否,否则为则为0 01515!=不等于不等于9 9双目运算符,左双目运算符,左边带边带符号表达式符号表达式值值不等于不等于右右边带边带符号表达式符号表达式值值,则为则为1 1,否,否则为则为0 01616&逐位与逐位与8 8双目运算符,两个表达式双目运算符,两个表达式值值之
9、之间间逐位与逐位与1717 逐位异或逐位异或7 7双目运算符,两个表达式双目运算符,两个表达式值值之之间间逐位异或逐位异或1818|逐位或逐位或6 6双目运算符,两个表达式双目运算符,两个表达式值值之之间间逐位或逐位或1919&逻辑逻辑与与5 5双目运算符,两个表达式双目运算符,两个表达式值值之之间逻辑间逻辑与,与,全非全非0 0则为则为1 1,否,否则为则为0 02020|逻辑逻辑或或4 4双目运算符,两个表达式双目运算符,两个表达式值值之之间逻辑间逻辑或,或,非非0 0则为则为1 1,全,全0 0为为0 04.2 简单与分支程序设计简单与分支程序设计4.2.1 简单程序设计简单程序设计也称
10、也称顺序程序顺序程序或或直接程序直接程序.include.include“m8def.incm8def.inc”ldildi xl,$61 xl,$61ldildi xh,$00 xh,$00ldslds r16,$0060 r16,$0060movmov r17,r16 r17,r16andiandi r16,$0f r16,$0foriori r16,$30 r16,$30stst x+,r16 x+,r16swap r17swap r17andiandi r17,$0f r17,$0foriori r17,$30 r17,$30stst x+,r17 x+,r17here:here:rj
11、mprjmp here here.exit.exit4.2.1 分支程序设计分支程序设计又称又称散转程序散转程序.include.include“m8def.incm8def.inc”.SET VAR=0X0070.SET VAR=0X0070.SET FUNC=0X0071.SET FUNC=0X0071.ORG$000.ORG$000RJMP MAINRJMP MAIN.ORG 0X0013.ORG 0X0013MAIN:LDS R16,VARMAIN:LDS R16,VARTST R16TST R16BREQ DONEBREQ DONEBRPL POSIBRPL POSILDI R16,
12、$FF;R16LDI R16,$FF;R16-1-1RJMP DONERJMP DONEPOSI:LDI R16,$01POSI:LDI R16,$01DONE:STS FUNC,R16DONE:STS FUNC,R16HERE:HERE:RJMP HERERJMP HERE.EXIT.EXIT4.3 循环与查表程序设计循环与查表程序设计4.3.1 循环程序设计循环程序设计例例4.9:已知:已知SRAM ADDR($0062)为起始地址的数据块的数为起始地址的数据块的数据是据是无符号数无符号数,块长在,块长在LEN($0061)单元。求最大值并存单元。求最大值并存入入MAX($0060)单元单
13、元.include.include“m8def.incm8def.inc”.SET LEN=$0061.SET LEN=$0061.SET ADDR=$0062.SET ADDR=$0062.SET MAX=$0060.SET MAX=$0060.ORG$000.ORG$000RJMP STARTRJMP START.ORG 0X0013.ORG 0X0013START:LDS R20,LENSTART:LDS R20,LENCLR R16CLR R16LDI XL,LOW(ADDR)LDI XL,LOW(ADDR)LDI XH,HIGH(ADDR)LDI XH,HIGH(ADDR)LOOP:
14、LOOP:LD R18,X+LD R18,X+CP R18,R16CP R18,R16BRCSBRCS NEXT NEXT;BRLOMOV R16,R18MOV R16,R18NEXT:NEXT:DEC R20DEC R20BRNE LOOPBRNE LOOPSTS MAX,R16STS MAX,R16here:here:rjmprjmp here here.exit.exit例例4.9:已知:已知SRAM ADDR($0062)为起始地址的数为起始地址的数据块的数据是据块的数据是符号数符号数,块长在,块长在LEN($0061)单元。单元。求最大值并存入求最大值并存入MAX($0060)单元单
15、元.include.include“m8def.incm8def.inc”.SET LEN=$0061.SET LEN=$0061.SET ADDR=$0062.SET ADDR=$0062.SET MAX=$0060.SET MAX=$0060.ORG$000.ORG$000RJMP STARTRJMP START.ORG 0X0013.ORG 0X0013START:LDS R20,LENSTART:LDS R20,LENLDI R16,$80LDI R16,$80LDI XL,LOW(ADDR)LDI XL,LOW(ADDR)LDI XH,HIGH(ADDR)LDI XH,HIGH(AD
16、DR)LOOP:LOOP:LD R18,X+LD R18,X+CP R18,R16CP R18,R16BRLTBRLT NEXT NEXTMOV R16,R18MOV R16,R18NEXT:NEXT:DEC R20DEC R20BRNE LOOPBRNE LOOPSTS MAX,R16STS MAX,R16here:here:rjmprjmp here here.exit.exit4.3.2 查表程序设计查表程序设计用于用于不便于计算的函数不便于计算的函数(如平方、立方、三角函数如平方、立方、三角函数)、固定的固定的编码编码(如如ASCII码、数码管显示码、数码管显示)等,表格存于等,表格存
17、于FLASH中,用中,用LPM指令来取出对应项的值指令来取出对应项的值例:设例:设SRAM的的0 x60开始的开始的40个单元字节存放有个单元字节存放有40个取值为个取值为09的二进制整数。将它们求平方值后存放到的二进制整数。将它们求平方值后存放到SRAM的的0 x100开始的存储区。开始的存储区。.include“m8def.inc”rjmp MainTab:.db 0,1,4,9,16,25,36,49,64,81Main:ldi yl,0 x00 ;SRAM存储基址存储基址ldi yh,0 x01ldi xl,0 x60 ;SRAM取数基址取数基址ldi xh,0 x00ldi r18,
18、40 ;计数用计数用loop:ld r16,x+;从从SRAM取数,地址增取数,地址增1ldi zl,low(Tab*2)ldi zh,high(Tab*2)clr r17add zl,r16adc zh,r17lpm ;查平方值查平方值st y+,r0 ;保存到保存到SRAM并且地址增并且地址增1dec r18 ;计数减计数减1brne loop ;未查完,循环未查完,循环HERE:RJMP HERE.EXIT例例4.13:已知:已知SRAM中起始地址为中起始地址为BLOCK1的数据块(其长度的数据块(其长度存放在存放在LEN单元),每个存储单元中高、低单元),每个存储单元中高、低4位为两个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AVR 单片机 _20100326
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内