简单介绍AVR单片机(基于ATmega128)

学前准备:

1.C语言:至少学会学入门级的程序,能看懂别人写的函数代码,熟悉其原理。熟练使用关系运算符和位运算。
2.电路:至少能看懂电路图,熟悉各种常用电子元器件的原理和使用,会使用示波器和万用表。


一、单片机的简单介绍:

        作为电子爱好者或者电子行业硬件工程的开发者,单片机技术的掌握是必须的,但是目前很多的初学者选择入门的单片机都是基于MCS-51内核的单片机,虽然此类单片机学习简单,使用方便,但是其性能在很多场合却是大打折扣,要么速度欠缺,要么存储空间欠缺或者耗电量大,因此,由于MCS-51自身的结构所限制,与目前的新技术有明显的脱节。 AVR单片机是近10年来发展起来的新型的、基于增强型 RISC结构的单片机。AVR 在运行速度,低功耗,存储器空间,内部功 能模块的集成性成,高保密度,多种外围接口(I2C,PWM,ISP,IAP,AD)等,以 及在开发技术和仿真,下载调试方面都比 MCS-51 内核的单片机有明显的优势。TS8900-M128 型单片机学习开发板采用 ATMEGA128 芯片作为主控芯片,是专门 针对 AVR 单片机初中高级开发者和电子工程师开发设计的一套多功能系统实验板, 它工作稳定,模块化设计,开发资料齐全,可为学习者提供一个较好的实验开发平台。本文就以此学习板带初学者了解此单片机。

        一个AVR单片机的最小系统电路应包括:1、保证有一个给单片机工作的正确的电源(3.3V 或者 5V);如图的 VCC 电压。2、时钟振荡电路,也就是通常说的晶振电路;(AVR 单片机总体分为内部时钟和外部时钟); 时钟涉及到单片机一个非常重要的问题,熔丝位的配置问题。(初学者应先尽量避免设置熔丝位)3、一个正确的连接下载口或者 JTAG 口, 用来为单片机下载程序或者更新程序,当然,如果是在产品中使用编程器事先给单片机写好程序的话除外。4、一个正确的复位电路。(在实际应用中也可以直接接一个 10K 的上拉电阻。)

        


二、ICCAVR的基础使用:

        初学者如果真的想入手这个领域,作者是非常希望您能购买一块学习板上手操作;购买学习板的话,商家会提供相应的视频、中文资料和配套编译和烧写的软件,按照对应的流程安装即可。这里使用的编译软件是ICCAVR。

        打开ICCAVR,建立一个New Project,建立一个New File(点击File–Save As…来保存一个.c文件);右键点击右边工作栏中的Files,点击Add  File(s)添加前面保存好的.c文件;接下来就可以在工作区开始编写你的程序了。

        如图,PA0~PA7控制着8个流水灯的电路,PE2起到了限流的作用;解读:1、PA0~PA7输出低电平;2、PE2输出高电平。满足这两个条件,灯就可以亮了。PORTX(X代表电路中对应的字母)为数据寄存器,控制对应端口的高低电平("1"为高电平,"0"是低电平);DDRX(X代表电路中对应的字母)为数据方向控制寄存器,控制对应端口的输入输出("1"为输出,"0"是输入)。

    

        在C语言里,我们至少要使用一个为<stdio.h>的头文件;在这里,我们至少需要一个为<iom128v.h>的头文件(目前我所了解到常用的头文件还有<macros.h>),然后就开始编写主函数了。

        首先,我们要对学习板进行初始化设置(用到什么端口就调什么端口)。

unsigned int i;

//初始化代码
DDRA = 0xFF;
PORTA = 0xFE;
DDRE |= (1<<2);
PORTE |= (1<<2);

        然后,编写流水灯的循环程序。

while(1)
 {
  if(i<8)
  PORTA = (~(~PORTA)<<1);
  delay_nms(1000);
  if(i==8)
  {
  i=0;
  delay_nms(1000);
  }
 }

         延迟函数的编写

void delay_1ms(void)                 //1ms延时函数
  {
   unsigned int i;
   for (i=0;i<1250;i++);
  }
  
void delay_nms(unsigned int n)       //N ms延时函数
  {
   unsigned int i=0;
   for (i=0;i<n;i++)
   delay_1ms();
  }
  

        至此,简单的流水灯程序就编写完成了。附上完整代码:

#include<iom128v.h>

void main(void)
{
 unsigned int i=0;

 DDRA = 0xFF;   //0b1111 1111    全输出//数据方向控制寄存器
 PORTA =0xFE;    // 0b11111110   0号位低电平//数据寄存器
 DDRE |= (1<<2);    //0b0000 0100  2号位置1
 PORTE |= (1<<2);    //0b0000 0100  2号位置1 

 while(1)
 {
  if(i<8)
    PORTA = (~(~PORTA)<<1);
  delay_nms(1000);
   if(i==8)
    {
     i=0;
     delay_nms(1000);
    }
 }

}

void delay_1ms(void)                 //1ms延时函数
  {
   unsigned int i;
   for (i=0;i<1250;i++);
  }
  
void delay_nms(unsigned int n)       //N ms延时函数
  {
   unsigned int i=0;
   for (i=0;i<n;i++)
   delay_1ms();
  }

好了,学会了的话就赶紧去试试吧!

物联沃分享整理
物联沃-IOTWORD物联网 » 简单介绍AVR单片机(基于ATmega128)

发表评论