紫外工控论坛

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 3371|回复: 0

AVR汇编学习(1)

[复制链接]
冰糖 发表于 2010-7-3 15:54:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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

  2.   感觉AVR的汇编指令还可以

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

  4.   .include "m16def.inc" ;包括器件配置定义文件,不能缺少

  5.   .def temp1=r20 ;定义寄存器R20用临时变量名temp1代表

  6.   .org $0000 ;上电复位启始地址

  7.   rjmp reset ;转上电复位后的初始化程序执行

  8.   ;中断向量区

  9.   .org $002A ;跳过中断向量区

  10.   reset: ldi r16,high(RAMEND) ;取内部RAM最高地址的高位字节

  11.   out sph,r16 ;放入SP的高位

  12.   ldi r16,low(RAMEND) ;取内部RAM最低地址的低位字节

  13.   out spl,r16 ;放入SP的低位,SP中的值见器件配置文件“m16def.inc”

  14.   ser temp1 ;置temp1(R20)为0XFF

  15.   out ddrc,temp1 ;定义PC口为输出

  16.   out portc,temp1 ;PC口输出全“1”,LED不亮

  17.   ldi r16,197 ;设置一秒延时参数

  18.   loop: cbi portc,0 ;值PORTC.0位为“0”,LED亮

  19.   rcall delay ;调用延时子程序,延时一秒

  20.   sbi portc,0 ;值PORTC.0位为“1”,LED灭

  21.   rcall delay ;调用延时子程序,延时一秒

  22.   rjmp loop ;循环跳转到loop继续执行

  23.   ;通用延时子程序

  24.   delay: push r16 ;压栈(2t)

  25.   del1: push r16 ;压栈(2t)

  26.   del2: push r16 ;压栈(2t)

  27.   del3: dec r16 ;r16 = r16 - 1,(1t)

  28.   brne del3 ;不为0跳转移,为0顺序执行(2t/1t)

  29.   pop r16 ;出栈(2t)

  30.   dec r16 ;r16 = r16 - 1,(1t)

  31.   brne del2 ;不为0跳转移,为0顺序执行(2t/1t)

  32.   pop r16 ;出栈(2t)

  33.   dec r16 ;r16 = r16 - 1,(1t)

  34.   brne del1 ;不为0跳转移,为0顺序执行(2t/1t)

  35.   pop r16 ;出栈(2t)

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

本版积分规则


--------------------------------------------------------------------------------------------------------------------
本站是工控技术交流站点,论坛内容均为网络收集或会员所发表,并不代表本站立场,会员拥有该内容的所有权力及责任!
本站内容如有侵犯您的版权,请按下面方式联系本站管理员,我们将及时删除处理
管理员:冰糖 QQ:5483695(请直击主题), Mail:admin#ziwai.net(#改成@) 其它非本人.
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论!

QQ|Archiver|手机版|小黑屋|紫外工控论坛. ( 苏ICP备11032118号-1 )

GMT+8, 2024-5-3 18:04 , Processed in 0.375000 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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