文档库 最新最全的文档下载
当前位置:文档库 › ATmega16单片机的使用

ATmega16单片机的使用

ATmega16单片机的使用
ATmega16单片机的使用

ATmega16单片机的使用

——实验一 Atmega16定时器T/C0实现按键扫描

——实验二 ATmega16单片机的ADC使用举例

指导老师:黄刚

班级:0720222

姓名:李锋锐

学号:28

试验《一》 Atmega16定时器T/C0实现按键扫描

(一)实验目的:

用ATmega16实现同时对两个按键定时扫描,要求扫描周期为10MS ,当AJ1按下,LED2点亮,并且BELL 蜂鸣声,当AJ1松开,LED2熄灭,BELL 不响;当AJ2按下,LED3点亮,并且BELL 发出蜂鸣声,当AJ2松开,LED3熄灭,BELL 不响。 (二)实验原理(硬件设计):

如图5-37所示,端口PD.3、PD.4为输入端,分别接AJ1和AJ2;端口PD.6、PD.7为输出模式,分别接LED2和LED3;端口PA.4为输出,通过三极管T1来控制蜂鸣器。

图5-36 基于Atmega16单片机定时器的按键扫描电路图

(三)实验原理(软件设计):

选用外部7.3728MHz 的晶振为系统时钟,按键扫描间隔定位10ms ,定时器T/C0采用CTC 模式,T/C0时钟选择1024分频后的系统时钟,并启用中断。

利用CTC 模式的工作原理,OCR0应赋的值由以下方程确定:

36

1010)10(102410

3728.71-?=+???OCR 于是:)

(即0x47710=OCR 。 允许比较匹配中断,在中断程序里做标志位设置,判断标志位满足条件时,程序再读取键盘的状态,确定有无键按下以及按下键的具体操作。 程序如下:

(1) L5-6.c

#include #include"key.h"

#define Led2 PORTD_Bit6//定义led2 #define Led3 PORTD_Bit7//定义led3 #define Bell PORTA_Bit4//定义bell unsigned char flag=0;

void port_init(void);

void timer0_init(void);

//************************主程序****************************//

void main(void)

{

port_init();

timer0_init();

SREG_Bit7=1;//使能全局中断

TCCR0=0x0D;// 定时器工作模式为CTC模式,定时器时钟源来自预分频器的1024分频 while(1)

{

if(flag==1)

{

flag=0;

switch(read_key())

{

case 0:

Led2 =1; // Led2灯不亮

Led3=1; //Led3灯不亮

Bell =0; //蜂鸣器不响

break;

case 1:

Led2 =0; //led2灯亮

Led3=1; //Led3灯不亮

Bell =1; //蜂鸣器响

break;

case 2:

Led2 =1; //led2灯不亮

Led3=0; //Led3灯亮

Bell =1; //蜂鸣器响

break;

}

}

}

}

//*******************端口初始化程序*****************************//

void port_init(void)

{

DDRD=0xc0;

PORTD=0x18;//PD.3( AJ1 )和PD.4( AJ12)方向输入,上拉有效,PD.6(Led2)和//PD.7(Led3)方向输出

DDRA=0x10;

PORTA=0x00;//PA.4(Bell)方向输出

}

//******************定时器寄存器初始化程序*(***********************//

void timer0_init(void)

{

TCCR0=0x00;

TCNT0=0x00;

OCR0=0x47; //7.3728MHz的系统时钟(OCR0=0X48)10ms

TIMSK=0x02; //TC0比较匹配中断使能

}

//******************定时器0比较匹配中断服务程序***********************// #pragma vector=TIMER0_COMP_vect

__interrupt void TIMER0_COMP_isr(void)

{

SREG_Bit7=0;//关闭全局中断

flag=1; //标志位置位

SREG_Bit7=1; //打开全局中断

}

(2) key.h

#include

#define AJ1 PIND_Bit3//定义按键1

#define AJ2 PIND_Bit4//定义按键2

unsigned char read_key()

{

static unsigned char key_state=0;

unsigned char key_return=0;

switch((key_state))

{

case 0:

if(!AJ1||!AJ2)

{

key_state=1;

}

break;

case 1:

if(!AJ1||!AJ2)

{

switch((PIND&0x18))

{

case 0x10://AJ1按下,返回1

key_return=1;

break;

case 0x08://AJ2按下,返回2

key_return=2;

break;

}

key_state=2;

}

else

{

key_state=0;

}

break;

case 2:

if(AJ1&&AJ2)

{

key_state=0;

}

if(!AJ1)

{

key_return=1;

}

if(!AJ2)

{

key_return=2;

}

break;

default: break;

}

return ( key_return);

}

四、实验结果:

ATmega16可实现同时对两个按键定时扫描,扫描周期为10MS,当AJ1按下,LED2点亮,并且BELL蜂鸣声,当AJ1松开,LED2熄灭,BELL不响;当AJ2按下,LED3点亮,并且BELL发出蜂鸣声,当AJ2松开,LED3熄灭,BELL不响。

实验《二》 ATmega16单片机的ADC使用举例

(一)设计任务

用ATmega16单片机自身所带ADC实现单路数据采集装置,要求:

①通过电位器调节输入模拟电压的大小,数码管显示模拟电压的大小,显示单位为MV。

②按下按键AJ1提高采样频率,按下按键AJ2降低采样频率。

(二)电路设计

电路设计如图7-6所示,按键AJ1、显示部分电路和图4-25一样,只是增加了按键AJ2和模拟量输入部分。模拟量电压信号取自电源5V,通过电位器调节大小,模拟量输入端选择通道ADC7(PA.7)。

图 7-6 ATmega16单片机的A/D单路转换电路原理图

(三)软件设计

在设计程序之前,参考一下ATmega16单片机的产品手册是有必要的,了解了ADC大概原理后,问题又集中到了特殊功能寄存器的初始化上。ATmega16单片机的ADC共涉及3个相关寄存器,分别是选择寄存器ADMUX、控制与状态寄存器ADCSRA和ADC数据寄存器ADCH/ADCL,图7-7~图7-9为这些寄存器的详解。此外,在特殊功能IO寄存器SFIO中的位[7:5]还决定ADC的触发源,图7-10为这3位的解释。

注意:AREF引脚和内部选中的参考电源连载一起,在使用内部2.56V或AVCC参考源时,不可施加电压,但可作为引出参考源用。

ADLAR:ADC转换结果左对齐选择。

0:转换结果右对齐;

1:转换结果左对齐。

MUX4-0:模拟通道和增益选择。

图7-7 ATmega16单片机ADC多路复用选择寄存器ADMUX解释

图7-8 ATmega16单片机ADC控制和状态寄存器ADCSRA解释

图7-9 ATmega16单片机ADC数据寄存器ADCH及ADCL解释

图7-10 ATmega16单片机特殊功能IO寄存器SFIOR与ADC有关的位解释在本例中,我们选择AVCC为参考电压源,转换结果采用右对齐方式,采样频率用分频因子来控制,按键AJ1减小分频因子用来提高采样频率,按键AJ2增加分频因子用来减小采样频率。完成本例任务的程序如下:

(1)L7-1.c

#include

#include //调用内部延时函数

#include"led_dis.h"

#define AJ1 PIND_Bit3 //定义按键1

#define AJ2 PIND_Bit4 //定义按键2

#define LED2 PORTD_Bit6 //定义LED2

unsigned char adps=4; //分频因子初值为16

int counter,ad_data,ad_v; //A/D采样值和转换的电压值

void port_init(void);

void adc_init(void);

unsigned char read_key(void);

void __delay_cycles(unsigned long);

void main(void)

{

port_init(); //端口初始化

adc_init(); //AD相关寄存器初始化

SREG_Bit7=1; //全局中断使能

ADCSRA_Bit6=1; //启动第一次转换

while(1)

{

counter++;

switch( read_key())

{

case 0 : break;

case 1: //按下按键1,分频因子变小,采样速率加快

if(adps>0) adps--;

break;

case 2: //按下按键2,分频因子变大,采样速率减慢

if(adps<7) adps++;

break;

}

if(counter>1000)

{

dis_num(ad_v,3,0,1);//调用显示程序

counter = 0;

}

}

}

//************端口初始化*******************************//

void port_init(void)

{

DDRC=0XC0;

PORTC=0x00; //PC.6(Data_164),PC.7(Pulse_164)方向为输出

DDRD=0x40;

PORTD=0xff; //PD.3(AJ1)和PD.4(AJ2)输入,内部上拉有效,PD.6为输出 DDRA=0x00;

PORTA=0x6f; //PA.7(ADC)方向为输入,内部上拉无效

}

//*****************A/D转换初始化*************************//

void adc_init(void)

{

SFIOR=0x00; //连续转换模式

ADMUX=0x47; //参考电压AVCC,右对齐,输入通道为PA.7

ADCSRA=0xa8+adps; //ADC转换使能,允许自启动,允许中断,预分频赋值}

//*****************读键值子程序***********************//

unsigned char read_key(void)

{

unsigned char key_return=0;

static unsigned char key_state=0;

switch( key_state)

{

case 0:

if((!AJ1)||(!AJ2))

{

key_state=1;

__delay_cycles(1000);

}

break;

case 1:

if((!AJ1)||(!AJ2))

{

switch(PIND&0x18)

{

case 0x10: //AJ1按下,返回1

key_return=1;

break;

case 0x08: //AJ2按下,返回2

key_return=2;

break;

}

key_state=2;

}

else

{

key_state=0;

}

break;

case 2:

while((!AJ1)||(!AJ2));

__delay_cycles(1000);

key_state=0;

break;

}

return key_return;

}

//*********************ADC中断子程序*******************//

#pragma vector=ADC_vect //ADC中断服务程序

__interrupt void ADC_Sever(void)

{

ad_data=ADCH*256+ADCL; //读取转换值

ad_v=(unsigned long)ad_data*5000/1024;//把读取值转换为电压等级 LED2=!LED2;

ADCSRA=0xa8+adps;

}

(四)实验结果

①通过电位器可调节输入模拟电压的大小

数码管显示模拟电压的大小,显示单位为MV。

②按下按键AJ1提高采样频率,按下按键AJ2降低采样频率。

个人总结的AVR的ATMEGA16L单片机程序

ATMAGE 16 的C语言程序

ATMAGE 16 的C语言程序 (1) 一、PB0 口的PB0.1 LED 发光管闪烁的程序: (3) 二、PA0、PB0、PC0口的LED 发光管闪烁的程序: (5) 三、I/O口的输入与输出 (6) 四、跑马灯 (8) 五、数码管计数显示设计 (10) 六、控制直流电机正反转 (16) 七、单片机的定时器(T/C0)应用 (20) AVR原理图 (24)

一、PB0 口的PB0.1 LED 发光管闪烁的程序: #include int main( void ) { unsigned char i, j, k,led=0; DDRB=0xFF; /* all outputs */ while (1) { if(led) PORTB|=0X01; /* |使最后一位为1 */

else PORTB&=0XFE; /*&最后一位为0 */ led=!led; //延时 for (i=0; i<255; i++) for(j=0; j<255;j++) k++; } } /////////////////////////////////////////////////////////////// #include int main( void ) { unsigned char i, j, k,led=0; DDRB=0xFF; /* all outputs */ while (1) { if(led) PORTB=0Xfe; else PORTB=0Xff; led=!led; for (i=0; i<255; i++) //延时 for(j=0; j<255;j++) k++; } }

ATMega16单片机外部中断的使用

ATMega16单片机外部中断的使用[日期:2010-09-24 ] [来源:本站原创作者:佚名] [字体:大中小] (投递新闻) // Crystal: 7.3728Mhz ,功能:学习外部中断0的程序 #include #include #define LED_COM PORTA ^= (1 << PA6) // void port_init(void) { PORTA = 0x40; DDRA = 0x40; PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; //m103 output only DDRC = 0x00; PORTD = 0x04; DDRD = 0x00; } #pragma interrupt_handler int0_isr:2 void int0_isr(void)

LED_COM; } //call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts port_init(); MCUCR = 0x00; GICR = 0x40; TIMSK = 0x00; //timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialized } void main() { init_devices(); while(1)

ATMEGA16单片机实验

实验一软件和硬件的认识 一、实验目的: 1、掌握硬件原理。 2、初步掌握实验板的使用方法。 3、熟悉软件工作界面。 二、实验仪器:ATmage16实验板一块 PC机一台 三、实验内容及步骤: 1、插上电源,按下开关。观察批示灯是否点亮。 电源(可输入7~12V) ATmega16管脚图

2、由原理可知I/O口的批示灯为低电平亮,在实验板上取地与I/O口相接,观察是否点亮。 I/O口LED显示与接口 3、打开编程界面,点击各栏,认识各栏的用途。 A VRICC IDE 软件的工作界面 4、输入以下程序: #include int main(void) { DDRA = 0xff;/* all outputs */ DDRB = 0xff;/* all outputs */ DDRC = 0xff; /*all outputs */ DDRD = 0xff; /*all outputs */

PORTA = 0x00; /* 输出低电平*/ PORTB = 0x00; /* 输出低电平*/ PORTC = 0x00; /* 输出低电平*/ PORTD = 0x00; /* 输出低电平*/ while(1); } 观察I/O口的灯是否被点亮。 实验二I/O口的输入与输出 一、实验目的: 1、了解IO口的结构; 2、熟悉IO口的特性; 3、掌握IO口的控制。 二、实验仪器:ATmage16实验板一块 PC机一台 三、实验原理: 作为通用数字I/O 使用时,A VR 所有的I/O 端口都具有真正的读-修改-写功能。这意味着用SBI 或CBI 指令改变某些管脚的方向( 或者是端口电平、禁止/ 使能上拉电阻) 时不会改变其他管脚的方向( 或者是端口电平、禁止/ 使能上拉电阻)。输出缓冲器具有对称的驱动能力,可以输出或吸收大电流,直接驱动LED。所有的端口引脚都具有与电压无关的上拉电阻。并有保护二极管与VCC 和地相连,如Figure23 所示。在控制I/O时,分别由方向寄存器DDRX与数据寄存器PORTX控制I/O的状态,如下表。 Figure 23. I/O 引脚等效原理图

atmega16单片机C语言程序

#include //AVR单片机相关库 flash unsigned int t[9] = {0,956,865,759,716,638,568,506,470}; flash unsigned char d[9] = {0,105,116,132,140,157,176,198,209}; #define Max_note 32 flash unsigned char music[Max_note] = {5,2,8,2,5,2,4,2,3,2,2,2,1,4,1,2,1,2,2,2,3,2,3,2,1,2,3,2,4,2,5,8}; unsigned char note_n; unsigned int int_n; bit play_on; // External Interrupt 1 service routine interrupt [EXT_INT1] void ext_int1_isr(void) { if (!play_on) { TCCR1B = 0x09; } } // Timer 1 output compare A interrupt service routine interrupt [TIM1_COMPA] void timer1_compa_isr(void) { if (!play_on) { note_n = 0; int_n = 1; play_on = 1; } else { if (--int_n == 0) { TCCR1B = 0x08; if (note_n Max_note) { OCR1A = t[music[note_n]]; int_n = d[music[note_n]]; note_n++; int_n = int_n * music[note_n]; note_n++; TCCR1B = 0x09; } else play_on = 0; }

基于AVR单片机--Atmega16的串口通信使用

基于AVR单片机--Atmega16的串口通信使用 //以下程序经验正可以用,MCU:M16,晶振:8M,直接用USB转串口线上的公头(针头), //第2针(RXD)接M16上的PD1口(15脚TXD),第3针(TXD)接M16上的PD0口(14脚RXD), //第5针接地,此时若板上有MAX232,则需把MAX232芯片去掉,这样才能正常工作 #include #include #define uchar unsigned char #define uint unsigned int #define fosc 8000000//晶振频率 #define BAUD 9600 //波特率 void USART_send(uchar date)//发送一个字节 { while(!(UCSRA&(1<

基于ATmega16单片机的直流电机控制

青岛科技大学 开放实验报告 院校: 专业:电气工程及其自动化 年级:13级1班 实验名称:基于Atmega16.单片机直流电机控制实 验 姓名: 学号: 同组者姓名: 同组者学号: 指导教师:

基于ATmega16单片机的直流电机控制 摘要:随着时代的进步和科技的发展,电机调速系统在工农业生产、交通运输以及日常生活中起着越来越重要的作用,因此,对电机调速的研究有着积极的意义.长期以来,直流电机被广泛应用于调速系统中,而且一直在调速领域占居主导地位,这主要是因为直流电机不仅调速方便,而且在磁场一定的条件下,转速和电枢电压成正比,转矩容易被控制;同时具有良好的起动性能,能较平滑和经济地调节速度。因此采用直流电机调速可以得到良好的动态特性。由于直流电动机具有优良的起、制动性能,宜与在广泛范围内平滑调速。在轧钢机、矿井卷机、挖掘机、金属切削机床、造纸机、高层电梯等领域中得到广泛应用。近年来交流调速系统发展很快,然而直流控制系统毕竟在理论上和在时间上都比较成熟,而且从反馈闭环控制的角度来看,它又是交流系统的基础,长期以来,由于直流调速系统的性能指标优于交流调速系统。因此,直流调速系统一直在调速系统领域内占重要位置。关键字:直流电机调速

Based on ATmega16 single chip microcomputer control of dc motor Abstract:with the progress of era and the development of science and technology, motor speed control system in industrial and agricultural production, transportation and daily life is playing a more and more important role, therefore, the study of motor speed regulation has a positive meaning. For a long time, the dc motor is widely applied to speed regulation system, and has been occupy dominant position in the field of speed adjustment, mainly because the dc motor speed regulation not only convenient, and in certain conditions, the magnetic field is proportional to the speed and the armature voltage, torque is easy to control;Has a good starting performance at the same time, can adjust the speed is relatively smooth and economically.So the dc motor speed control can get good dynamic characteristic.Due to the dc motor has excellent starting and braking performance, appropriate and smooth speed regulation in wide scope.In the rolling mill, mine winder, excavator, metal cutting machine, paper machine, is widely used in high-level elevator, etc.Ac speed regulating system develops very fast in recent years, however, dc control system in theory and in time, after all, are mature, and from the feedback closed-loop control point of view, it is the basis of communication system, for a long time, because of the performance index is better than that of ac speed regulation system of dc speed regulating system.Therefore, dc speed regulation system has been in the field of speed control system. Key words: dc motor speed control

ATMEGA16L

【用途】8位AVR微处理器 ATmega16L单片机是一款高性能、低功耗的8位AVR微处理器,具有先进的RISC结构,内部有大容量的ROM、RAM、Flash和EEPROM,集成4通道PWM,SPI串行外设接口,同时具有8路10位A/D转换器,对于数据采集系统而言,外部无需单独的A/D转换器,从而可节省成本.另外,该单片机提供JTAG调试接口,可采用自制的简易JTAG仿真器进行程序调试。 【产品特性】 类别:集成电路(IC) 家庭:嵌入式微控制器, 核心处理器:A VR 芯体尺寸:8位 速度:8MHz 连通性:I2C,SPI,UART/USART 外围设备:欠压检测/复位,POR,PWM,WDT 输入/输出数:32 程序存储器容量:16KB (16K x 8) 程序存储器类型:FLASH EEPROM 大小:512 x 8 RAM 容量:1K x 8 电压- 电源(Vcc/Vdd):2.7 V ~ 5.5 V 振荡器型:内部 工作温度:-40°C ~ 85°C 封装引脚图

【性能参数】 高性能、低功耗的8 位AVR??微处理器 ?先进的RISC 结构 – 131 条指令–大多数指令执行时间为单个时钟周期 – 32个8 位通用工作寄存器 –全静态工作 –工作于16 M Hz时性能高达16 MIPS –只需两个时钟周期的硬件乘法器 ?非易失性程序和数据存储器 – 16K 字节的系统内可编程Flash 擦写寿命: 10,000 次 –具有独立锁定位的可选Boot 代码区 通过片上Boot 程序实现系统内编程 真正的同时读写操作 – 512 字节的EEPROM 擦写寿命: 100,000 次 – 1K字节的片内SRAM –可以对锁定位进行编程以实现用户程序的加密 ? JTAG 接口( 与IEEE 1149.1 标准兼容) –符合JTAG 标准的边界扫描功能 –支持扩展的片内调试功能 –通过JTAG 接口实现对Flash、EEPROM、熔丝位和锁定位的编程 ?外设特点 –两个具有独立预分频器和比较器功能的8 位定时器/ 计数器 –一个具有预分频器、比较功能和捕捉功能的 16 位定时器/ 计数器 –具有独立振荡器的实时计数器 –四通道PWM – 8路10 位ADC 8 个单端通道 T QFP封装的7 个差分通道 2 个具有可编程增益(1x, 10x, 或200x)的差分通道 –面向字节的两线接口 –两个可编程的串行USART –可工作于主机/ 从机模式的SPI 串行接口 –具有独立片内振荡器的可编程看门狗定时器 –片内模拟比较器 ?特殊的处理器特点 –上电复位以及可编程的掉电检测 –片内经过标定的RC 振荡器 –片内/ 片外中断源 – 6种睡眠模式: 空闲模式、ADC 噪声抑制模式、省电模式、掉电模式、Standby 模式以及

ATmega16单片机芯片资料

ATmega16单片机芯片资料 产品特性 ? 高性能、低功耗的8 位AVR? 微处理器? 先进的RISC 结构 – 131 条指令–大多数指令执行时间为单个时钟周期 – 32个8 位通用工作寄存器 –全静态工作 –工作于16 MHz 时性能高达16 MIPS –只需两个时钟周期的硬件乘法器 ? 非易失性程序和数据存储器 – 16K 字节的系统内可编程Flash 擦写寿命: 10,000 次 –具有独立锁定位的可选Boot 代码区 通过片上Boot 程序实现系统内编程 真正的同时读写操作 – 512 字节的EEPROM 擦写寿命: 100,000 次 – 1K字节的片内SRAM –可以对锁定位进行编程以实现用户程序的

加密 ? JTAG 接口( 与IEEE 1149.1 标准兼容) –符合JTAG 标准的边界扫描功能 –支持扩展的片内调试功能 –通过JTAG 接口实现对Flash、EEPROM、熔丝位和锁定位的编程 ? 外设特点 –两个具有独立预分频器和比较器功能的8 位定时器/ 计数器 –一个具有预分频器、比较功能和捕捉功能的16 位定时器/ 计数器 –具有独立振荡器的实时计数器RTC –四通道PWM – 8路10 位ADC 8 个单端通道 TQFP 封装的7 个差分通道 2 个具有可编程增益(1x, 10x, 或200x)的差分通道 –面向字节的两线接口 –两个可编程的串行USART –可工作于主机/ 从机模式的SPI 串行接口

–具有独立片内振荡器的可编程看门狗定时器 –片内模拟比较器 ? 特殊的处理器特点 –上电复位以及可编程的掉电检测 –片内经过标定的RC 振荡器 –片内/ 片外中断源 – 6种睡眠模式: 空闲模式、ADC 噪声抑制模式、省电模式、掉电模式、Standby 模式以及 扩展的Standby 模式 ? I/O 和封装 – 32 个可编程的I/O 口 – 40引脚PDIP 封装, 44 引脚TQFP 封装, 与44 引脚MLF 封装 ? 工作电压: – ATmega16L:2.7 - 5.5V – ATmega16:4.5 - 5.5V ? 速度等级 – 0 - 8 MHz ATmega16L – 0 - 16 MHz ATmega16 ? ATmega16L 在1 MHz, 3V, 25°C 时的功耗

基于AVR单片机--Atmega16的1602液晶使用

基于AVR单片机--Atmega16的1602液晶使用 本程序使用AVR单片机Atmega16控制1602液晶,并在液晶上显示字符 #include #include #include"1602.h" uchar L[]="qq I Miss You"; void display()//显示函数 { write_com(0x80); show_string(L);//显示字符串 } void init()//初始化函数 { DDRC=0xff;//全部设置为输出 DDRA|=(1<<7)|(1<<6);//设置PA口的第6位(1602的rs控制脚)和第7位(1602的en控制脚)为输出 init_1602();//1602液晶初始化 } int main() { init(); display(); while(1); } //1602液晶显示头文件 #define uint unsigned int #define uchar unsigned char //PA口的第6位(1602的rs控制脚)和第7位(1602的en控制脚) #define lcdrs0 PORTA &= ~(1 << 6)//第6位输出低电平 #define lcdrs1 PORTA |= (1 << 6)//第6位输出高电平 #define lcden0 PORTA &= ~(1 << 7)//第7位输出低电平 #define lcden1 PORTA |= (1 << 7)//第7位输出高电平 void write_com(uchar com)//写命令函数 { lcdrs0; PORTC=com; _delay_ms(5); lcden1; _delay_ms(5); lcden0; }

Atmega16单片机介绍

Atmega16单片机介绍 ATmega16是基于增强的AVR RISC结构的低功耗8 位CMOS微控制器。由于其先进的指令集以及单时钟周期指令执行时间,ATmega16 的数据吞吐率高达1 MIPS/MHz,从而可以缓减系统在功耗和处理速度之间的矛盾。 ATmega16 AVR 内核具有丰富的指令集和32 个通用工作寄存器。所有的寄存器都直接与算逻单元(ALU) 相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。这种结构大大提高了代码效率,并且具有比普通的CISC 微控制器最高至10 倍的数据吞吐率。 ATmega16 有如下特点:16K字节的系统内可编程Flash(具有同时读写的能力,即RWW),512 字节EEPROM,1K 字节SRAM,32 个通用I/O 口线,32 个通用工作寄存器,用于边

界扫描的JTAG 接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/ 计数器(T/ C),片内/外中断,可编程串行USART,有起始条件检测器的通用串行接口,8路10位具有可选差分输入级可编程增益(TQFP 封装) 的ADC ,具有片内振荡器的可编程看门狗定时器,一个SPI 串行端口,以及六个可以通过软件进行选择的省电模式。 工作于空闲模式时CPU 停止工作,而USART、两线接口、A/D 转换器、SRAM、T/C、SPI 端口以及中断系统继续工作;掉电模式时晶体振荡器停止振荡,所有功能除了中断和硬件复位之外都停止工作;在省电模式下,异步定时器继续运行,允许用户保持一个时间基准,而其余功能模块处于休眠状态;ADC 噪声抑制模式时终止CPU 和除了异步定时器与ADC 以外所有I/O 模块的工作,以降低ADC 转换时的开关噪声;Standby 模式下只有晶体或谐振振荡器运行,其余功能模块处于休眠状态,使得器件只消耗极少的电流,同时具有快速启动能力;扩展Standby 模式下则允许振荡器和异步定时器继续工作。 本芯片是以Atmel 高密度非易失性存储器技术生产的。片内ISP Flash 允许程序存储器通过ISP 串行接口,或者通用编程器进行编程,也可以通过运行于AVR 内核之中的引导程序进行编程。引导程序可以使用任意接口将应用程序下载到应用Flash存储区(ApplicationFlash Memory)。在更新应用Flash存储区时引导Flash区(Boot Flash Memory)的程序继续运行,实现了RWW 操作。通过将8 位RISC CPU 与系统内可编程的Flash 集成在一个芯片内,ATmega16 成为一个功能强大的单片机,为许多嵌入式控制应用提供了灵活而低成本的解决方案。ATmega16 具有一整套的编程与系统开发工具,包括:C 语言编译器、宏汇编、程序调试器/ 软件仿真器、仿真器及评估板。 2.1.1 ATmega16产品特性 u 高性能、低功耗的8位AVR微处理器 l 先进的RISC 结构 l 131条指令 l 大多数指令执行时间为单个时钟周期 l 32个8位通用工作寄存器 l 全静态工作 l 工作于16MHz时性能高达16MIPS l 只需两个时钟周期的硬件乘法器 l 非易失性程序和数据存储器 l 16K 字节的系统内可编程Flash,擦写寿命: 10,000次 l 具有独立锁定位的可选Boot代码区,通过片上Boot程序实现系统内编程,真正的同时读写操作 l 512 字节的EEPROM,擦写寿命: 100,000次 l 1K字节的片内SRAM l 可以对锁定位进行编程以实现用户程序的加密 l JTAG 接口( 与IEEE 1149.1 标准兼容) l 符合JTAG 标准的边界扫描功能 l 支持扩展的片内调试功能 l 通过JTAG 接口实现对Flash、EEPROM、熔丝位和锁定位的编程 外设特点 u 两个具有独立预分频器和比较器功能的8位定时器/计数器 l 一个具有预分频器、比较功能和捕捉功能的16位定时器/计数器

ATmega16单片机实现串口收发数据

1、编译环境:CodeVisionAVR 2、功能:实现以5AH开头的6个字节数据帧的接收及发送 3、接收及发送方式:中断接收,查询发送 4、校验方式:所有字节相加模除256等于0则接收正确,否则不予接收程序如下所示:#include "mega16.h" #define uchar unsigned char #define uint unsigned int #define BAUD 9600 #define F_CLK 400000 0 #define MATCH_OK 1; #define MATCH_ERROR 0; #define UDRE 5 volatile uchar i=0; volatile uchar recc_flag=0; //命令字节接收标志(recieve command 简写成 recc) volatile uchar comm_flag=0; //命令帧接收完毕标志(command 简写成 comm) volatile uchar comm; //定义变量,用于传递UDR0中接收到的命令字 volatile uchar command[6]={0x00,0x00,0x00,0x00,0x00,0x00}; //定义长度为6的数组用于接收长度为6字节的命令帧,并将所有元素初始化为0x00 /*延时*/ void delay(uint t) { while(t--); } /*****/ /*******帧头校验******/ uchar check_comm(void) { uchar i; uint result=0; for(i=0;i<6;i++) { result+=command[i]; } if((result%256)==0) { return MATCH_OK; } else { return MATCH_ERROR; } } /*********************/ void uart_init(void) { UCSRA=0x00; UCSRB=0x98; //接收结束中断使能;数据接收使能;数据发送使能 UCSRC=0x06; //工作在异步模式;无校验;1位停止位;字符长度为8位 UBRRH=(F_CLK/BAUD/16-1)/256; UBRRL=(F_CLK/BAUD/16-1)%256; //系统时钟为4MHz,波特率为9600bps } void init_device(void) { #asm("cli") //关中断 PORTA=0x04; DDRA=0x04; PORTB=0xFE; DDRB=0xFF; PORTD=0xFF; DDRD=0x02; MCUCR=0x00; TIMSK=0x00; uart_init(); //串口初始化 #asm("sei") //重开中断 } interrupt[USART_RXC] void usart_rec(void) {

基于ATmega16单片机的USART串口通信测试程序

/***************************************************************************** 编译环境:ICC AVR。 文件名:基于ATmega16单片机的USART串口通信测试程序 功能:利用ATmega16的USART,从TXD异步串出数据,将TXD与RXD短接,从RXD输入,通过PC口 送到一个LED数码管显示,实现了自发自收的过程? 作者:赵国朋 班级:鹏程001 时间:2013年04月5日 修改:无 备住:一.硬件接口电路描述 1.晶振:8MHz 2.MCU的PC口与共阴极数码管相接 3.TXD与RXD相接 TXD --- RXD /*****************************************************************************/ #include //包含单片机型号头文件 #include //包含"位操作"头文件 #define uchar unsigned char //宏定义 #define uint unsigned int #define ulong unsigned long #define BAUD 9600 //波特率采用9600b/s #define CRYSTAL 8000000 //系统时钟为8MHz //计算和定义波特率设置参数 #define BAUD_SETTING (uint)((ulong)CRYSTAL/(16*(ulong)BAUD)-1) #define BAUD_H (uchar)(BAUD_SETTING>>8) #define BAUD_L (uchar)(BAUD_SETTING) //USART控制和状态寄存器的标志位定义 #define FRAMING_ERROR (1<

基于AVR—ATMEGA16单片机的多功能电子密码锁模拟设计

基于A VR—ATMEGA16单片机的多功能电子密码锁模拟设计 摘要本文基于A VR-ATMEGA16单片机及实训台外围电路支持,C语言编程完成了具有密码设定、密码清除、单位更改等多功能电子密码锁的模拟设计,对单片机初学者有一定的启发作用。 关键词ATMEGA16单片机;C语言;电子密码锁 0 引言 近年来,单片机以其高集成度、高可靠性、控制功能强、功耗低、性价比优异等特点,在控制领域发挥着不小的作用,无论工业部门,国防部门,事业部门,乃至日常生活随处都有它的身影。A VR-ATMEGA单片机是全球著名半导体公司艾特梅尔公司推出的,其中ATMEGA16单片机是8位机,虽然它的内存较小,只有16 K,但是性价比较高,用在小型的控制系统中或者学校教学都是不错的选择。 本文基于A VR-ATMEGA16单片机,及CodeVisonA VR C编译器完成多功能电子密码锁的模拟设计。 1 设计要求 多功能电子密码锁的设计要求如下: 1)上电后,显示“000000”;2)在设定密码和输入密码过程中,如果不小心出现错误,可按“取消”键取消此次键入值,然后可继续输入;3)设定密码结束后按“设定”键可以设定密码,密码设定成功后,显示“111111”;4)输入密码完毕后,按“确认”键,若输入密码正确则绿色发光二极管亮(密码锁打开);若密码不正确,则红色发光二极管亮;5)输入密码时,输入密码的位显示“8”,以防密码泄露。6)按“清除”键可以重新设定密码。 2 设计步骤 完成多功能密码锁设计所需硬件设备:天煌科教仪单片机实训装置中的单片机最小应用系统模块、阵列式键盘模块、十六位逻辑电平显示模块、动态扫描显示模块;计算机;双龙下载烧写器等。设计步骤如下: 1)根据设计要求,进行I/O端子分配,具体如下: PA口:字形端;PB口字位端;PD口:4*4矩阵键盘;PC0:绿色指示灯;PC1红色指示灯 2)程序设计方案根据要求,画出功能框图如下:

atmega16所有寄存器

Atmega16寄存器 一.引脚说明 表1 引脚说明

PD4 8 位双向I/O 口 13 OC1B T/C1 输出比较B 匹配输出 PD5 8 位双向I/O 口 14 OC1A T/C1 输出比较A 匹配输出 PD6 8 位双向I/O 口 15 ICP1 T/C1 输入捕捉引脚 PD7 8 位双向I/O 口 16 OC2 T/C2 输出比较匹配输出 17 VCC 数字电路的电源 18 GND 地 PC0 8 位双向I/O 口 19 SCL 两线串行总线时钟线 PC1 8 位双向I/O 口 20 SDA 两线串行总线数据输入/ 输出线 PC2 8 位双向I/O 口 21 TCK JTAG 测试时钟 PC3 8 位双向I/O 口 22 TMS JTAG 测试模式选择 PC4 8 位双向I/O 口 23 TDO JTAG 测试数据输出 PC5 8 位双向I/O 口 24 TDI JTAG 测试数据输入 PC6 8 位双向I/O 口 25 TOSC1 定时振荡器引脚1 PC7 8 位双向I/O 口 26 TOSC2 定时振荡器引脚2 27 AVCC 端口A与A/D转换器的电源。。不使用ADC时,该引脚应直接与VCC连接。使用ADC时应通过一个低 通滤波器与VCC 连接。

28 AGND A/D 的模拟地 29 AREF A/D 的模拟基准输入引脚 PA7 8 位双向I/O 口 30 ADC7 ADC 输入通道7 PA6 8 位双向I/O 口 31 ADC6 ADC 输入通道6 PA5 8 位双向I/O 口 32 ADC5 ADC 输入通道5 PA4 8 位双向I/O 口 33 ADC4 ADC 输入通道4 PA3 8 位双向I/O 口 34 ADC3 ADC 输入通道3 PA2 8 位双向I/O 口 35 ADC2 ADC 输入通道2 36 PA1 8 位双向I/O 口 ADC1 ADC 输入通道1 PA0 8 位双向I/O 口 37 ADC0 ADC 输入通道0 38 VCC 数字电路的电源 39 GND 地 PB0 8 位双向I/O 口 40 T0 T/C0 外部计数器输入 XCK USART 外部时钟输入/ 输出 PB1 8 位双向I/O 口 41 T1 T/C1 外部计数器输入 PB2 8 位双向I/O 口 42 AIN0 模拟比较正输入 INT2 外部中断2 输入 43 PB3 8 位双向I/O 口

ATmega16单片机的使用

ATmega16单片机的使用 ——实验一 Atmega16定时器T/C0实现按键扫描 ——实验二 ATmega16单片机的ADC使用举例 指导老师:黄刚 班级:0720222 姓名:李锋锐 学号:28

试验《一》 Atmega16定时器T/C0实现按键扫描 (一)实验目的: 用ATmega16实现同时对两个按键定时扫描,要求扫描周期为10MS ,当AJ1按下,LED2点亮,并且BELL 蜂鸣声,当AJ1松开,LED2熄灭,BELL 不响;当AJ2按下,LED3点亮,并且BELL 发出蜂鸣声,当AJ2松开,LED3熄灭,BELL 不响。 (二)实验原理(硬件设计): 如图5-37所示,端口PD.3、PD.4为输入端,分别接AJ1和AJ2;端口PD.6、PD.7为输出模式,分别接LED2和LED3;端口PA.4为输出,通过三极管T1来控制蜂鸣器。 图5-36 基于Atmega16单片机定时器的按键扫描电路图 (三)实验原理(软件设计): 选用外部7.3728MHz 的晶振为系统时钟,按键扫描间隔定位10ms ,定时器T/C0采用CTC 模式,T/C0时钟选择1024分频后的系统时钟,并启用中断。 利用CTC 模式的工作原理,OCR0应赋的值由以下方程确定: 36 1010)10(102410 3728.71-?=+???OCR 于是:) (即0x47710=OCR 。 允许比较匹配中断,在中断程序里做标志位设置,判断标志位满足条件时,程序再读取键盘的状态,确定有无键按下以及按下键的具体操作。 程序如下: (1) L5-6.c #include #include"key.h" #define Led2 PORTD_Bit6//定义led2 #define Led3 PORTD_Bit7//定义led3 #define Bell PORTA_Bit4//定义bell unsigned char flag=0;

AVR atmega16单片机端口地址

/* avr/iom16.h - definitions for ATmega16 */ #ifndef _AVR_IOM16_H_ #define _AVR_IOM16_H_ 1 /* This file should only be included from , never directly. */ #ifndef _AVR_IO_H_ # error "Include instead of this file." #endif #ifndef _AVR_IOXXX_H_ # define _AVR_IOXXX_H_ "iom16.h" #else # error "Attempt to include more than one file." #endif /* Registers and associated bit numbers */ #define TWBR _SFR_IO8(0x00) #define TWSR _SFR_IO8(0x01) #define TWPS0 0 #define TWPS1 1 #define TWS3 3 #define TWS4 4 #define TWS5 5 #define TWS6 6 #define TWS7 7 #define TWAR _SFR_IO8(0x02) #define TWGCE 0 #define TWA0 1 #define TWA1 2 #define TWA2 3 #define TWA3 4 #define TWA4 5 #define TWA5 6 #define TWA6 7 #define TWDR _SFR_IO8(0x03) /* Combine ADCL and ADCH */ #ifndef __ASSEMBLER__ #define ADC _SFR_IO16(0x04) #endif #define ADCW _SFR_IO16(0x04) #define ADCL _SFR_IO8(0x04) #define ADCH _SFR_IO8(0x05) #define ADCSRA _SFR_IO8(0x06) #define ADPS0 0 #define ADPS1 1 #define ADPS2 2 #define ADIE 3 #define ADIF 4 #define ADATE 5 #define ADSC 6 #define ADEN 7 #define ADMUX _SFR_IO8(0x07) #define MUX0 0 #define MUX1 1 #define MUX2 2 #define MUX3 3 #define MUX4 4 #define ADLAR 5 #define REFS0 6 #define REFS1 7 #define ACSR _SFR_IO8(0x08) #define ACIS0 0 #define ACIS1 1 #define ACIC 2 #define ACIE 3 #define ACI 4 #define ACO 5 #define ACBG 6 #define ACD 7 #define UBRRL _SFR_IO8(0x09) #define UCSRB _SFR_IO8(0x0A) #define TXB8 0 #define RXB8 1 #define UCSZ2 2

基于ATMEGA16单片机的应用及探讨

基于ATMEGA16单片机的应用及探讨摘要随着人类社会的发展与进步,人类对通信的依赖程度越来越高。无线通信以其不需铺设明线,使用便捷等特点,在现代通信领域占据重要地位。为此,本文主要阐述了atmega16 单片机应用于无线通信的总体方案及其硬件结构和软件实现方法。 关键词无线传输atmega16spi通信 nrf2401a the application of wireless transmission module on the atmega16 cai ze-hui, jie zong-chang, guo li-feng (department of computer science & technology, china university of mining and technology, xuzhou 221008, china) abstract: this paper describes the overall scheme of the atmega16 microcontroller for wireless communication and its hardware structure and software implementation. the wireless transmission modules described by this article use nrf2401a chip as the core, providing a way of the wireless transmitter and two wireless receptions, the modules plug directly received the atmega16 minimum system board through a 10pin interface which makes it used conveniently. on the communication between the wireless transmission module and the microcontroller, providing two ways:one uses the atmega16 microcontroller’s spi interface and the other use the i/o port simulation spi communication. key words: wireless transmission; atmega16;

相关文档
相关文档 最新文档