- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机学习9.1
第九章 AVR C 语言的应用 9 1
第九章 AVR C 语言的应用
更详细资料参阅光盘文件 AVR C 语言的应用
9.1 AVR – 支持 C 和高级语言编程的结构
高级语言
• 提高了 MCU 的重要性–上市的时间
–简化维护工作
–轻便
–学习时间
–可重用性
–库
• 潜在的缺点
–代码大小
–执行速度
为什么 AVR 适宜用高级语言编程?
因为它是为高级语言而设计的!
IAR 对AVR 结构和指令集的影响
• 在结构/指令集确定之前 编译器的开发就开始了
• 潜在的瓶颈得到确认并消除
• IAR 的反馈在硬件设计上得到了反映
• 几次循环反复
• 修改后的结果从代码当中可看出来
Memory system
•32 通用寄存器文件
–数量多
–直接 与ALU 连接
–可保存变量 指针和之间结果
• 线性程序存储空间
– 1KBytes - 8MBytes
–无需页寻址
–常数区(SPM 可修改)
• 线性数据存储空间
– 16 MBytes
–无需页寻址
类似于 C 的寻址模式
C 源代码
unsigned char *var1, *var2;
*var1++ = *--var2;
产生的代码
LD R16,-X
第九章 AVR C 语言的应用 9 2
ST Z+,R16
带偏移量的间接寻址
•有效访问数组和结构
•Auto (local variables)放置于软件堆栈之中
–为适应重入的要求 高级语言都基于堆栈结构
四种指针
16 和 32 位支持
• 加法指令
–加和减
–寄存器之间
–寄存器和立即数之间
–Zero 标志的传播
SUB R16,R24
SUBI R16,1
SBC R17,R25 SBCI R17,0
所有的跳转都基于最后结
果
两个 16 位数相减
第九章 AVR C 语言的应用 9 3
Non-destructive comparison
CP R16,R24
CPC R17,R25
CPC R18,R26
CPC R19,R27
• 带进位比较
• Zero 传播
• 无需保存结果
• 可使用所有形式的跳转
Switch 支持
• Switches 在CASE 语句中经常遇到
• Straight forward approach 效率低
• 间接跳转适合于紧凑的switch 结构
• switch 由通用库管理
摘 要
• AVR 结构从一开始就是针对高级语言设计的
第九章 AVR C 语言的应用 9 4
• Atmel 与IAR 在结构和指令调整上的合作
• 从而编译器可以产生高效的代码
Efficient C-coding for AVR
减少代码的提示和诀窍汇编(Assembly) 与 C 比较
汇编:
• 可以完全控制资源
• 在小应用当中可以产生紧凑的 高速的代码
• 在大的应用当中代码效率低
• 可读性差 Cryptic code
• 不好维护
• 不易移植 Non-portable
C:• 对资源的控制有限
• 在小应中产生的代码量大 执行速度慢
• 在大的应用当中代码效率高
• 结构化的代码
• 容易维护
• 容易移植
访问 I/O
• 读 I/O: temp = PIND;
IN R16,LOW(16)
• 写 I/O: TCCR0 = 0x4F;
LDI R16,79
OUT LOW(51),R16
• I/O 的位设置与清除
• 地址小于 0x1F 的I/O:
PORTB |= (1PIND2);
SBI
文档评论(0)