ATmega128几个常用程序例子

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ATMEGA128相关例程

自己学avr单片机已经有相当一段时间了,一开始用的是atmega128,觉得不是很好用。于是自己去买了一块16L的芯片,觉得还行。一开始用的是ICC AVR,应为它用起来比较简单,不像winavr那样,要写个Makefie

,比较的麻烦,但icc avr的缺点是太过于简陋,调试程序时,感觉不是很好。后来经同学介绍,用起了winavr,其实也是比较的简单,只不过要加一个makefile而已,其实makefile可以用软件自带的组建自动生成,只需修改几个参数就可以用。后来又用起了code vision avr,虽然不太习惯,也谈不上不好用.

需要注意的是,三个不同的软件所带的同文件不一样。icc avr 是iom128v.h(姑且以128为例),winavr 是avr/io.h,不过makefile中要设置芯片为atmega128.而cvavr则是mega128.h。

记得一开始的时候,我对这些不同的同文件不是很理解,是从一个学长那里了解到,才弄明白的。其实前两个软件只需把头文件稍微改一下基本上可以通用。而最后一个软件的中断的写法似乎不太一样,因而和钱两个软件的兼容性是最差的。

总体说winavr给人的感觉是比较专业

自己学习时多总结吧!

1、流水灯

/*

硬件环境:atmega128开发板

软件环境:CodeVisionAVR-C

*/

#include

#define uchar unsigned char

#define uint unsigned int

uchart;

void timer1_init()

{

TCCR1B=0X00; //先停止定时器1

TCNT1H=0XF0; //设定定时器初值

TCNT1L=0XBE;

TCCR1A=0X00; //启动定时器1

TCCR1B=0X05; //使用1024分频

}

interrupt [TIM1_OVF] void timer1_ovf_isr(void)

{

TCNT1H=0XF0; //重载定时器初值

TCNT1L=0XBE;

DDRE|=1<<2;

PORTE|=1<<2;

DDRA=0xff;

PORTA=cnt; //输出led的值到端口B

t++;

if(cnt==255)

t=0;

}

void main()

{

//DDRB=0XFF;

SREG|=0X80;

TIMSK=0X04;

timer1_init();

while(1)

{;

}

}

2、AD转换+数码管显示

/***************************************************************************/

/*ADC测试程

序 */

/*目标器件:ATmega128 */ /*晶振:RC

8MHZ */

/*编译环境:ICCAVR 7.13A */ /*E-Mail:number007cool163.

*/

/*时间:2010年11月13

*/

//Aref接AVCC(+5V),采用Aref作参考电压

/*用数码管显示AD转换的结果*/

/***************************************************************************/

/*********************************包含头文件********************************/

#include

#include

/********************************数码管段码表*******************************/

extern const unsigned char tab[]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,

0x7F,0x6F};

/*********************************全局变量**********************************/

unsigned int adc_rel=0;

/**************************************************************************** 函数功能:ADC初始化函数

入口参数:

出口参数:

****************************************************************************/ void adc_init(void)

{

DDRF&=0XFE; //PORTF0设置为输入,即作为ADC0口输入模拟电压

PORTF&=0XFE; //PORTF0设置为输入低电平

ADCSRA=0x00; //关ADC

ADMUX = 0X00; //采用Aref作为参考电压,ADC0单端输入,右对齐

ACSR=(1<

ADCSRA = (1<

//ADEN,启动ADC;ADSC,ADC开始转换;ADIE,ADC中断使能;ADPSx,设置分频因子64

}

/**************************************************************************** 函数功能:ADC中断函数

入口参数:

出口参数:

****************************************************************************/ #pragma interrupt_handler adc_isr:iv_ADC

void adc_isr(void)

{

//int data_h,data_l;

//data_l=ADCL;

//data_h=ADCH;

ADCSRA = 0x00;

ADCSRA = (1<

adc_rel=ADC;

/*

if(adc_rel>0x1ff)

{

PORTA|=1<<2;

}

else

PORTA&=~(1<<2);

*/

}

/**************************************************************************** 函数功能:延时子程序

入口参数:

出口参数:

****************************************************************************/

相关文档
最新文档