单片机的开发工具
编辑与编译软件:WinAVR 仿真调试软件:AVR Studio 下载软件:MuCode ISP
仿真调试工具:JatgICE 下载线工具:STK200/300 学习板、开发板一块(型号 *-**-M16) 参考技术手册 AVR官方中文版技术手册《AVR单片机与GCC编程》 AVR单片机简介 AVR单片机的性价比远高于51单片机 一、高速 、RISC、主频最高可达20MHZ(首先主频就快10倍 RISC又扩大好几倍。) 二、低功耗、宽电压(1.8V---5.5V)。最低全速运行功耗<> 三、I/O驱动能力强、推拉电流能力均达30mA ,可以直接驱动继电器、蜂鸣器等。 (51 拉电流强估计有小于10mA 推电流基本是0 几百个微安了 四、片内资源丰富:外部中断、定时器/计数器、UART、SPI、IIC、ADC、模拟比较器。 尤其值得一提的是AVR的定时器功能也是非常强的能够实现PWM功能或输入捕获功能、PWM功能 是非常强的可以用于电机的控制。 五、型号齐全、而且40脚以下的AVR均具有DIP封装形式。(8脚到100脚需要的领域基本都有 相应的产品了)如下图。 ATMEGA系列中的ATmega16 应该算是我们用的最多一款因为很多人都是用它学习AVR单片机学习的入门。 上图三个是官方提供的开发工具 MK2仿真器: JTAG ICE: 这个可以自制 选择AVR开发有一下几个优点 1、最小系统容易实现设计容易、只需要连接电源 焊接晶振就可以工作(当然如果对时钟要求不是很严格的话 连晶振都可以不要的不像51单片机需要晶振、EA脚上拉上电复位电路、而AVR单片机内部自带内部上电复位 电路的)。 2、很多概念符合初学者的思路、理解起来更容易:例如AVR时钟源(晶振、内部RC等)不经过分频直接提供 给CPU使用,而51的主频等于晶振的12分频这个大家都知道的、所以这一点算定时器的时候非常方便,而51 算就比较麻烦算定时周期就幻晕。 3、AVR即具有简单的、可以自制的ISP下载线和Jtage仿真器,又有DIP直插的封装形式。(51占用一个串口, 是不能仿真串口的,属于软仿真,DIP直插很容易让初学者学习像430就没有DIP) 4、AVR的C语言编程与C语言教科书上的标准C语言语法是几乎一样的,不像51的C语言,一些bit srf 之类的变 量定义在教科书中是找不到的,有利于后期的嵌入式学习。 实际例子: 电路图可以看到8个发光二极管可以进行闪烁和显示二进制显示等。 有图中可以看到这是ATmega16 单片机,它的最小系统是非常简单的只要GND接地 VCC接+5V就可以了右边 的AGND/AVCC/AREF这三个脚是你用到片内模/数转换 ADC或模拟比较器的时候需要把这三个脚接上电源,如果正常用不到可以悬空就可以了。还有RESET可以悬空。Hander6 是一个简易的下载线的接口 MOSI , MISO, SCK,RESET共4根线、8个二极管的阳极接PD0---PD7 (学过51的都知道一般都是阴极接I/O口这是因为51的灌电流能力很强,拉电流很弱)。这样阳极接I/O口也比较符合初学者的思维,I/O口输出1二极管是点亮的。 下面是如何用万用板焊接和编译程序: 焊接万用板就不说了,太简单了只要小心翼翼就ok了。焊接完成后,把ATmega 16 插到插座上,我们往单片机固化的程序采用的是我们自制的一个下载线如下图: 这个下载线电路还是比较简单的,只需要一片 74HC244(也可以直接跟并口相连,用244的原因是因为防止烧坏并口所以接了一个缓冲器,其实就是用并口模拟的时序ISP) 然后插到计算机后面的并口上,标准的AVR单片机下载线是10芯的接口的,但是只有其中的6芯是有用的。所以我们自制了一个10芯转6芯的一个线,把其中有用的6芯给引出来,顺序跟我们电路图上的一样的。然后把这个6芯线插到单片机引出的下载线的6芯接口上。然后找来一个5V电源然后插到单片机上的电源供电口,然后把下载线的软件下载软件 MuCode ISP 如下图是图标和打开后的样子: 下面我们编译一个测试代码:(打开AVR studio下图) 点击:New Project 弹出下图 第一项: ADORD AVR assemble 这个是会变得 这个是新建一个汇编语言的项目 第二项:AVR GCC 这个是C语言的项目 Project name 起个项目名字 test0 最下面的location 这个是路径 我们可以选择放在桌面上 (桌面上新建一个文件夹放进去就行了) 点击:finish 完成 点击:Next 下一步 下面的这步是选择仿真调试的工具和将要开发的单片机的型号:如下图 调试工具由于我们小板上没有喊JATG ICE接口 如果焊了我们可以选JTAG ICE 选项会如下图: 因为没有焊,我们直接下载到单片机运行验证。所以我们不选 JTAG ICE 选AVR Standlitor 意思就是软件仿真不用仿真器 然后右边选AT mega 16 如下图 点击:finish 进入环境 软件自动为我们建立一个.C 文件 因为C语言文件必须包含基本的头文件 #include int main (void ){ //avr GCC的语法呢 的这个main函数必须是int 类型的 且没有返回值的 //由于发光二极管阳极是接在PD口上 属于PD口输出型的所以要把整个PD口都置为输出 //PD端口方向寄存器 叫做 DORD =0XFF的时候 DDRD =0XFF;//0到7 都置为输出 while(1){//因为单片机的程序不像PC机程序可以退出,所以单片机上电之后一般都是死循环的 PORTD =0b11100110; //这个表示TD口第一个数据寄存器 给它赋值就等于赋值了 //0b表示 二进制 是从7位到第0位 左位高位 } } //然后点击编译 如下图 然后用 MuCode ISP 下载到单片机中 file ->open flash 点击:progarm 如下图 可以看到:如下图所表现 下面加一些动态效果能够让灯闪烁起来 无非是让产生两种状态 还有就是这个所有位就是取反 #include int main (void ){ //avr GCC的语法呢 的这个main函数必须是int 类型的 且没有返回值的 DDRD =0XFF;//方向寄存器 while(1){ int i =0,j=0; PORTD =0b11100110; //其实执行这条C语句大概需要2条汇编指令的周期 而这个单片机的时钟周期是1MHZ 默认的是内部RC 振荡1MHZ 这样也就是每条指令时us级 所以人的眼睛是看不到的。加延时 for (j=0;j<> for (i=0;i<10000;i++); 估算下这个for="" 循环消耗多长时间="" 每条指令几个微妙="">10000;i++);> 大概5条指令 所以10000 * 5 *2 = 100000 大概50毫秒 所以让这条for 执行10次左右 PORTD =0b00011001;//执行完了 加一个延时跟上面一样 for (j=0;j<> for (i=0;i<10000;i++); 估算下这个for="" 循环消耗多长时间="" 每条指令几个微妙="">10000;i++);> 大概5条指令 } } 编译验证下: 可以看到mucode isp 自动就下载进去了。 因为有个选项是下图 这个勾上后就没当这个文件更新之后就自动下载到单片机里了。下面可以看到现象每隔1秒闪烁一次 由此说明我们的程序是成功的。今天到此结束。 bye ! 了解更多AVR单片机系列,可关注“云汉电子社区(ickeybbs)”官方微信公众号,或者登录云汉电子社区官方网站(bbs.ickey.cn) |
|