很多从51转学AVR的朋友在选用编译和仿真软件电脑里装的是ICCAVR、IAR、winavr等,少部分用CVAVR(CodeVisionAVR) 的,这个软件甚至部分人都没有听说过。有的人说了,学习来说哪个编译软件都都无所谓,毕竟各有千秋、都难以十全十美。
习惯了51,初学AVR刚开始就是要了解和习惯使用新的编译器,因此不得不暂时放下曾经使用游刃有余的KEIL了。
接下来便是用C对AVR编写简单的程序开始,结果碰到的第一件事便是无论是ICC还是GCC,都无法直接使用简单的位操作。想想51多方便:KEIL C51加上头文件#include <AT89X52.h> 或者#include <reg52.h>,便可以直接使用如P1_1=1操作;或者sbit LED1=P1^1进行位定义。用习惯了51的朋友一定会感到不爽,一个简单的位操作在AVR编译器中为何如此麻烦?有些51的“高手”在初次接触AVR时甚至连一个开关控制一个LED都不知道如何写...所以接下来自然很多行家出台了各式各样的宏文件来解决这个问题(有很好的也有不规范的),很多的会产生复杂低效的代码;部分也采用异/或等方法去实现... 大家可在网上看多很多这方面的讨论。
51单片机的I/O是准双向口,而AVR是真正的双向口,每个端口都有三个I/O 存储器地址:数据寄存器 – PORTx、 数据方向寄存器 – DDRx 和端口输入引脚– PINx。数据寄存器和数据方向寄存器为读/ 写寄存器,而端口输入引脚为只读寄存器。当寄存器SFIOR 的上拉禁止位PUD 置位时所有端口的全部引脚的上拉电阻都被禁止。在程序中这些若没有搞清楚是无法进行位操作的(下表是AVR的I/O功能表)。
DDRXn |
PORTXn |
PUD(SFIOR) |
I/O 方式 |
内部上拉电阻 |
引脚状态 |
0 |
0 |
X |
IN |
无效 |
三态(高阻) |
0 |
1 |
0 |
IN |
有效 |
外部引脚拉低时输出电流 (uA) |
0 |
1 |
1 |
IN |
无效 |
三态(高阻) |
1 |
0 |
X |
OUT |
无效 |
推挽 0 输出,吸收电流 (20mA) |
1 |
1 |
X |
OUT |
无效 |
推挽 1 输出,输出电流 (20mA) |
现在进入正题,这里推荐一款CVAVR(CodeVisionAVR),经过较长时间使用和比较,发现CVAVR其实更适合初学者,而且有着很大的优势。
(打开界面,大家可搜寻较高版本的)
1. CVAVR界面友好 关键字颜色不同,有折叠方式,看起来比ICC-AVR感觉舒服多了!
(相信经过很多人使用后,会喜欢上这个软件的,越来越多的朋友已经熟悉了)
2. 支持位操作 这个就是刚才说其它软件使用位操作较变态的问题,在CVAVR中就可以直接使用位操作,比如:PORTC.0=1;
3. 可直接操作内部EEPROM。
EEPROM CHAR DATA;
DATA = 0XFF;
4. 较丰富的专用函数 可直接调用,比如延时的delay函数,只要把晶振设置好了,dalay函数编译器会给出来,我们直接调用就好了,无需另外写一个延时子函数。又如你用DS1302、DS18B20、LCD等不用写底层驱动之类的东西。
以下是一些函数列表:
1. Character Type Functions - 字符类型函数
2. Standard C Input/Output Functions - 标准输入输出函数
3. Standard Library Functions - 标准库和内存分配函数
4. Mathematical Functions - 数学函数
5. String Functions - 字符串函数
6. BCD Conversion Functions - BCD 转换函数
7. Memory Access Functions - 存储器访问函数
8. Delay Functions - 延时函数
9. LCD Functions - LCD函数
10. LCD Functions for displays with 4x40 characters - 4×40 字符型LCD函数
11. LCD Functions for displays connected in 8 bit memory mapped mode -以8 位外部存储
器模式接口的LCD显示函数
12. I2C Bus Functions - I2C 总线函数
13. National Semiconductor LM75 Temperature Sensor Functions - LM75 温度传感器函数
14. Dallas Semiconductor DS1621 Thermometer/Thermostat Functions - DS1621 温度计函
数
15. Philips PCF8563 Real Time Clock Functions - PCF8563 实时时钟函数
16. Philips PCF8583 Real Time Clock Functions - PCF8583 实时时钟函数
17. Dallas Semiconductor DS1302 Real Time Clock Functions - DS1302 实时时钟函数
18. Dallas Semiconductor DS1307 Real Time Clock Functions - DS1307 实时时钟函数
19. 1 Wire Protocol Functions - 单线通讯协议函数
20. Dallas Semiconductor DS1820/DS1822 Temperature Sensors Functions - DS1820/1822
温度传感器函数
21. SPI Functions - SPI 函数
22. Power Management Functions - 电源管理函数
23. Gray Code Conversion Functions - 格雷码转换函数
5. 直接支持STK200、STK300下载线。
CVAVR当然也有它的缺点,比如C移植到其它编译器会有一些麻烦,笔者仅是推荐,若没有用过CVAVR,可以下载尝试一下。
软件下载地址: http://www.mcusy.cn/Article.asp?id=1699540
入门教学文档: http://www.mcusy.cn/Article.asp?id=1699543