avr单片机实验-实验三.docxVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验三、汇编语言程序设计电气工程及其自动化2班李钦豪 18号源程序要求:把Flash中地址为0x003开始的20个字单元内的代码作为20个16位二进制符号数,将它们分别取绝对值后存储到SRAM中,要求低字节在前,高字节在后。设SRAM中有个起始地址为$0061的数据块(块长放在$0060单元),数据块内每个存储单元含有两个十六进制数(高4位和低4位),试分别求出这些十六进制数的ASCII码,放在SRAM中以$0163为起始地址的存储区,要求低4位数的ASCII码在前,高4位数的ASCII码在后。指令应用课件例子中如将“求最大值”改为“求最小值”(分别考虑符号数和无符号数),程序如何修改?设SRAM中0x0060和0x0061单元存储的是一个16位二进制数(0x0061为高字节),试调用代码转换子程序和延时子程序,把这个数转换成十进制数(BCD码),并把其万、千、百、十、个位用一个数码管轮流显示出来,每位显示时间约1秒钟(画电路图、编程、调试、Proteus仿真、下载到实验板进行验证) 。实验要求:主程序中一定要初始化堆栈指针。求绝对值、代码转换、延时采用子程序调用的方式。调试方法:单步执行(Step Into)、单步越过子程序(Step Over)、跳出子程序(Step Out)、设断点执行、运行到光标处等。观察:寄存器(Register)窗口、存储器(Memory)窗口、处理器(Processor)窗口。留意每条指令执行后PC值、运行时间、相关寄存器或存储器的内容,特别注意调用子程序及子程序返回时PC、SP及堆栈区的内容。(数码管显示实验中,Proteus电路图应与实验板接线一致,以便对比)。实验源程序及调试结果1.;**********符号数求绝对值**********.include m8def.inc.equ flashadr=$003;符号数存放起始地址.equ len=20;块长.equ sramadr=$0060;绝对值存放起始地址.org $0000rjmp main.org $003;定义flash中20个字单元的内容.dw -900,-800,-700,-600,-500,-400,.dw-300,-200,-100, 0,100,200,300.dw400,500,600,700,800,900,0main:;设置堆栈指针ldi r16,low(ramend)out spl,r16ldi r16,high(ramend)out sph,r16ldi zl,low(flashadr*2)ldi zh,high(flashadr*2)ldi yl,low(sramadr)ldi yh,high(sramadr)ldi r18,lenstart:lpm r16,z+lpm r17,z+tst r17brpl plus;正数直接存储,负数先求绝对值再存rcall changeplus:st y+,r16st y+,r17dec r18brne starthere:rjmp here;负数(补码)求绝对值的子程序change:subi r16,1sbci r17,0com r16com r17ret调试结果如下:2.;*******十六进制数转ASCII码*******.include m8def.inc.set lenadr=$0060;存放块长的单元.set sramadr=$0061;16进制数存放起始地址.set sramadr2=$0163;ascii码存放起始地址.org $0000rjmp main.org $0003;要存放在sram中的数.db $12,$34,$56,$78,$90,$ab,$cd,$ef;ascii码表tab:.db$30,$31,$32,$33,$34,$35,$36,$37.db $38,$39,$41,$42,$43,$44,$45,$46main:;设置堆栈指针ldi r16,low(ramend)out spl,r16ldi r16,high(ramend)out sph,r16ldi zl,low($0003*2)ldi zh,high($0003*2)ldi yl,low(sramadr)ldi yh,high(sramadr)ldi r17,8sts lenadr,r17lds r1,lenadr;把数从flash里面取出来存到sram里getdata:lpm r0,z+st y+,r0dec r1brne getdata;把数从sram中读出再转成ascii码,;并存到相应的sram地址中ldi yl,low(sramadr)ldi yh,high(sramadr)ldi xl,low(sramadr2)ldi xh,high(sramadr2)lds r1,

您可能关注的文档

文档评论(0)

1243595614 + 关注
实名认证
文档贡献者

文档有任何问题,请私信留言,会第一时间解决。

版权声明书
用户编号:7043023136000000

1亿VIP精品文档

相关文档