第2个回答 2019-03-28
如果你是采用C进行编程的话我个认为差别不大,无非是内部资源不同。51是12时钟周期才一机器周期,而AVR是1时钟周期一机器周期,AVR较51单片机速度快且抗干扰能力强。AVR里边一般也是集成了这几个内部接口,像SPI、I2C、AD、看门狗、模拟比较器(其实相当于运放可以触发中断的,可以用来做掉电检测)。如果你之前已经很了解了51采用的是C编程,现在想学AVR的话,那是非常简单的,你只需选用一款AVR单片机,然后阅读该款单片机的DATASHEET即可,做实验的话就一个资源一个资源的来做。AVR的C编译器可选用ICC
AVR这个软件小巧但无法软件仿真,还可以采用AVR
STUDIO4,我两个软件都用过,不过我介意采用AVR
STUDIO4这个是ATMEL公司自己推出的免费软件,且是采用GCC编译器,非常不错。我在做项目时就是采用的AVR
STUDIO4这个软件,之前我也是学的51也没学过AVR,但做项目时由于是医疗设备对系统稳定性和抗干扰性都要求比较高,就此我就放弃选用51直接采用AVR的,其实都一样,只是寄存器有些区别而已,I/O口的操作有点区别,刚接触时写程序效率低一点,因为对寄存器不太熟,但用一段时间就好了。介意直接看DATASHEET编写程序,预到不懂的再百度。51、AVR、PIC这三种单片机都可以这样。都差不多。ARM的话稍微复杂点。
第3个回答 推荐于2017-10-07
先阐述一下哈佛结构的概念:将程序和资料记忆体分开使用.每个存储模块分别存储指令和数据.使用独立的两条总线,分别作为CPU与每个存储器之间的专用通信路径.
AVR与51的区别:(以AT90s8515为例)
1.程序空间(000H~FFFH)访问时用LPM指令访问。
2.片内数据存储(0060H~025FH)访问时用STS、LDS和ST、LD指令访问。
3.片外数据存储(0260H~FFFFH)访问时用STS、LDS和ST、LD指令访问。
4.32个通用寄存器R0~R31,它们之间数据传送可使用MOV指令。
5.I/O寄存器(00H~3FH)使用IN、OUT访问。
堆栈:MCS-51的堆栈指针寄存器SP(单字节)将数据压入堆栈时SP增大,AVR正好相反。
注意:1.AVR堆栈既可以放置在片内SRAM中,也可以放置到片外SRAM.
2.在AVR中,若不支持外部SRAM,SP为一字节.若支持外部SRAM,则SP为两字节。
3.在对AVR编程时,一定要对SP进行初始化,否则很可能出现,模拟调试正常而程序下载到芯片后却不能工作的现象.
外部SRAM:
MCS-51单片机访问外部SRAM使用MOVX而在AVR中访问片内或片外SRAM均使用相同指令,芯片会自动选择,但为了正常工作还必须对相应寄存器进行设置。