文档库 最新最全的文档下载
当前位置:文档库 › ATMEGA16程序实例

ATMEGA16程序实例

ATMEGA16程序实例
ATMEGA16程序实例

本人用ICCAVR编程软件编辑的产生2KHz方波的程序,所用单片机为ATMEG16.

#include "iom16v.h"

#include "macros.h"

//定时器1,CTC输出化函数

void CTC_Init()

{

DDRD|=BIT(4)|BIT(5); //PD4~5引脚为输出状态

TCCR1A=0x50; //比较匹配输出模式,电平取反

TCCR1B|=BIT(3); //方波产生模式位,模式4,OCR1A决定TOP值。

TCCR1B|=BIT(0); //分频为1

//TCCR1B|=BIT(2); //分频为256,如果不是256分频的话,无法实现输出1~10hz 方波

OCR1A=275; //分频为1时,OCR1A初值为275,输出2Khz方波

//OCR1A=2159; //分频为256时,OCR1A初值为2159,输出10Hz方波//OCR1A=21599; //分频为256时,OCR1A初值为21599,输出1Hz方波

}

//主函数

void main()

{

CTC_Init(); //调用CTC_Init()函数

while(1); //程式停止。

}

ATmega16 的IO口使用

项目一:ATmega16 的I/O口使用 一、项目内容: (1)、通过I/O口操作8位发光二极管跑马灯; (2)、通过I/O口驱动数码管; (3)、通过I/O口驱动1602字符点阵型液晶显示模块; (4)、利用I/O口完成键盘的设计与使用。 二、项目目标: (1)、掌握本课程学习的基本载体; (2)、熟悉并掌握C语言的基本语法、常用的语句指令、函数的结构;(3)、掌握ATmega16的I/O口使用; 三、项目任务: 1、8位LED跑马灯 程序: #include"iom16v.h" void Delay_l_ms(void) { unsigned char cnt_i,cnt_j; for(cnt_i=0;cnt_i<40;cnt_i++) { for(cnt_j=0;cnt_j<33;cnt_j++) { } } } void Delay_n_ms(unsigned int n_ms) { unsigned int cnt_i; for(cnt_i=0;cnt_i>cnt_i); Delay_n_ms(200);

} for(cnt_i=8;cnt_i>0;cnt_i--) { PORTD=(0x80>>cnt_i); Delay_n_ms(200); } } } 仿真图: 绘制仿真图,添加程序后,发光二极管按D0到D7再从D7到D0顺序循环发光。

AVR ATMega16 步进电机驱动程序

AVR ATMega16 步进电机驱动程序 这两天做步进电机的驱动成功,现将程序共享,愿起到抛砖引玉的作用。 此程序可驱动五引线步进电机,通过按键可控制步进电机的转速、方向、三种驱动方式,三种驱动方式分别为:单四拍驱动、双四拍驱动、单双八拍驱动,其中以单双八拍驱动转 速最慢。具体联接方式在程序中有说明。 /************************************ * 步进电机的M16驱动程序 * * 功能:用M16驱动步进电机 * * 实现三种驱动方式 * * 单四拍驱动、双四拍驱动 * * 单双八拍驱动 * * 驱动芯片:ULN2803 * * 联接方式:PC0-3分别通过2803接A-D * * 步进电机公共端接+5V电源 * * 建立日期:2008年04月05日 * * 作者:铜河 * * 版本:V1.0 * * 修改日期:2008年04月06日 * * 主控芯片:M16 * * 时钟频率:外部晶体 7.3728MHZ * * 编译器:ICCAVR 6.31A * ************************************/ #include #include #include "delay.h" #define RD_KEY() ((~(PINC|0x0F))>>4)//四按键接于PC4-PC7 unsigned char i=0; //转动计数 unsigned char m=1; //驱动方式参数 unsigned char n=0; //转动方向参数 unsigned int zhuansu=61500; //转速数据 /**************************** * 端口配置函数 *

个人总结的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的USART串口发送与接收数据示例程序

//ATMEGA16的USART串口发送与接收数据示例程序,采取中断的方式 //发送200个FF,接收数据显示在数码管上,接收数据格式如09 //编译环境 ICCAVR //系统时钟7.3728MHZ,设置熔丝位为外部高频石英晶体振荡,启动时间4.1ms //作者:David //日期:2013.10.20 //*********************************************************************** // 包含文件 //*********************************************************************** #include #include #include #include #include //中断信号头文件 //*********************************************************************** // 定义变量区 //*********************************************************************** #define CH451_RESET 0x0201 //复位 #define CH451_LEFTMOV 0x0300 //设置移动方式-左移#define CH451_LEFTCYC 0x0301 //设置移动方式-左循#define CH451_RIGHTMOV 0x0302 //设置移动方式-右移#define CH451_RIGHTCYC 0x0303 //设置移动方式-右循#define CH451_SYSOFF 0x0400 //关显示、键盘、看门狗 #define CH451_SYSON1 0x0401 //开显示 #define CH451_SYSON2 0x0403 //开显示、键盘 #define CH451_SYSON3 0x0407 //开显示、键盘、看门狗功能#define CH451_DSP 0x0500 //设置默认显示方式 #define CH451_BCD 0x058f //设置BCD译码方式 #define CH451_TWINKLE 0x0600 //设置闪烁控制 #define CH451_DIG0 0x0800 //数码管位0显示 #define CH451_DIG1 0x0900 //数码管位1显示 #define CH451_DIG2 0x0a00 //数码管位2显示 #define CH451_DIG3 0x0b00 //数码管位3显示 #define CH451_DIG4 0x0c00 //数码管位4显示 #define CH451_DIG5 0x0d00 //数码管位5显示 #define CH451_DIG6 0x0e00 //数码管位6显示 #define CH451_DIG7 0x0f00 //数码管位7显示 #define l ed0 0x0000 //数码管位0显示的数据0 #define l ed1 0x0001 //数码管位0显示的数据1 #define l ed2 0x0002 //数码管位0显示的数据2 #define l ed3 0x0003 //数码管位0显示的数据3 #define l ed4 0x0004 //数码管位0显示的数据4 #define l ed5 0x0005 //数码管位0显示的数据5

基于Atmega16a单片机测温实验

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

基于ATmega16a的温度测量及显示系统 摘要:在国民经济各部门,如电力、化工、机械、冶金、农业、医学以及人们的日常生活中,温度测量是十分重要的。在环境监测、蔬菜大棚、粮库、设备运行的可靠性等应用中,实时采集温度信息,及时发现潜在故障,并采取相应的处理措施,对确保设备良好运行具有重要意义。本设计是采用Atmega16a单片机为核心的温度测量系统。采用LM35温度传感器来采集温度信号,并以电压的形式输送给单片机。显示部分用LCD1602液晶显示器。 文中介绍了该系统的部分硬件,包括:单片机最小系统,温度检测电路,LCD1602显示电路。文中还着重介绍了该系统的软件部分 。 关键词:单片机;温度;测量;显示

Based on the ATmega8a temperature measurement and display system Abstract: In the national economy departments, such as electric power, chemical industry, machinery, metallurgy, agriculture, medicine, and People's Daily life, temperature measurement is very important.In environmental monitoring, vegetable greenhouses, grain depot, the reliability of the equipment operation and other applications, the real-time temperature information collected, timely found potential failure, and take corresponding measures, to ensure the equipment running is of great significance.This design is to use Atmega16a MCU as the core temperature measurement https://www.wendangku.net/doc/7511054554.html,ing LM35 temperature sensor to collect the temperature signal, and in the form of voltage to https://www.wendangku.net/doc/7511054554.html,e LCD1602 LCD display part. This paper introduces the parts of the system hardware, including: single chip microcomputer minimum system, temperature detection circuit, LCD1602 display circuit.The paper also introduces the software part of the system Key words: MCU; temperature;measurement;According to

ATmega16a流水灯程序

/******************************************* 文件:LED.C 环境:编译为ICC AVR6.25A,仿真为AVR Studio4.10 硬件:ATMEGA16芯片 日期:2006年12月10日 功能:驱动开发板上的LED。1. 流水灯 2.闪烁指定的LED 备注:参考《AVR系列单片机C语言编程与应用实例》(清华大学出版社) /******************************************/ #include //包含型号头文件 #include //包含"位"操作头文件 #include //标准输入输出头文件 #include //包含自定义常量头文件 /******************************************* 函数名称: One_led 功能: 点亮或者熄灭指定的LED 参数: number--指定的LED light--为TRUE的时候为点亮LED,为FALSE的时候为熄灭LED 返回值 : 无 /********************************************/ void One_led(uchar number,uchar light) {uchar i; if(light==TRUE) //点亮操作 { PORTB&=~BIT(number); //输出数据 PORTA|=BIT(LEDLK); //更新数据 Delayms(5); //调整时序 PORTA&=~BIT(LEDLK); //锁存数据 } else { PORTB|=BIT(number); //输出数据 PORTA|=BIT(LEDLK); //更新数据 Delayms(5); //调整时序 PORTA&=~BIT(LEDLK); //锁存数据 } } /******************************************* 函数名称: All_led 功能: 点亮或者熄灭全部LED 参数: light--为TRUE的时候为点亮全部LED,为FALSE的时候为熄灭全部LED 返回值 : 无 /********************************************/ void All_led(uchar light) { if(light) {

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; }

ATmega16最小系统

目录 第一章概述 第二章单片机最小系统及编译、下载软件的使用 2.1.1 单片机最小系统 2.1.2 编译软件 2.2.1 下载软件Progisp的使用 第三章熟悉ATmega16的片上资源 3.1.1 会看芯片数据手册的重要性 3.1.2 中断 3.1.3定时器/计数器的基本结构及工作原理 3.1.4 PWM 3.2外部中断 3.3 USART 3.4.1 A/D转换模块 3.5 EEPROM 第四章ATmega16实际应用 4.1 外接按键 4.2 驱动数码管 4.3 液晶显示屏12864的使用 4.4 基于DS18B20的温度测量 4.5 基于PWM的直流电机调速 4.6 步进电机的使用 4.7 舵机的使用 4.8 超声波测距及其应用倒车雷达 4.9 基于JZ863的无线串口通信 4.10 单片机与计算机间的通信

第五章 第二章单片机最小系统及编译、下载软件的使用 2.1.1 单片机最小系统 能让单片机工作的有最基本元器件构成的系统称为单片机最小系统。 单片机最小系统通常包括: 电源(+5V) 复位电路:启动后让单片机从初始状态执行程序 振荡电路:单片机是一种时序电路,必须施加脉冲信号才能工作。Mega16内部有RC 震荡电路但相比外部的晶体震荡电路还是不够准确,另外它也可以使用外部晶振工作,两者之间的切换通过熔丝位(以后会讲)来选择在其内部有一个时钟产生电路只要接上两个电容和一个晶振即可正常工作。 。。。。。。 ATmega16 单片机最小系统的硬件电路图如下: 如图所示为ATmega16最小系统电路图,图中标有相同代号的引脚表示连接在一起。图中ISP 和JTAG为ATmega16的两种下载方式各自的引脚接口,ISP用于在线下载程序比较方便快捷,所用下载软件为progisp ;JTAG是在线仿真接口通过仿真器连接单片机进行程序的下载和仿真,所用软件为AVR Studio ;通常我门使用ISP下载就已经足够了,并且方便快捷很稳定好用,下载器也便宜;JTAG在需要仿真的时候用,它可以看见单片机各个引脚的输出值和输入值等,但JTAG实际定使用中不稳定有时候很容易出错电脑不识别下不进去程序等问题,个人偏好使用ISP. 说明:此最小系统电路图中只画出了最简单的应用电路——流水灯,和最基本的能让单

AVR ATmega16 AD转换源码

AVR ATmega16 AD转换程序 一、A/D转换器的主要技术指标 (1)、分辨率 ADC的分辨率是指使输出数字量变化一个相邻数码所需输入模拟电压的变化量。常用二进制的位数表示。例如12位ADC的分辨率就是12位,或者说分辨率为满刻度FS的1212。一个10V满刻度的12位ADC能分辨输入电压变化最小值是10V×1212=2.4mV。 (3)、偏移误差 偏移误差是指输入信号为零时,输出信号不为零的值,所以有时又称为零值误差。假定ADC没有非线性误差,则其转换特性曲线各阶梯中点的连线必定是直线,这条直线与横轴相交点所对应的输入电压值就是偏移误差。 (4)、满刻度误差 满刻度误差又称为增益误差。ADC的满刻度误差是指满刻度输出数码所对应的实际输入电压与理想输入电压之差。 (5)、线性度 线性度有时又称为非线性度,它是指转换器实际的转换特性与理想直线的最大偏差。 (6)、绝对精度 在一个转换器中,任何数码所对应的实际模拟量输入与理论模拟输入之差的最大值,称为绝对精度。对于ADC而言,可以在每一个阶梯的水平中点进行测量,它包括了所有的误差。

(7)、转换速率 ADC的转换速率是能够重复进行数据转换的速度,即每秒转换的次数。而完成一次A/D转换所需的时间(包括稳定时间),则是转换速率的倒数。 二、AVR单片机内部ADC简介 (1)特点 ? 10 位精度 ? 0.5 LSB 的非线性度 ? ± 2 LSB 的绝对精度 ? 65 - 260 μs 的转换时间 ? 最高分辨率时采样率高达15 kSPS ? 8 路复用的单端输入通道 ? 7 路差分输入通道 ? 2 路可选增益为10x 与200x 的差分输入通道 ? 可选的左对齐ADC 读数 ? 0 - VCC 的ADC 输入电压范围 ? 可选的2.56V ADC 参考电压 ? 连续转换或单次转换模式 ? 通过自动触发中断源启动ADC 转换 ? ADC 转换结束中断 ? 基于睡眠模式的噪声抑制器

ATMEGA16读写iic24c02C语言程序测试通过

ATMEGA16读写iic(24c02) C语言程序测 试通过 #include ; #include "I2C.h" #include "1602.h" #include "delay.h" /*通过AVR往IIC写数据,并通过串口把数据读出显示出来*/ //=============================================== ================ void uart_init(void) //UART初始化 { DDRD = 0x02; PORTD = 0x00; UCSRA = 0x02; /*无倍速*/ UCSRB = 0x18; /*允许接收和发送*/ UCSRC = 0x06; /*8位数据,1位停止位,无校验*/

UBRRH = 0x00; UBRRL = 12; /*9600*/ } //=============================================== ================ void USART_TXD(float data) //发送采用查询方式{ while( !(UCSRA & BIT(UDRE)) ); UDR=data; while( !(UCSRA & BIT(TXC )) ); UCSRA|=BIT(TXC); } void main(void) { unsigned char i; //LCD_init(); uart_init();//TART初始化 SEI(); //全局中断使能

while(1) {/* I2C_Write('n',0x00); I2C_Write('c',0x01); I2C_Write('e',0x02); I2C_Write('p',0x03); I2C_Write('u',0x04); */ i=I2C_Read(0x00); //LCD_write_char(0,0,i); USART_TXD(i); i=I2C_Read(0x01); //LCD_write_data(i); USART_TXD(i); i=I2C_Read(0x02); //LCD_write_data(i); USART_TXD(i); i=I2C_Read(0x03); //LCD_write_data(i); USART_TXD(i); i=I2C_Read(0x04); //LCD_write_data(i);

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 正弦波发生程序

ATMEGA16 正弦波发生程序编译软件ICCAVR 建议多级滤波效果会好些 #include //2013.6.21//21:23 iccavr #include // 128点正弦波样本表 const unsigned char auc_SinParam[128] = { 64,67,70,73,76,79,82,85,88,91,94,96,99,102,104,106,109,111,113,115,117,118,120,121, 123,124,125,126,126,127,127,127,127,127,127,127,126,126,125,124,123,121,120,118, 117,115,113,111,109,106,104,102,99,96,94,91,88,85,82,79,76,73,70,67,64,60,57,54,51,48, 45,42,39,36,33,31,28,25,23,21,18,16,14,12,10,9,7,6,4,3,2,1,1,0,0,0,0,0,0,0,1,1,2,3,4,6, 7,9,10,12,14,16,18,21,23,25,28,31,33,36,39,42,45,48,51,54,57,60}; unsigned char x_SW = 8,X_LUT = 0; #pragma interrupt_handler timer0_ovf_isr:10 void timer0_ovf_isr(void) { X_LUT += x_SW; // 新样点指针 if (X_LUT > 127) X_LUT -= 128; // 样点指针调整 OCR0 = auc_SinParam[X_LUT]; // 取样点指针到比较匹配寄存器 } void main(void) { DDRB = 0x08; // PB3(OC0)输出 TCCR0 = 0x69; // 相位调整PWM模式,分频系数=1,正向控制OC0 TIMSK = 0x01; // T/C0溢出中断允许 SREG|=BIT(7); // 使能全局中断 while(1) {}; } 仿真图太懒了没用真是示波器做

AVRmega16基本程序

枯藤老树昏鸦,小桥流水人家,古道西风瘦马。夕阳西下,断肠人在天涯。/********************************************************************* MCU: ATmega16 外部晶振:8MHz 程序功能:4*4鍵盤識別,LED七段數碼管顯示,密碼功能模塊,直流電機正反轉控制AD轉換模塊, 模擬比較器,外部中斷應用,12864液晶,C/T0 硬件設計:參考PROTUES硬件仿真電路 調試:所有程序主要功能都軟硬件仿真通過,實際使用時要根據需要加入可靠性。 編譯環境:ICC AVR Design by: wdw ********************************************************************/ #include #include #include #define uchar unsigned char #define uint unsigned int #define SET_1(a,b) a|=bit(b) //將寄存器a的第b位置1 #define CLR_0(a,b) a&=~bit(b) //將寄存器a的第b位清0 #program date code: const date[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,//共陽數據; 0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; #program duan code: const duan[]={0x20,0x10,0x08,0x04,0x02,0x01}; //段選; char adchannel; int dispbuf[]={0,0,0,0,0,0,}; //顯示緩存; uchar securbuf[]={0,0,0,0,0,}; //5位密碼緩存; /******************************************************************** 名稱:ms延時子函數 功能:延時指定的ms *********************************************************************/ void delayms(int ms) { int i,j; for(i=ms;i>0;i--) { for(j=1722;j>0;j--); //8M时改为1141; } //12M时为1722; } /******************************************************************* 名稱:us延時子程序 功能:延時指定的us ********************************************************************/ void delayus(uchar us) { for(us;us<0;us--); {

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_串口发送程序

2012/8/8 /******************************************** 功能:实现两单片机之间通讯, 开发环境:ICCAVR ************************************/ #include #include #define fosc 8000000 //晶振8M #define baud 9600 #define uchar unsigned char #define uint unsigned int void delay(uint ms) { uint i,j; for(i=0;i

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;

ATMEGA16_串口接收程序

2012年8月8日 /************************************************* 2012年5月1日 功能:实现两单片机之间通讯,并且在LCD12864显示 开发环境:ICCAVR 液晶显示成功 **************************************************/ #include #include #include"LCD_12864_chuankou.c" #define uint unsigned int #define uchar unsigned char #pragma interrupt_handler USART_RXC_vect:12 // 中断函数声明 #define fosc 8000000 #define baud 9600 /************************************************* 端口初始化 ***************************************************/ void port_init(void) { PORTA=0XFF; DDRA=0XFF; PORTC=0XFF; //液晶显示 DDRC=0XFF; PORTD=0X00; DDRD|=(1<

相关文档