| 
 | 
|  | 
| 
 | 
| This document is available in: English Castellano ChineseGB Deutsch Francais Italiano Nederlands Russian Turkce | 
| ![[Photo of the Author]](../../common/images/Guido-S.gif)  by Guido Socher (homepage) 关于作者: Guido喜欢linux不仅因为从这个系统可以找到最大可能的乐趣还因为人们潜心于它的设计. 目录: | 
![[Illustration]](../../common/images/article231/illustration.jpg) 
摘要:
    Atmel公司的AVR 8位RISC单片机是一种非常普通的单片机.它是一个具有电擦写可编程只读存储器(EEPROM),随机访问存储器(RAM),模数转换器,大量的输入和输出线路,计时器,RS-232通讯接口UART以及其他很多功能的单片集成电路.
    最好的莫过于在Linux下具有一个可供利用的完整编程环境:你可以采用GCC对这种单片机进行C语言编程.本文我将向你讲述如何安装和使用GCC.我也将向你讲述如何把软件载入单片机.你所需要的只是一块AT90S4433单片机,一个4Mhz的晶震,一些电缆和少量其它便宜的部件. 
    这篇文章只是一个简单介绍.在以后的文章种我们将会制作一个具有少数按键的LCD显示屏,模数输入,硬件狗和一些LED.我们的想法是做一个普通的Linux服务器的控制面板,不过我们先要学习怎么配置编程环境,这也是本文的主要内容.
    
|  | 
采用GNU C语言开发环境你需要下列软件:
| binutils-2.11.2.tar.bz2 | 可以从: ftp://ftp.informatik.rwth-aachen.de/pub/gnu/binutils/ 或者 ftp://gatekeeper.dec.com/pub/GNU/binutils/下载 | 
| gcc-core-3.0.3.tar.gz | 可以从:
        ftp://ftp.informatik.rwth-aachen.de/pub/gnu/gcc/ 或者 ftp://gatekeeper.dec.com/pub/GNU/gcc/下载 | 
| avr-libc-20020106 .tar.gz | 这个AVR C语言库可以从: http://www.amelek.gda.pl/avr/libc/ 也可以从这个服务器下载:下载主页 | 
| uisp-20011025.tar.gz | AVR编程器可以从: http://www.amelek.gda.pl/avr/libc/ 也可以从这台服务器下载: 下载主页 | 
mkdir /usr/local/atmel
bunzip2 -c binutils-2.11.2.tar.bz2 | tar xvf
    -
    cd binutils-2.11.2
    ./configure --target=avr --prefix=/usr/local/atmel
    make
    make install
    
tar zxvf gcc-core-3.0.3.tar.gz
    cd gcc-core-3.0.3
    ./configure --target=avr --prefix=/usr/local/atmel
    --disable-nls --enable-language=c
    make
    make install
    
设置一些环境变量(bash语法):
    export CC=avr-gcc
    export AS=avr-as
    export AR=avr-ar
    export RANLIB=avr-ranlib
    export PATH=/usr/local/atmel/bin:${PATH}
    
    ./configure --prefix=/usr/local/atmel/avr --target=avr
    --enable-languages=c --host=avr
    make
    make install
    
tar zxvf uisp-20011025.tar.gz
    cd uisp-20011025/src
    make
    cp uisp /usr/local/atmel/bin
    
![[circuit diagram]](../../common/images/article231/schematic.gif) 
 | ![[avr]](../../common/images/article231/avr4433.jpg)  | 1 x AT90S4433, Atmel 8 位AVR RISC处理器. | 
| ![[socket]](../../common/images/article231/14pinicsocket.jpg)  | 2 x 14脚 IC插槽 或者 1 x 28 脚 7.5mm IC插槽 这种28脚插槽要找到有点点困难,通常28脚插槽是14mm宽的,但是我们需要的是7.5mm的插槽. | 
| ![[resistor crystal capacitor]](../../common/images/article231/resistor_crystal_capacitor.jpg)  | 1 x 10K 电阻 (颜色代码: 棕,黑,橙) 3 x 470 欧姆 电阻(颜色代码:黄,紫,棕) 1 x 1K 电阻 (颜色代码: 棕,黑,红) 1 x 220 欧姆 电阻 (颜色代码:红,红,棕) 1 x 4Mhz 晶震 2 x 27pf 陶电容 | 
| ![[connector]](../../common/images/article231/connector.jpg)  | 用于编译器的任意种类的5脚插头/插座.我们通常买些连接器条,然后5个折成一段. | 
| ![[matrix board]](../../common/images/article231/board.jpg)  | 聚酯板. | 
| ![[db25]](../../common/images/article231/db25male.jpg)  | 1 x DB25 连接器 用于插到并口. | 
| ![[led]](../../common/images/article231/led.jpg)  | 1 x LED | 
| ![[beardboard]](../../common/images/article231/breadboard.jpg)  | 一块模拟板. 我们在这里不用,但是如果你想做将来的AVR实验这是非重有用的.我建议你把微控制器与晶震和电容集中在聚酯板上,然后通过短电缆把它们的输入/输出脚连接到模拟板. | 
![[AVR programmer]](../../common/images/article231/pcable.jpg)
| AVR端针脚 | 并口端针脚 | 
|---|---|
| SCK (19) | Strobe (1) | 
| MISO (18) | Busy (11) | 
| MOSI (17) | D0 (2) | 
| Reset (1) | Init (16) | 
| GND | GND (18) | 
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);
          }
    }
    
export PATH=/usr/local/atmel/bin:${PATH} (for
    bash)
    setenv PATH /usr/local/atmel/bin:${PATH} (for tcsh)
# /sbin/lsmod
    parport_pc
    ppdev
    parport
modeprobe parport
    modeprobe parport_pc
    modeprobe ppdev
    
chmod 666 /dev/parport0
确保没有在并口上的打印守护进程运行.如果你运行了就要在你连接编程器电缆前停止这个进程.现在编译和单片机编程的所有准备工作都做好了.avr-objdump -h avrledtest.out
S显示程序的不同段的大小..text是调入falsh EEPROM的指令代码,.data是象
avrledtest.out:     file format elf32-avr
Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0000008c  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000000  00800060  0000008c  00000120  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000000  00800060  0000008c  00000120  2**0
                  ALLOC
  3 .eeprom       00000000  00810000  00810000  00000120  2**0
                  CONTENTS
  4 .stab         00000750  00000000  00000000  00000120  2**2
                  CONTENTS, READONLY, DEBUGGING
  5 .stabstr      000005f4  00000000  00000000  00000870  2**0
                  CONTENTS, READONLY, DEBUGGING
    你也可以用avr-size命令得到一个更精简的形式:
    avr-size avrledtest.out
   text    data     bss     dec     hex filename
    140       0       0     140      8c avrledtest.out
    在AVR上工作你必须特别注意.text+data+bss不超过4K,data+bss+stack(你可以不考虑stack的大小,它取决于有多少嵌套调用)不能超过128字节.avr-objdump -S avrledtest.out
它会生成你的代码的汇编列表.| 
 | 
| 主页由LinuxFocus编辑组维护 © Guido Socher, FDL LinuxFocus.org 点击这里向LinuxFocus报告错误或提出意见 | 翻译信息: 
 | 
2002-03-13, generated by lfparser version 2.27