ATMEGA16单片机班培训实例
ATmega16单片机定时器讲解资料
位6: TOIE2:T/C2溢出中断使能位。 0:溢出中断禁止; 1:溢出中断使能。
位5: TICIE1:T/C1输入捕捉中断使能位。 0:输入捕捉中断禁止; 1:输入捕捉中断使能。
Page 16
R1 10K
4 /RE T
C0 4.7u
ATm eg a1 6
AJ1
C7 33 OSC1 C6 33
12 PD .3(/INT1)
8 XTAL1
7 XTAL2
L1 R21~28
L2 R29~36
L3 R37~44
L4 R45~52
dp g f e d c b a
dp g f e d c b a
dp g f e d c b a
Page 2
3.1、单片机定时器的基本应用、原理及要素
1、单片机定时器的基本应用 2、单片机定时器的基本原理图 3、单片机定时器的基本要素
Page 3
3.1.1、单片机定时器的基本应用
基本应用:
定时计数器是单片机中最基本的接口之一, 它的用途非常广泛,常用于计数、延时、测量 周期、频率、脉宽、提供定时脉冲信号等。在 实际应用中,对于转速,位移、速度、流量等 物理量的测量,通常也是由传感器转换成脉冲 电信号,通过使用定时计数器来测量其周期或 频率,再经过计算处理获得
Page 11
3.2.1、ATmega16单片机定时器T/C0的组成原理
TC0的比较匹配单元:
Page 12
在引脚的方向寄存器DDRB.3定 义为输出时,当寄存器TCCR0中 的标志位COM0[1:0]中任何一位为 1时,或门M1输出为1,多路数据 选择器S3的通道1被选中,如果端 口PB.3定义为输出时,三态门F2 被打开,OC0将替代引脚PB3原来 的I/O功能,端口PB.3上输出的就 是波形发生器产生的波形。当 COM0[1:0]都为0时,选择器S3的通 道0被选中,PB.3口输出的则是端 口PORT之值。
冰檐教程系列之ATMEGA16入门篇 (2)
片内经过标定的 RC 振荡器 片内/片外中断源 6 种睡眠模式: 空闲模式、ADC 噪声抑制模式、省电模式、掉电模式、Standby 模式以及扩展的 Standby 模 式 u I/O 和封装 32 个可编程的 I/O 口 40 引脚 PDIP 封装, 44 引脚 TQFP 封装, 与 44 引脚 MLF 封装 大家有可能对上面特性和外设的某些概念不理解,不用着急,大家会在后面慢慢理解的,我会在后面详细介绍, 那现在正式踏入 ATMEGA16 的学习之旅!
然后我们按照需求和设计设置好熔丝表,将<只读>的勾去掉,点<写入>,此时熔丝就设置好了,为了防止以后 误操作,将<只读>打上勾。这样就可以烧录程序了。下面介绍熔丝的具体设置规则: BODLEVEL: BOD 电平选择 1:2.7V 电平; 0:4.0V 电平---------本开发板设置为 1 (未打勾) BODEN: BOD 功能控制 1:BOD 功能禁止;0:BOD 功能允许---------本开发板设置为 1 注:BOD(Brown-out Detection) 掉电检测电路,如果 BODEN 使能(打勾)启动掉电检测,检测电平由 BODLEVEL 决定,一旦 VCC 下降到触发电平(2.7v 或 4.0v)以下,MUC 复位。 JTAGEN: 1:JTAG 禁止; 0:JTAG 允许 ---------本开发板设置为 1 OCDEN: 1:OCD 功能禁止;0:OCD 允许---------本开发板设置为 1 注:OCDEN(On-chip Debug)片上调试使能位 JTAGEN:使能 JTAG 测试访问端口。 SPIEN: 1:SPI 下载禁止;0:SPI 下载使能---------本开发板设置为 0 CKOPT: CKOPT=0:高幅度振荡输出;CKOPT=1:低幅度振荡输出 ---------本开发板设置为 0 EEAVE: 烧录时 EEPROM 数据保留 1:不保留;0:保留---------本开发板设置为 0 BOOTRST: 复位入口选择 1:程序从 0x0000 地址开始 0:复位后从 BOOT 区执行(设置为 1) BOOTSZ1/0: 引导区程序大小及入口 00: 1024Word/0xc00; 01: 512Word/0xe00; 10: 256Word/0xf00; 11: 128Word/0xf80 本开发板设置为 00 SUT1/0: 和复位启动的一个延时有关,本开发板设置为 11 CKSEL3/0: 时钟源选择,本开发板使用的是外接 11.0592M 的晶体,所以设置为 1111 最后是锁定位,LB0 和 LB1,本开发板设置为 1,即未锁定,设置这两位需谨慎。 下面是时钟配置表:
AVR单片机教程14—第十四课 ATmega16L的定时计数器学习
——————————————————————————第十四课ATmega16L的定时/计数器学习本教程节选自周兴华老师《手把手教你学AVR单片机C程序设计》教程,如需转载,请注明出处!读者可通过当当网、淘宝网等网站购买本教程,如需购买配书实验器材,可登陆周兴华单片机培训中心网购部自助购买!ATmega16L有两个8位定时/计数器(T/C0、T/C2)和一个16位定时/计数器(T/C1)。
每一个计数器都支持PWM(脉冲宽度调制)输出功能。
PWM输出在电机控制、开关电源、信号发生等领域有着广泛的应用。
ATmega16L的定时/计数器时钟是可以选择的。
它的时钟部分包括预分频器和一个多路选择器。
预分频器可被认为是单片机开发中一个有多级输出的分频器。
ATmegal6L用一个10位的计数器把输入时钟分为4种可选择的分频输出。
多路选择器可设置使用某一个分频输出,或者不使用分频输出和使用外部引脚输人时钟。
图9-1为预分频器的基本结构。
——————————————————————————图9-1 预分频器的基本结构9.2 ATmega16L定时/计数器的时钟选择1.使用系统时钟这种情况下使用系统时钟作为预分频器的输入,不过系统时钟的频率一般比较高,所以一般只能实现比较短的定时。
预分频比可通过设置TCCRx的CSx2、CSxl和CSx0来选定。
表9-1给出一个预分频设置值和分频比关系。
TCCRx同步计数器0和1Pck=CK 同步/异步计数器2 Pck=f(AS2)210CSx2CSx1CSx0Tck0,Tck1Tck2000Pck(系统时钟)Pck(系统时钟/异步时钟)001Pck/8Pck/8010Pck/64Pck/32011Pck/256Pck/64100Pck/1024Pck/128101引脚Tx下降沿Pck/256110引脚Tx上升沿Pck/512111Pck Pck/1024表9-1 预分频设置值和分频比关系2.使用异步时钟ATmegal6L的T/C2可以使用外部的异步时钟作为时钟源,这时可以在单片机的TOSC1和TOSC2——————————————————————————两个引脚之间接一个石英晶体或者陶瓷振荡器,和内部的振荡器连接起来。
ATMEGA16单片机班培训实例
A VR单片机(ATmega16)培训宗旨:引导为主培养编程思维时间分配(一学期):三分之一时间讲解;三分之二时间动手实验。
具体时间:星期六晚上6:00~9:00内容形式:1、软、硬件知识(一)讲解2、实验经验3、常用程序(思维)分析1、专业讲座(请资深讲师)(二)讲座2、课外讲座(如书记等)3、电影(专业性强的短片)(李世维讲座)1、硬件测试与软件使用(三)实验内容2、汇编语言编程3、A VR单片机内部资源的使用建议方法:先由指导老师讲解实验内容的原理、特点、应用、实践应用中的经验以及编程思维的分析,再由会员自己理解、自己验证、运用原理设计应用、调试程序。
在会员动手的过程中,由摇篮的部长(三名)从旁指导。
实验一软件和硬件的认识一、实验目的:1、掌握硬件原理。
2、初步掌握实验板的使用方法。
3、熟悉软件工作界面。
二、实验仪器:ATmage16实验板一块PC机一台三、实验内容及步骤:1、插上电源,按下开关。
观察批示灯是否点亮。
电源(可输入7~12V)ATmega16管脚图2、由原理可知I/O口的批示灯为低电平亮,在实验板上取地与I/O口相接,观察是否点亮。
I/O口LED显示与接口3、打开编程界面,点击各栏,认识各栏的用途。
A VRICC IDE 软件的工作界面4、输入以下程序:#include <iom16v.h>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口的灯是否被点亮。
atmega16单片机c语言程序设计经典实例
atmega16单片机c语言程序设计经典实例中括号在C语言中用于表示数组、结构体、联合体和枚举类型等的定义和使用。
在ATmega16单片机的C语言程序设计中,我们经常会用到数组和结构体,因此本文将以中括号为主题,详细介绍ATmega16单片机上C语言程序设计的经典实例,包括数组的定义和使用、结构体的定义和使用、联合体的定义和使用以及枚举类型的定义和使用。
一、数组的定义和使用数组是一种用于存储一组相同类型的数据项的集合。
在ATmega16单片机上,我们可以使用数组来存储和操作多个引脚的状态、多个传感器的数据等。
1. 数组的定义在C语言中,可以使用方括号来定义一个数组。
下面是一个例子,定义了一个长度为5的整型数组:int array[5];其中,int表示数组的元素类型,array为数组名,[5]表示数组的长度。
2. 数组的初始化数组可以在定义的同时进行初始化。
例如,可以使用大括号将数组的元素初始化为指定的值。
下面是一个例子,将数组的元素初始化为1、2、3、4、5:int array[5] = {1, 2, 3, 4, 5};3. 数组的访问可以使用下标(在中括号内)来访问数组的元素。
数组的下标从0开始,最大值为数组长度减1。
下面是一个例子,访问数组的第一个元素和最后一个元素:int firstElement = array[0];int lastElement = array[4];可以使用循环结构来遍历数组的所有元素:for (int i = 0; i < 5; i++) {访问数组的第i个元素int element = array[i];其他操作}二、结构体的定义和使用结构体是一种可以存储不同类型数据项的数据结构。
在ATmega16单片机上,结构体可以用于存储和操作多个相关的数据项,比如传感器的位置和数值等。
1. 结构体的定义在C语言中,可以使用关键字struct来定义结构体。
下面是一个例子,定义了一个包含姓名和年龄的结构体:struct Person {char name[20];int age;};其中,Person为结构体名,name和age为结构体的成员。
Atmega16单片机开发教程
Atmega16寄存器Atmega16寄存器一.引脚说明表1 引脚说明引脚序号 引脚名称 引脚功能PB5 8 位双向I/O 口, 具有可编程的内部上拉电阻。
其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。
作为输入使用时, 若内部上拉电阻使能,端口被外部电路拉低时将输出电流。
在复位过程中,即使系统时钟还未起振,端口A 处于高阻状态。
1MOSI SPI 总线的主机输出/ 从机输入信号PB6 8 位双向I/O 口2MISO SPI 总线的主机输入/ 从机输出信号PB7 8 位双向I/O 口3SCK SPI 总线的串行时钟4 RESET 复位输入引脚。
持续时间超过最小门限时间的低电平将引起系统复位。
5 VCC 数字电路的电源6 GND 地7 XTAL2 反向振荡放大器的输出端8 XTAL1 反向振荡放大器与片内时钟操作电路的输入端PD0 8 位双向I/O 口9RXD USART 输入引脚PD1 8 位双向I/O 口10TXD USART 输出引脚PD2 8 位双向I/O 口11INT0 外部中断0 的输入PD3 8 位双向I/O 口12INT1 外部中断1 的输入Atmega16寄存器PD4 8 位双向I/O 口13OC1B T/C1 输出比较B 匹配输出PD5 8 位双向I/O 口14OC1A T/C1 输出比较A 匹配输出PD6 8 位双向I/O 口15ICP1 T/C1 输入捕捉引脚PD7 8 位双向I/O 口16OC2 T/C2 输出比较匹配输出17 VCC 数字电路的电源18 GND 地PC0 8 位双向I/O 口19SCL 两线串行总线时钟线PC1 8 位双向I/O 口20SDA 两线串行总线数据输入/ 输出线PC2 8 位双向I/O 口21TCK JTAG 测试时钟PC3 8 位双向I/O 口22TMS JTAG 测试模式选择PC4 8 位双向I/O 口23TDO JTAG 测试数据输出PC5 8 位双向I/O 口24TDI JTAG 测试数据输入PC6 8 位双向I/O 口25TOSC1 定时振荡器引脚1PC7 8 位双向I/O 口26TOSC2 定时振荡器引脚227 AVCC 端口A与A/D转换器的电源。
ATMEGA16学习板原理图
5
6
USB供电
J5 R2 390 V_IN DD+ GND D2 RED10 P3.1 3 USB_JACK U3 OUT LM7805 GND IN 1 1 2 3 4 C6 C7 USB_IN 0.1u D10u/25V D+ J6
SW1
C1 0.1u C2 D 0.1u C3 0.1u
D4
D12 D11 D10 D9 LED1 P1.0
1 VCC C4 0.1u U2 1 2 3 4 5 6 7 8 C1+ VCC VS+ GND C1T1OUT C2+ R1IN C2R1OUT VST1IN T2OUT T2IN R2IN R2OUT MAX232 DB9 VCC 16 15 14 13 12 11 10 P3.1_1 9 P3.0_1 J4 1 6 2 7 3 8 4 9 5 RXD TXD D1 GREEN9 P3.0 R1 390
DPY a a b c f b g d e e c d f dp g dp
DPY a a b c f b g d e e c d f dp g dp
DPY a a b c f b g d e e c d f dp g dp
8位数码管
BLK BLA VOUT RST NC PSB DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 E RW RS V0 VCC GND
2
3
4 VCC R3 390 U4 1 2 3 4 A0 A1 A2 GND 24C02 J8 P1.5 1 3 RST 5 C17 P1.7 7 10u P1.6 9 VCC WP SCL SDA 8 7 6 5 P1.0 P1.1 P1.2 VCC RP1 VCC 1 2 3 4 5 6 7 8 9 VCC R1 R2 R3 R4 R5 R6 R7 R8 330
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应赋的值由以下方程确定:361010)10(1024103728.71-⨯=+⨯⨯⨯OCR 于是:)(即0x47710=OCR 。
允许比较匹配中断,在中断程序里做标志位设置,判断标志位满足条件时,程序再读取键盘的状态,确定有无键按下以及按下键的具体操作。
程序如下:(1) L5-6.c#include<iom16.h> #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)10msTIMSK=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<iom16.h>#define AJ1 PIND_Bit3//定义按键1#define AJ2 PIND_Bit4//定义按键2unsigned 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按下,返回1key_return=1;break;case 0x08://AJ2按下,返回2key_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为例) ppt课件
2020/4/3
4
我去电子市场买来一片单片机!
我能且只能这样看着它—— 数数它的腿,瞅瞅它上面的印字!
ATmega16L-8
40引脚 DIP封装
2020/4/3
11
ATmega16单片机的管脚排列
2020/4/3
PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 RESET VCC GND XTAL2 XTAL1 PD0 PD1 PD2 PD3 PD4 PD5 PD6
01
40
02
39
03
38
04
37
05
36
06
35
07
34
08
01
40
02
39
03
38
04
37
VCC
MOSI
05
36
(MOSI)PB5 06
35
+5V
(MISO)PB6 07
34
+5V
(SCK)PB7 RESET
08 09
33
+5V
32 AREF
4K7
RESET
VCC 10
31 GND
GND 11 ATmega16 30 AVCC
104
XTAL2 12
29
+
XTAL1 13
单片机片上开发方法
(ATmega16为例)
王浩 98ID: woot E-mail: wanghao@
2020/4/3
AVR单片机(C语言)项目开发实践教程项目4 ATmega16单片机IO接口应用
【知识目标】
1. 了解LED发光二极管的驱动控制方法 2. 了解ATmega16单片机数字I/O口的结构 3. 了解ATmega16单片机数字I/O口的相关寄
存器功能
2021/8/3
【项目知识点与技能点】
1. 掌握单片机控制LED发光二极管驱动电 路的连接方法
2. 掌握ATmega16单片机数字I/O口的相关 寄存器功能的设置
位 PORTA.7 PORTA.6 PORTA.5 PORTA.4 PORTA.3 PORTA.2 PORTA.1 PORTA.0
复位值 0
0
0
0
0
0
0
0
2021/8/3
二、I/O接口的寄存器
• 端口输入寄存器:PINX(PINA)-----只读
位 PINA.7 PINA.6 PINA.5 PINA.4 PINA.3 PINA.2 PINA.1 PINA.0 复位值 N/A N/A N/A N/A N/A N/A N/A N/A
①DDRA为A口数据方向寄存器,用来定义A口的通讯方 向(输入/输出);
②PORTA为A口数据寄存器,用来输出数据(输入时, PORTX为高,打开上拉电阻);当PORTx=1时,I/O引脚高 电平,可提供输出20mA电流;当PORTx=0时,I/O引脚低电 平,可吸纳20mA电流。因此,AVR的I/O在输出方式下提供 了比较大驱动能力,可以直接驱动LED等小功率外围器件。
AVR单片机(C语言)项目开发实践 教程项目4 ATmega16单片机IO接口应
用
项目四 ATmega6单片机I/O口应用
• 任务一 项目知识点学习 • 任务二 LED闪烁灯控制 • 任务三 LED开关灯控制 • 任务四 汽车转向灯控制 • 任务五 霓虹灯控制 • 任务六 继电器控制照明设备
AVRATmega16实验教程
A VR学习笔记(基于LT_Mini_M16)一、点亮发光二极管一、实验内容和目的本实验通过硬件电路和软件程序,利用ATMega16单片机来控制发光二极管的点亮和熄灭。
通过此实验初步掌握单片机的I/O口功能。
二、硬件电路1、电路分析(对照LT_Mini_M16原理图)1)电源电路:外接稳压直流电源(最好是DC9V)加到电路的U1处,经过电容C16稳压滤波后加到稳压模块AMS1117-5.0上,然后连接到电源开关按钮S1,从开关按钮出来后经过发光二极管D9和电阻R7,再经过电容C1、C2、C3、C4、C5、C7稳压滤波后加到单片机以及各个模块的电源端。
分析:a) 电容的作用是稳压滤波,其中C1、C2、C3、C4、C5这5电容为0.1PF (俗称104电容,一般为瓷片电容)。
主要作用为滤出电源电路中的高频成分;而C16、C7是电解电容,主要作用是稳压,即把电源电路中的尖峰电压拉低到正常电压水平;C16是稳定外接直流电源的电压(9V),C7是稳定AMS1117-5.0输出的5V电压。
b)稳压芯片采用ASM1117-5.0,该稳压芯片输入电压范围为6.5V-15V,输出电压稳定在5.0+0.1V,最大输出电流可达1A,可以满足一般电路需要。
c) 电源开关按钮S1的作用当然是接通和断开电源了。
在此电路中S1采用的是单刀双掷开关,一旦断开电源,则电源的正负极都断开了。
d)发光二极管D9的作用是指示电源是否连接成功,如果外部电源成功的连接上,则发光二极管发光指示电源连接成功;电阻R7的作用是对发光二极管进行限流,一般发光二极管只能通过10mA左右的电流,且发光二极管上面的压降只需要1.5V左右,加到发光二极管上面的电流如果超出额定值,则会烧毁。
而系统工作的电压是5V,如果全部加在发光二极管上,则发光二极管很容易就会被烧毁。
所以要在电源和发光二极管之间串接一个限流电阻。
该限流电阻阻值的计算:(VCC-发光二极管上的电压)/流过发光二极管的电流。
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应赋的值由以下方程确定:361010)10(1024103728.71-⨯=+⨯⨯⨯OCR 于是:)(即0x47710=OCR 。
允许比较匹配中断,在中断程序里做标志位设置,判断标志位满足条件时,程序再读取键盘的状态,确定有无键按下以及按下键的具体操作。
程序如下:(1) L5-6.c#include<iom16.h> #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)10msTIMSK=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<iom16.h>#define AJ1 PIND_Bit3//定义按键1#define AJ2 PIND_Bit4//定义按键2unsigned 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按下,返回1key_return=1;break;case 0x08://AJ2按下,返回2key_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应用案例
图 1 电路图
现代制造技术与装备2016年12月-正文-20170105.indd 155
2017/1/6 9:55:20来自 1562.2 控制逻辑
现代制造技术与装备
2016 第 12 期 总第 241 期
void PRINT_INT0(void) //pd2 print 打印信号用于 触发 CCD 拍照处理 { CCD_result=PIND;CCD_result&=BIT(6); //PD6 取拍 照检测结果,合格为零不合格 1 if(CCD_result==0) label_queue|=BIT(7); // 不 合 格给 label_queue 队列第一位置 1,即做剔除标志 label_queue=(label_queue>>1); // 队列右移一位 label_test=label_queue; //label_test 重 新赋值 label_test&=BIT(4); // 出标位是否有 剔除标志 if(label_test!=0) *((unsigned char*)&convey_queue+3)|=0x3e;// 如 果标签队列第四位为 1,它有剔除标志,给输送队列变量第 三字节赋值 0x3e(二进制 00111110),使输送队列里同时 产生 5 个位的剔除(原因后面会有说明)。 ccdtrig_num=100;// 给触发拍照延时及时长,这是 一个时间常数,在定时器 0 time0 定时中断里继续处理, 会产生拍照触发信号,它的延时是用于消抖(标签刚送完 停顿时会有一个抖动),延时后再发拍照信号。 } 3.2 定时器中断程序 time0 用于产生拍照触发脉冲,它先经过一段延时,之后再 发一个脉冲。 void time0(void) { TCNT0=6; //250us if(ccdtrig_num>0) //CCD 拍照触发 { ccdtrig_num--; // 触发延时消抖 if(ccdtrig_num<30) // 给触发脉冲 PORTC|=BIT(0); //PC0 输出到 CCD_TRIG else PORTC&=~BIT(0); } } 3.3 外部中断程序 INT2 输送带队列:用一个无符号长整型变量,程序中定义
MEGA16单片机应用培训教程
MEGA16单片机应用(2010版)一、MEGA16 简介:44脚封装,共32个I/O口(A,B,C,D 4个完整的8位口)MEGA16工作电压为4.0—6.0V。
工作频率为8MHZ(可以更改)。
16K字节的在线可编程Flash存储器。
(1000次擦写寿命)1K字节的片内数据存储器,外设特点:两个具有独立预分频器和比较器功能的8 位定时器/ 计数器一个具有预分频器、比较功能和捕捉功能的16 位定时器/计数器具有独立振荡器的实时计数器RTC。
四通道PWM。
8路10 位ADC。
8 个单端通道。
A VR单片微机大多数指令只需1个时钟周期即可完成。
二、BASCOM—AVR 软件的安装与使用:该软件用BASIC高级程序设计语言编写程序,经自动编译后,可直接下载到A VR单片微机中运行。
软件试用版可到或www.OURA 下载(现为1.11.9.0版)。
试用版软件可安装程序最长为2K或4K字节。
安装的PC电脑使用WINDOS98以上系统。
双击运行SETUP.EXE安装程序,一路点击NEXT或YES 完成安装。
安装完毕后如需汉化,将bascavr.chs文件复制到“Program Files/MCS Electronics/Bascom-avr”文件夹中即可。
编程前须设置以下系统参数:在Option->Compiler->Chip下打开各选项,选定所使用的芯片(MEGA16),工作频率,LCD显示屏为16x2模式等。
(也可以在程序中用命令语句设置,见后面例九)下载方式选择:我们使用南京沁源公司提供的CH341DP.EXE来下载程序,在Programmer窗口中选择External programmer(采用外部的程序下载器),并在other选项卡中选择CH341DP.EXE所在的目录。
点OK 退出。
(见下图)三、用USB口下载程序:1、启动软件:点击“CH341DP.EXE”,即可启动下载工具软件(见图五)。
ATmega16单片机中文技术资料
ATmega16单片机中文技术资料一、概述ATmega16是一款高性能、低功耗的8位微控制器,由Atmel公司推出。
它基于AVR增强型RISC结构,拥有丰富的外设资源和灵活的编程特性,广泛应用于工业控制、消费电子、通信设备等领域。
二、主要特性1. 内核:AVR增强型RISC结构,最高工作频率为16MHz。
2. 存储:16KB的程序存储器(Flash)、512B的EEPROM和1KB 的SRAM。
3. 外设接口:32个通用I/O口、8个通道的10位ADC、2个8位定时器/计数器、1个16位定时器/计数器、1个串行通信接口(USART)、1个串行外设接口(SPI)和1个两线接口(TWI)。
4. 工作电压:2.7V至5.5V,支持低功耗模式。
5. 封装:采用TQFP和PDIP封装,便于嵌入式系统设计。
三、引脚功能1. VCC:电源正极,接2.7V至5.5V电压。
2. GND:电源负极,接地。
3. PA0PA7:端口A,具有通用I/O、模拟输入和外围设备功能。
4. PB0PB7:端口B,具有通用I/O、JTAG接口和外围设备功能。
5. PC0PC7:端口C,具有通用I/O、模拟输入和外围设备功能。
6. PD0PD7:端口D,具有通用I/O和外围设备功能。
7. XTAL1/XTAL2:晶振输入/输出,用于外部晶振或陶瓷谐振器。
8. AVCC:模拟电源,为ADC和模拟电路提供电源。
10.RESET:复位输入,低电平有效。
四、编程与开发1. 编程语言:支持C语言和汇编语言编程。
2. 开发工具:可使用Atmel Studio、AVR Studio等集成开发环境进行程序编写、编译和调试。
3. 烧录方式:通过ISP、JTAG、HVPP等接口进行程序烧录。
本文档旨在为您提供ATmega16单片机的中文技术资料,帮助您更好地了解这款微控制器,为您的项目开发提供支持。
后续内容将详细介绍ATmega16的外设功能、编程方法及应用实例。
ATMEGA16单片机数码管学习板资料
{ horse(j); DelayMS(10);//延时时间约 10MS } for(j=9;j!=0;j--) { horse(j); DelayMS(10); } DelayMS(50); PORTB=0X00; PORTA=Table[0];//显示 0; PORTC=0x0F; DelayMS(100); PORTA=Table[1];//显示 1; PORTC=0x0F; DelayMS(100); PORTA=Table[2];//显示 2; PORTC=0x0F; DelayMS(100); PORTA=Table[3];//显示 3; PORTC=0x0F; DelayMS(100); PORTA=Table[4];//显示 4; PORTC=0x0F; DelayMS(100); PORTA=Table[5];//显示 5; PORTC=0x0F; DelayMS(100); PORTA=Table[6];//显示 6; PORTC=0x0F; DelayMS(100); PORTA=Table[7];//显示 7; PORTC=0x0F; DelayMS(100); PORTA=Table[8];//显示 8; PORTC=0x0F; DelayMS(100); PORTA=Table[9];//显示 9; PORTC=0x0F; DelayMS(100); while(1) { Key_Process();//按键扫描
ATmega16/ ATmega16L 在 1 MHz, 3V, 25°C 时的功耗 正常模式 : 1.1 mA 空闲模式 : 0.35 mA
掉电模式 : < 1 µA
二、功能特性描述
三、板子的功能特点
简要说明: 一、尺寸:83mmX77mm 二、主要芯片:AVR 单片机 三、工作电压:直流 4~6 伏 四、单片机标准十针下载接口。(可使用并口下载线和 USB 下载线下载) 五、特点:1、具有电源指示。 2、所以 I/O 口以引出。 3、四位数码管显示、四位按键输入、八位 LED 发光二极管显示。 4、标准的 7.3728M 晶振。 5、具有上电复位和手动复位。 6、支持 ATMEGAXX 系列单片机 六、有详细使用说明书 七、提供相关软件 八、提供例程及其学习资料
mega16的课程设计
mega16的课程设计一、课程目标知识目标:1. 学生能理解Mega16单片机的内部结构及工作原理,掌握其基本编程方法。
2. 学生能够运用Mega16单片机实现简单的控制系统,如温度传感器数据采集、LED灯控制等。
3. 学生了解Mega16单片机在现实生活中的应用,理解其在我国工业、农业、医疗等领域的地位和作用。
技能目标:1. 学生能够独立完成Mega16单片机的编程与调试,具备基本的故障排查能力。
2. 学生通过实际操作,培养动手能力、团队协作能力和问题解决能力。
3. 学生能够运用所学知识,设计并实现简单的嵌入式系统项目。
情感态度价值观目标:1. 学生培养对单片机及嵌入式系统技术的兴趣,激发学习热情,增强自信心。
2. 学生认识到科技对社会发展的推动作用,树立科技创新意识,提高社会责任感。
3. 学生在学习过程中,养成积极主动、严谨求实的科学态度,培养良好的学习习惯。
课程性质:本课程为实践性较强的学科,注重理论知识与实际操作相结合。
学生特点:学生具备一定的电子技术基础,对单片机有一定了解,但对Mega16单片机的具体应用尚不熟悉。
教学要求:结合学生特点,采用案例教学、项目驱动等方法,引导学生主动参与,提高实践能力。
同时,注重培养学生的团队合作精神和创新能力。
通过课程学习,使学生能够掌握Mega16单片机的基本知识和技能,为后续相关课程及实际应用打下坚实基础。
二、教学内容1. Mega16单片机内部结构及原理:包括CPU、存储器、输入输出接口等,结合教材第二章内容进行讲解。
2. Mega16单片机编程语言及指令系统:以教材第三章为基础,教授学生如何编写和调试程序,掌握汇编语言和C语言编程。
3. 常用外设及其应用:结合教材第四章,介绍温度传感器、LED灯、按键等常见外设的原理和接口技术。
4. 电路设计与调试:参考教材第五章,指导学生进行电路设计,学会使用面包板、示波器等工具,并能进行简单的故障排查。
5. 实际项目案例分析:以教材第六章为例,分析Mega16单片机在实际项目中的应用,如智能家居、自动控制系统等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A VR单片机
(ATmega16)
培训宗旨:引导为主培养编程思维
时间分配(一学期):三分之一时间讲解;
三分之二时间动手实验。
具体时间:星期六晚上6:00~9:00
内容形式:
1、软、硬件知识
(一)讲解2、实验经验
3、常用程序(思维)分析
1、专业讲座(请资深讲师)
(二)讲座2、课外讲座(如书记等)
3、电影(专业性强的短片)(李世维讲座)
1、硬件测试与软件使用
(三)实验内容2、汇编语言编程
3、A VR单片机内部资源的使用
建议方法:先由指导老师讲解实验内容的原理、特点、应用、实践应用中的经验以及编程思维的分析,再由会员自己理解、自己验证、运用原理设计
应用、调试程序。
在会员动手的过程中,由摇篮的部长(三名)从旁
指导。
实验一软件和硬件的认识
一、实验目的:
1、掌握硬件原理。
2、初步掌握实验板的使用方法。
3、熟悉软件工作界面。
二、实验仪器:ATmage16实验板一块
PC机一台
三、实验内容及步骤:
1、插上电源,按下开关。
观察批示灯是否点亮。
电源(可输入7~12V)
ATmega16管脚图
2、由原理可知I/O口的批示灯为低电平亮,在实验板上取地与I/O口相接,观察是否点亮。
I/O口LED显示与接口
3、打开编程界面,点击各栏,认识各栏的用途。
A VRICC IDE 软件的工作界面
4、输入以下程序:
#include <iom16v.h>
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 引脚等效原理图。