AVR单片机420100326.ppt
《AVR单片机420100326.ppt》由会员分享,可在线阅读,更多相关《AVR单片机420100326.ppt(35页珍藏版)》请在三一文库上搜索。
1、AVR单片机原理及应用,陈渊睿 Tel: 13002086301 E-mail: 华南理工大学电力学院,第四章,汇编语言程序设计,4.1 汇编语言基础,汇编语言源文件是由汇编语言代码和汇编程序指令所组成的ASCII 字符文件。 汇编语言源文件包括指令助记符、标号和伪指令。指令助记符和伪指令常带操作数 4.1.1 汇编语句格式 程序输入行有下列种形式: 【标号】伪指令【操作数】【注释】。 【标号】指令【操作数】【注释】。 注释。 空行。,例子: Label: .EQU Var1=100 ;置Var1 等于100 伪指令 .EQU Var2=200 ;置Var2 等于200 test: rjmp
2、 test ;无限循环指令 ;纯注释行 注意:不限制有关标号伪指令注释或指令的列位置,4.1.2汇编器伪指令,伪指令并不直接转换成操作数,而是用于调整存储器中程序的位置,定义宏,初始化存储器等,表达式 汇编器的表达式由操作数、运算符和函数组成。所有的表达式内部为32位(二进制) 操作数 (1)用户定义的标号,该标号给出了放置标号位置的定位计数器的值 (2)用户用SET伪指令定义的变量 (3)用户用EQU伪指令定义的常数 (4)整数常数,包括下列几种形式 十进制缺省值10 255 十六进制数二进制表示法0x0a,$0a,0xff.$ff 二进制数0b00001010,0b11111111 (5)
3、PC, 程序存储器定位计数器的当前值,汇编器的函数(而非单片机内的函数) 有LOW、HIGH、BYTE2、BYTE3 汇编器所认的运算符,4.2 简单与分支程序设计,4.2.1 简单程序设计 也称顺序程序或直接程序 .include “m8def.inc” ldi xl,$61 ldi xh,$00 lds r16,$0060 mov r17,r16 andi r16,$0f ori r16,$30 st x+,r16,swap r17 andi r17,$0f ori r17,$30 st x+,r17 here: rjmp here .exit,4.2.1 分支程序设计 又称散转程序 .i
4、nclude “m8def.inc” .SET VAR=0X0070 .SET FUNC=0X0071 .ORG $000 RJMP MAIN .ORG 0X0013 MAIN:LDS R16,VAR TST R16 BREQ DONE BRPL POSI LDI R16,$FF ;R16-1 RJMP DONE,POSI:LDI R16,$01 DONE:STS FUNC,R16 HERE: RJMP HERE .EXIT,4.3 循环与查表程序设计,4.3.1 循环程序设计 例4.9:已知SRAM ADDR($0062)为起始地址的数据块的数据是无符号数,块长在LEN($0061)单元。求
5、最大值并存入MAX($0060)单元 .include “m8def.inc” .SET LEN=$0061 .SET ADDR=$0062 .SET MAX=$0060 .ORG $000 RJMP START .ORG 0X0013 START:LDS R20,LEN CLR R16 LDI XL,LOW(ADDR) LDI XH,HIGH(ADDR) LOOP: LD R18,X+ CP R18,R16,BRCS NEXT ;BRLO MOV R16,R18 NEXT: DEC R20 BRNE LOOP STS MAX,R16 here: rjmp here .exit,例4.9:已知
6、SRAM ADDR($0062)为起始地址的数据块的数据是符号数,块长在LEN($0061)单元。求最大值并存入MAX($0060)单元 .include “m8def.inc” .SET LEN=$0061 .SET ADDR=$0062 .SET MAX=$0060 .ORG $000 RJMP START .ORG 0X0013 START:LDS R20,LEN LDI R16,$80 LDI XL,LOW(ADDR) LDI XH,HIGH(ADDR) LOOP: LD R18,X+ CP R18,R16,BRLT NEXT MOV R16,R18 NEXT: DEC R20 BRN
7、E LOOP STS MAX,R16 here: rjmp here .exit,4.3.2 查表程序设计 用于不便于计算的函数(如平方、立方、三角函数)、固定的编码(如ASCII码、数码管显示)等,表格存于FLASH中,用LPM指令来取出对应项的值 例:设SRAM的0x60开始的40个单元字节存放有40个取值为09的二进制整数。将它们求平方值后存放到SRAM的0x100开始的存储区。 .include “m8def.inc” rjmp Main Tab: .db 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 Main: ldi yl, 0x00 ;SRAM存储基址 l
8、di yh, 0x01 ldi xl, 0x60 ;SRAM取数基址 ldi xh, 0x00 ldi r18, 40 ;计数用 loop: ld r16, x+ ;从SRAM取数,地址增1,ldi zl, low(Tab*2) ldi zh, high(Tab*2) clr r17 add zl, r16 adc zh,r17 lpm ;查平方值 st y+, r0 ;保存到SRAM并且地址增1 dec r18 ;计数减1 brne loop ;未查完,循环 HERE: RJMP HERE .EXIT,例4.13:已知SRAM中起始地址为BLOCK1的数据块(其长度存放在LEN单元),每个存
9、储单元中高、低4位为两个十六进制数,将它们转换为ASCII码后存放在BLOCK2开始的连续存储单元。 .include “m8def.inc” .SET LEN=$0060 .SET BLOCK1=$0061 .SET BLOCK2=$0168 .ORG $000 RJMP MAIN .ORG 0X0013 MAIN: LDS R25,LEN LDI XL,LOW(BLOCK1) LDI XH,HIGH(BLOCK1) LDI YL,LOW(BLOCK2) LDI YH,HIGH(BLOCK2) LOOP: LDI ZL,LOW(ASTAB*2) LDI ZH,HIGH(ASTAB*2) CL
10、R R18 LD R17,X,ANDI R17,$0F ADD ZL,R17 ADC ZH,R18 LPM R17,Z ST Y+,R17 LD R17,X+ ANDI R17,$F0 SWAP R17 LDI ZL,LOW(ASTAB*2) LDI ZH,HIGH(ASTAB*2) ADD ZL,R17 ADC ZH,R18 LPM R17,Z ST Y+,R17 DEC R25 BRNE LOOP HERE:RJMP HERE ASCTAB:.DB $30,$31,$39 .DB $41,$42,$46,4.4 代码转换与子程序设计,4.4.1 子程序设计 子程序:完成确定任务、反复调用
11、入口地址(第一条指令地址,常用标号) 返回(RET) 状态保护(如SREG等) 参数传递(R0R31,或者堆栈方式) 例4.15 SRAM中HEX单元的两个十六进制数,分别转成ASCII码存入ASC和ASC+1单元 .INCLUDE “M8DEF.INC” .SET HEX=$0060 .SET ASC=$0061 LDI R17,LOW(RAMEND) OUT SPL,R17 LDI R17,HIGH(RAMEND) OUT SPH,R17,LDS R16,HEX PUSH R16 RCALL HASC POP R16 STS ASC,R16 LDS R16,HEX SWAP R16 PUS
12、H R16 RCALL HASC POP R16 STS ASC+1,R16 HERE:RJMP HERE,HASC:POP R16 POP R16 POP R16 ANDI R16,$0F LDI ZL,LOW(ASCTAB*2) LDI,ZH,HIGH(ASCTAB*2) ADD ZL,R16 LPM R16,Z PUSH R16 IN R16,SPL SBCI R16,2 OUT SPL,R16 RET ASCTAB:.DB $30,$31,$39 .DB $41,$42,$46,4.4.2代码转换子程序,BCD码(Binary-Coded Decimal),用二进制编码的十进制代码。这
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AVR 单片机 420100326
链接地址:https://www.31doc.com/p-2889885.html