| | 3.程序分析 1.C程序是由函数构成的,一个C源程序至少包括一个函数,一个C源程序有且只有一个名为main()的函数,也可能包含其它函数。这个程序中有一个main函数和两个用户自定义函数:mDelay()和io_init()。 2.和51单片机不同,AVR单片机的端口在使用之前必须先设定好输入或输出,并决定是否接上拉电阻,因此,AVR单片机编程时比51要稍复杂一点,但却提供了更为强大的功能。 AVR单片机的端口一共有3个寄存器,即DDxn、 PORTxn 和PINxn,其中DDXn是用来设定端口的输出方向的,这里仅需要将PB.0设为输出即可,因此,在初始化程序中有: DDRB = 0x01; 这样一行,即将PB.0设为输出。其他的均为0。 3.这里仍用了51中常用的延时程序编写的方式即空循环的方式来产生延时,延时程序如mDelay()所示。需要说明的是,由于AVR单片机运算速度极快,应此,空循环次数当多才能产生足够长的延时,这里用了2段延时,才达到1ms的延时效果,这个循环次数是经过实际测试得到的,当参数为1时,延时1ms。 4.实现过程 有了上述程序之后,我们介绍两种实现的方式,即用winavr和atmanavr来实现。 4.1 用WINAVR实现 开启winavr―>Programmer Notpads,将上述源程序输入其中。保存源程序,设保存在E盘AVR文件夹下的DDSS文件夹下,文件名为ddss.c。 开启winavr->Mfile,编缉Makefile,开启之后,即有一个makefile的模板,如图2所示。
 图2 Makefile的模板 点击菜单Makefile->Main file name……即出现如图3所示的对话框,通常不需要更改此选项,最终产生的hex文件即main.hex。
 图3 设置主文件名 接着点击Makefile->Mcu type,设定所用单片机的型号,如图4所示。  图4 设置单片机型号 我们选择Atmega8515为我们所用的型号。 其他选项的说明如第一课《AVR的C语言开发环境的建立》一文所作的说明。 设置好后,点击file->save as将其存到e:avrddss文件夹。 然后在Programmer Notepads中,点击:Tools->Make All,即可对该文件进行编译、链接等处理,有关信息在output窗口中呈现。如有错误,单击错误行,即可定位,以便对此进行修改,直到编译、链接完全正确为止。此时,output窗口显示: > Process Exit Code: 0 此时,即可进入调试。启动AVRStudio,点击file->open,即出现open的通用对话框,进入ddss所在文件夹,打开文件时,可选一切文件,而AVRStudio会自动识别文件类型,如图5所示。  图5 打开文件时的对话框 选择main.elf文件,即出现如图6所示的对话框。
 图6 选择仿真器及芯片 这里我们选择Avr Simalator,芯片选择Atmgea8515。 点击finish即调入仿真文件并进入仿真界面,如图7所示。  图7 进入仿真界面 4.2 用ATMENAVR实现 启动Atmenavr,选择“文件->新建”,即图现如图8所示界面。  图8 AtmanAVR新建向导 选择AVR C Wizard(exe),然后在右侧“工程名:”和“目录:”中设置正确的目录并命名一个工程名。我们设定为E:AVRatman目录,工程名为ddss。 点击确定后,进入向导,首先选择芯片,这里我们选择Atmega8515,时钟频率选为11.0592M,看门狗无效,不对外部RAM进行设置。设置完成后如图9所示。  图9 工程设置向导第一步 点击下一步,进入Step 2,这一步是设置端口方向,点击PORTB页面卡,选择Bit0为0(点击I即可),其余不需要更改。然后即可以点击“完成”。完成后即进入AtmanAvr的主界面,并自动产生了一些文件,如ddss.c,ddss.h等,双击ddss.c,打开后,可以发现已根据需要做好了io口的初始化的工作。 查看main函数,可以看到有这样的程序行: while(1) { // TOD Add your code here } 即可在此处加上自己的处理代码。我们在此处加上: mDelay(500); PORTB&=0xfe; mDelay(500); PORTB|=0x01; 然后,再自行编写mDelay函数,即可。 源程序编写好后,按F7进行编译、链接,如果有错误,会显示在输出窗口中,双击可定位。修改源程序,直到编译通过为止。 编译通过后,点击编译->开始调试->Go即可进入调试。如图10所示。  图10 进入调试 至此,用winavr和Atmenavr进行程序设计、调试的基本步骤都已经结束 |
|
|
|
|
|