新闻  |   论坛  |   博客  |   在线研讨会
AVR汇编学习
0750long | 2010-05-02 22:28:00    阅读:2202   发布文章

 

 

下面是我学的第一篇AVR汇编程序   是控制一个LED灯闪烁 

感觉AVR的汇编指令还可以  

每一句语句都解释得很清楚  

.include "m16def.inc"          ;包括器件配置定义文件,不能缺少
.def temp1=r20                  ;定义寄存器R20用临时变量名temp1代表
.org $0000                         ;上电复位启始地址
rjmp reset                           ;转上电复位后的初始化程序执行
   ;中断向量区
.org $002A                     ;跳过中断向量区
reset: ldi r16,high(RAMEND)    ;取内部RAM最高地址的高位字节
out sph,r16                    ;放入SP的高位
ldi r16,low(RAMEND)            ;取内部RAM最低地址的低位字节
out spl,r16                    ;放入SP的低位,SP中的值见器件配置文件“m16def.inc”
ser temp1                      ;置temp1(R20)为0XFF
out ddrc,temp1                 ;定义PC口为输出
out portc,temp1                ;PC口输出全“1”,LED不亮
ldi r16,197                    ;设置一秒延时参数
loop: cbi portc,0              ;值PORTC.0位为“0”,LED亮
rcall delay                    ;调用延时子程序,延时一秒
sbi portc,0                    ;值PORTC.0位为“1”,LED灭
rcall delay                    ;调用延时子程序,延时一秒
rjmp loop                      ;循环跳转到loop继续执行
  ;通用延时子程序
delay: push r16                ;压栈(2t)
del1: push r16                 ;压栈(2t)
del2: push r16                 ;压栈(2t)
del3: dec r16                  ;r16 = r16 - 1,(1t)
brne del3                      ;不为0跳转移,为0顺序执行(2t/1t)
pop r16                        ;出栈(2t)
dec r16                        ;r16 = r16 - 1,(1t)
brne del2                      ;不为0跳转移,为0顺序执行(2t/1t)
pop r16                        ;出栈(2t)
dec r16                        ;r16 = r16 - 1,(1t)
brne del1                      ;不为0跳转移,为0顺序执行(2t/1t)
pop r16                        ;出栈(2t)
ret                                ;子程序返回(4t)

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客