用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心解决方案电子通信

AVR单片机GCC编程

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 23:01:57
;conrad.de(德国),www.selectronic.fr(法国)等等........,可能在你的国家这些类似的站点)的仓库里才有全部的部件.
[avr]javascript:window.open(this.src);" style="cursor:pointer;"/> 1 x AT90S4433, Atmel 8 位AVR RISC处理器.
[socket]javascript:window.open(this.src);" style="cursor:pointer;"/> 2 x 14脚 IC插槽
或者
1 x 28 脚 7.5mm IC插槽
这种28脚插槽要找到有点点困难,通常28脚插槽是14mm宽的,但是我们需要的是7.5mm的插槽.
[resistor crystal capacitor]javascript:window.open(this.src);" style="cursor:pointer;"/> 1 x 10K 电阻 (颜色代码: 棕,黑,橙)
3 x 470 欧姆 电阻(颜色代码:黄,紫,棕)
1 x 1K 电阻 (颜色代码: 棕,黑,红)
1 x 220 欧姆 电阻 (颜色代码:红,红,棕)
1 x 4Mhz 晶震
2 x 27pf 陶电容
[connector]javascript:window.open(this.src);" style="cursor:pointer;"/> 用于编译器的任意种类的5脚插头/插座.我们通常买些连接器条,然后5个折成一段.
[matrix board]javascript:window.open(this.src);" style="cursor:pointer;"/> 聚酯板.
[db25]javascript:window.open(this.src);" style="cursor:pointer;"/> 1 x DB25 连接器 用于插到并口.
[led]javascript:window.open(this.src);" style="cursor:pointer;"/> 1 x LED
[beardboard]javascript:window.open(this.src);" style="cursor:pointer;"/> 一块模拟板. 我们在这里不用,但是如果你想做将来的AVR实验这是非重有用的.我建议你把微控制器与晶震和电容集中在聚酯板上,然后通过短电缆把它们的输入/输出脚连接到模拟板.
除开上面的这些,还需要提供一个稳定的5V直流电源,你也可以采用4.5V的电池作为电源供应.  

安装编程器硬件

AT90S4433支持在线编程(ISP). [AVR programmer]javascript:window.open(this.src);" style="cursor:pointer;"/>
简单说就是:你没有必要为了给单片机编程而移动单片机模块.你会看到可以用50-150欧元买到做好的编程器硬件,但没有必要为一个编程器更多地投资.采用Linux,uisp软件和免费的并口你就可以建立起一个非常好的简单的AVR编程器,也就采用一根简单的电缆连接而已.编程器电缆的线必须符合下列要求:
AVR端针脚并口端针脚
SCK (19)Strobe (1)
MISO (18)Busy (11)
MOSI (17)D0 (2)
Reset (1)Init (16)
GNDGND (18)

电缆长度不超过70cm.  

写入软件

在GCC的帮助下AT90S4433可以用一般的C语言编程. 了解一些AVR汇编很有用,但也不是非要不可.AVR C语言库的avr-libc-reference 讲述了libc的大部分函数. Harald Leitner写了一个关于如何使用AVR和GCC的带有大量有用的例子的文档(haraleit.pdf, 286Kb, 原作 http://www.avrfreaks.net/AVRGCC/). 从Atmel公司的网页, (www.atmel.com, 找到: avr products -> 8 bit risc-> Datasheets), 你可以下载完整的数据资料 (复制到本地: avr4433.pdf, 2361Kb) . 它描述了所有的寄存器以及如何使用CPU.

使用4433的时候有一点要注意的是它只有128字节的RAM和4K字节的EEPROM.这就意味着你不能定义大的数据结构和字符串.程序中不能采用深入的嵌套调用或者是递归调用. 就像写
char string[90];
这样一行就已经太大了. 一个整数是16bit,如果需要一个小的整数你可以采用
unsigned char i; /* 0-255 */
你将非常惊讶你的程序是多么大.它真是一个强大的处理器.

理论不如实践,我们将写一个程序让我们的LED每隔0.5秒闪烁一次.虽然不是很有用不过也是一个非常好的开头,而且可以用来测试我们的开发环境和编程器.

void main(void)
{
      /* enable PD5 as output */
      sbi(DDRD,PD5);
      while (1) {
            /* led on, pin=0 */
            cbi(PORTD,PD5);
            delay_ms(500);
            /* set output to 5V, LED off */
            sbi(PORTD,PD5);
            delay_ms(500);
      }
}

上面的例子可以看出用它写个程序是多么简单.你看到的仅仅是主程序,delay_ms函数包含在全部的清单(avrledtest.c)中. PD5脚用作输出的话,你必须在数据寄存器中为D端口(DDRD)设置PD5位.然后就能用cbi*(PORTD,PD5)函数给PD5设置0V电压(清除PD5)或者用sbi(PORT,PD5)设置5V电压(设置PD5)."PD5"值的定义包含在通过io.h包含的io4433.h中.你不用担心这点. 如果你曾经在象Linux这样的多用户多任务系统下写过程序的话你就知道绝不要写一个非模块化的无穷的循环.这会浪费CPU时间,减慢系统速度.在AVR上就不一样了,我们没有多个任务,也没有其他程序在运行,这甚至不是一个操作系统,在这上面运用无穷循环显得很普遍.  

编译和载入

在开始之前确认一下PATH中包含了/usr/local/atmel/bin路径,必要的话编辑你的.bash_profile或者.tcshrc,添加如下内容:

export PATH=/usr/local/atmel/bin:${PATH} (for bash)
setenv PATH /usr/local/atmel/bin:${PATH} (for tcsh)

我们用并口和uisp来为AVR编程.uisp使用内核的ppdev接口,因此你必须已经载入了下列内核模块:

# /sbin/lsmod
parport_pc
ppdev
parport

用/sbin/lsmod命令检查是否已经载入,如果没有就以root用户载入它们.

modeprobe parport
modeprobe parport_pc
modeprobe ppdev

一个比较好的办法是在启动的时候就自动执行这些命令.你可以把这些命令添加倒rc脚本中(例如:Redhat下的/etc/rc.d/rc.local).
为了给普通用户ppdev接口写权限,运行一次下面的命令:

chmod 666 /dev/parport0

确保没有在并口上的打印守护进程运行.如果你运行了就要在你连接编程器电缆前停止这个进程.现在编译和单片机编程的所有准备工作都做好了.

我们的测试程序包(avrledtest-0.1.tar.gz)

上一页  [1] [2] [3]  下一页

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:5,906.25000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号