atmega128单片机系列例程

合集下载

第2章_ATmega128硬件结构

第2章_ATmega128硬件结构

广州大学 机电学院 庞志
$100CA
$1006:LDI R1,$0A $1008:LDS R2,$FF00 $100A:ADD R2,R1 $100C:STS $$FFFF0000(($$110A)) $FF00,R2
R1=$0A R2=$$11AA0
2020年5月19日星期二
广州大学 机电学院 庞志
广州大学 机电学院 庞志
ATmega128
单 片 机 方 框 图
2020年5月19日星期二
广州大学 机电学院 庞志
ATmega128
单 片 机 指 令 执 行 过 程
2020年5月19日星期二
广州大学 机电学院 庞志
$1006
10+(0xFF00$)1=0>0(60:xLFDFI 0R0)1,$0A
当RAMPZ0=1: ELPM/SPM可以访问程序存储器地址 $8000——$FFFF(高64K字节)
2020年5月19日星期二
广州大学 机电学院 庞志
2.2.3 指令执行时序
AVR CPU由系统时钟clkCPU驱动。
并行取指和执行时序
2020年5月19日星期二
广州大学 机电学院 庞志
单时钟周期ALU 操作
模拟比较器
2020年5月19日星期二
广州大学 机电学院 庞志
2.1.2 主要性能 (续)
特殊的处理器特点
上电复位 可编程的掉电检测 片内RC振荡器 片内/片外中断源 6种睡眠模式: 空闲模式、ADC噪声抑制模式、省电模
式、掉电模式、Standby模式以及扩展的Standby模式 可选的时钟频率 可选ATmega103兼容模式 全局上拉禁止功能
Bit 6 – T: 位拷贝存储 Bit 4 – S: 符号位,S=N⊕V Bit 2 – N: 负数标志 Bit 0 – C: 进位标志

ATmega128的外部并行接口器件扩展应用

ATmega128的外部并行接口器件扩展应用

ATmega128的外部并行接口器件扩展应用ATmega128片内的RAM有4K字节,这在8位单片机中算佼佼者。

因此,设计一般的应用系统,应尽量不采用外部扩展并行器件的设计。

这样不仅方便PCB板的设计,减少PCB板的面积,同时也提高了系统的抗干扰性。

对于必须采用外部并行器件扩展的设计,ATmega128的PORTA(低8位地址线和8位数据线复用)、PORAC(高8位地址线)口提供了并行扩展接口。

尽管并行接口的基本使用原理同一般的单片机相同,但由于ATmega128的结构上的特点,以及其使用了增强型的并行接口,因此在使用并行扩展接口时还需要仔细的设计。

其主要特性有:*外部并行扩展的地址从0x1100开始;*使用外部并行扩展时,应将MCUCR寄存器中的SRE位置“1”,允许外部并行扩展;*可将PORTC口高位不用的地址线释放,作为普通的I/O口使用;*可设置对不同区域采用不同的读写操作时序(加等待),用于配合扩展使用不同时序操作的外部并行器件。

5.5.1 外部扩展RAM存储器的设计下图给出一个外部扩展32K的RAM(6264)的译码参考电路。

图中使用了一片74HC138和与门,与门的输出作为6264的片选信号,其地址空间为0x0000 –0x8FFF。

74HC138其它7个引脚输出用于在地址大于0x9000以上空间扩展其它更多的并行接口器件,每根线选通的地址空间为4K。

由于ATmega128的RAM空间前4352个字节分配给芯片内部的通用寄存器、I/O寄存器和4K 字节的内部SRAM,所以外部并行扩展器件的起始地址是从0x1100开始的(见第二章内容)。

当MCU在对0X0000-0X10FF范围的SRAM地址空间操作时,实际是对芯片内部的SRAM或寄存器操作,尽管会影响地址总线、数据总线和ALE,但此时和不受影响,因此对相应的处在这段地址范围的外部扩展的存储器没有影响。

在图5.6的设计中,实际上已经把6264中地址范围在0x0000-0x0FFF的一段存储单元“移”到ATmega128的RAM地址空间高端0x8000-0x8FFF处。

基于Atmega128单片机设计的嵌入式控制器

基于Atmega128单片机设计的嵌入式控制器

基于Atmega128单片机设计的嵌入式控制器
 采用Atmega128单片机设计的嵌入式控制器,模拟量输入通道用
Atmega128片内A/D转换器,输出用AD421D/A转换器,数字量I/O通道配
置高速先耦器件.用LCCavr编译器修改OSTaskStklnit()函数及其相关文件,
定义数据类型等以实现MICroC/OS-Ⅱ的移植.
1 引言
 嵌入式控制器是机电设备实现自动化的核心部件。

故以大型机电设备为控制对象,利用高性能Atmega 128微处理器,设计了具有现场总线(CANBUS)网络通信和一定通用性的多功能嵌入式智能控制器。

2 硬件设计
 系统的硬件结构如图1。

 本控制器的核心采用64管脚TQFP封装的Atmega128芯片,具有53个
可编程的I/O引脚,片内集成有128KB闪存、4KB EEPROM 和
4KBSRAM,适合I/O通道和存储空间的需求。

ATmega128 单片机硬件电路设计

ATmega128 单片机硬件电路设计

ATmega128 单片机硬件电路设计在本系统中,本小节主要讲ATmega128 单片机的内部资源、工作原理和硬件电路设计等。

2.5.1 ATmega128 芯片介绍ATmega128 为基于AVR RISC 结构的8 位低功耗CMOS 微处理器。

片内ISP Flash 可以通过SPI 接口、通用编程器,或引导程序多次编程。

引导程序可以使用任何接口来下载应用程序到应用Flash 存储器。

通过将8 位RISC CPU 与系统内可编程的Flash 集成在一个芯片内,ATmega128 为许多嵌入式控制应用提供了灵活而低成本的方案。

ATmega128 单片机的功能特点如下:(1)高性能、低功耗的AVR 8 位微处理器(2)先进的RISC 结构①133 条指令大多数可以在一个时钟周期内完成② 32x8 个通用工作寄存器+外设控制寄存器③全静态工作④工作于16 MHz 时性能高达16 MIPS ⑤只需两个时钟周期的硬件乘法器(3)非易失性的程序和数据存储器① 128K 字节的系统内可编程Flash ②寿命: 10,000 次写/ 擦除周期③具有独立锁定位、可选择的启动代码区(4)通过片内的启动程序实现系统内编程① 4K 字节的EEPROM ② 4K 字节的内部SRAM ③多达64K 字节的优化的外部存储器空间④可以对锁定位进行编程以实现软件加密⑤可以通过SPI 实现系统内编程(5)JTAG 接口(与IEEE 1149.1 标准兼容)①遵循JTAG 标准的边界扫描功能②支持扩展的片内调试③通过JTAG 接口实现对Flash,EEPROM,熔丝位和锁定位的编程(6)外设特点①两个具有独立的预分频器和比较器功能的8 位定时器/ 计数器②两个具有预分频器、比较功能和捕捉功能的16 位定时器/ 计数器③具有独立预分频器的实时时钟计数器④两路8 位PWM ⑤ 6 路分辨率可编程(2 到16 位)的PWM ⑥输出比较调制器⑦ 8 路10 位ADC ⑧面向字节的两线接口⑨两个可编程的串行USART ⑩可工作于主机/ 从机模式的SPI 串行接口(7)特殊的处理器特点①上电复位以及可编程的掉电检测②片内经过标定的RC 振荡器③片内/ 片外中断源④ 6 种睡眠模式: 空闲模式、ADC 噪声抑制模式、省电模式、掉电模式、Standby 模式以及扩展的Standby 模式⑤可以通过软件进行选择的时钟频率⑥通过熔丝位可以选择ATmega103 兼容模式⑦全局上拉禁止功能ATmega128 芯片有64 个引脚,其中60 个引脚具有I/O 口功能,资源比较丰富,下面对ATmega128 的各个引脚做简单介绍:VCC:数字电路的电源。

Atmega128PWM程序

Atmega128PWM程序

key_yanshi();
break;
//按键 5:PWM1B 正脉宽减小
case 6:
OCR0-=8;
key_yanshi();
break; //按键 6:PWM2 正脉宽减小
case 7:break;
//按键 7
case 8:break;
//按键 8
case 9:break;
//按键 9
case 10:break;
TCNT3=0x0000;
//清零计数器
}
/*******************************************************/
/****** 函数名称: Pwm2_Init()
******/
/****** 功 能: Pwm2 初始化函数
******/
/****** 参 数: 无
//按键 A
case 11:break;
//按键 B
case 12:break;
//按键 C
case 13:break;
//按键 D
case 14:break;
//按键 E
case 15:break;
//按键 F
default:break;
}
}
}
}
//快速 PWM,时钟 1024 分频
OCR0=0x20;
//正脉宽
TCNT0=0x00;
//清零计数器
}
/*******************************************************/
/****** 函数名称: main()
******/
/****** 功 能: 三路 PWM 同时输出

ATmega128串口通信程序(中断方式)

ATmega128串口通信程序(中断方式)

ATmega128串口通信程序(中断方式)2011-06-05 20:08:10| 分类:单片机程序编写| 标签:|字号大中小订阅程序采用IAR系统编译,实现使用串口调试助手收发数据的功能#include<iom128.h>#include<inavr.h>#include<string.h>#define INT8U unsigned char#define INT16U unsigned int#define UDRIE0 5/* UART Buffer Defines */#define UART0_RX_BUFFER_SIZE 128#define UART0_TX_BUFFER_SIZE 128/* Static Variables */static unsigned char UART0_RxBuf[UART0_RX_BUFFER_SIZE];static volatile unsigned char UART0_RxHead;static volatile unsigned char UART0_RxTail;static unsigned char UART0_TxBuf[UART0_TX_BUFFER_SIZE];static volatile unsigned char UART0_TxHead;static volatile unsigned char UART0_TxTail;static unsigned char UART0_Flag=1;void USART_INIT( void ){UBRR0H = 0x00;UBRR0L = 0x0B;//9600 at 1.8432MUCSR0A = 0x20;UCSR0B = 0xD8;//开接收结束中断,发送结束中断接收使能,发送使能UCSR0C = 0x06;//异步模式,1位停止位,8位数据位UDR0 = 0x00;//清空数据寄存器UART0_RxTail = 0;UART0_RxHead = 0;UART0_TxTail = 0;UART0_TxHead = 0;__disable_interrupt();//关全局中断}void Tran_Byte( INT8U sdata ){if(UART0_Flag == 0){UDR0 = sdata;UART0_Flag = 1;}else{UART0_TxBuf[UART0_TxHead] = sdata;UART0_TxHead++;if(UART0_TxHead >= UART0_TX_BUFFER_SIZE) UART0_TxHead = 0; }__enable_interrupt();}void Send_String( INT8U *string ){INT8U temp;while(1){temp = *string;Tran_Byte(temp);string++;if(*string == 0x00)break;}}INT8U HaveDataRxd( void ){if(UART0_RxHead != UART0_RxTail) return 1;elsereturn 0;}INT8U GetDataFromRxdBuf( void ){INT8U temp;temp = UART0_RxBuf[UART0_RxTail];UART0_RxTail ++ ;if( UART0_RxTail >= UART0_RX_BUFFER_SIZE ) { UART0_RxTail = 0 ;}return temp;}//清空接收缓冲区。

广大ATmega128单片机实验报告实验一 系统认识实验

广大ATmega128单片机实验报告实验一 系统认识实验

广州大学学生实验报告开课学院及实验室:计机楼503 2014年 05月 08日学院机械与电气工程学院年级、专业、班电信122 姓名王健学号1207400051实验课程名称信号与系统成绩实验项目名称实验一系统认识实验指导老师庞志一、实验项目1、熟悉AVR Mega128学习板开发环境。

2、掌握C语言程序设计的编程及调试方法。

3、运行流水灯显示程序。

二、实验类型验证性。

三、计划学时2学时。

四、实验目的了解AVR Mega128学习板开发环境:1、硬件平台:AVR Mega128学习板,AVR下载/仿真器。

2、软件开发工具:ICCA VR C语言程序开发软件、AVR STUDIO软件调试平台、C语言。

五、实验设备与平台1、实验设备:计算机(PC),AVR Mega128学习板,AVR下载/仿真器。

2、平台:ICCA VR C语言程序开发软件、AVR STUDIO软件调试平台。

六、涉及的知识点AVR Mega128单片机、C语言程序设计。

七、实验内容与步骤1、AVR Mega128学习板,见下图:图 1.1 AVR Mega128学习板图1.2 AVR Mega128学习板电路结构图1.3 AVR Mega128学习板硬件系统组成连接系统步骤:1)连接AVR下载/仿真器:将AVR下载/仿真器的排线接到AVR Mega128学习板的CH2 JTAG 插座;使用USB连线将AVR下载/仿真器和PC 连接起来。

2)连接AVR Mega128学习板电源:将电源线的圆插头插入到AVR Mega128学习板的J1插座,另一端扁形插头插入PC的USB口,系统运行内置的程序。

2、修改、编译程序1)打开ICCA VR软件,选择Project下拉菜单的Open…打开工程。

图1.4 打开工程示意图2)打开例子程序里面的工程文件01LED.prj:图1.5 打开工程文件示意图3)打开工程后,工程栏里面显示工程包含文件信息,双击右边工程栏中的main.c文件,程序显示在编辑区,可以修改程序。

Almel ATmega128 ATmega128L 可编程 Flash 说明书

Almel ATmega128 ATmega128L 可编程 Flash 说明书

产品特点•高性能、低功耗的 AVR® 8位微处理器•先进的 RISC 结构–133条指令 – 大多数可以在一个时钟周期内完成–32 x 8 通用工作寄存器 + 外设控制寄存器–全静态工作–工作于16 MHz时性能高达16 MIPS–只需两个时钟周期的硬件乘法器•非易失性的程序和数据存储器–128K 字节的系统内可编程Flash寿命: 10,000次写/擦除周期–具有独立锁定位、可选择的启动代码区通过片内的启动程序实现系统内编程真正的读-修改-写操作–4K字节的EEPROM寿命: 100,000次写/擦除周期–4K 字节的内部SRAM–多达64K字节的优化的外部存储器空间–可以对锁定位进行编程以实现软件加密–可以通过SPI实现系统内编程•JTAG接口(与IEEE 1149.1标准兼容)–遵循JTAG标准的边界扫描功能–支持扩展的片内调试–通过JTAG接口实现对Flash, EEPROM, 熔丝位和锁定位的编程•外设特点–两个具有独立的预分频器和比较器功能的8位定时器/计数器–两个具有预分频器、比较功能和捕捉功能的16位定时器/计数器–具有独立预分频器的实时时钟计数器–两路8位PWM–6路分辨率可编程(2到16位)的PWM–输出比较调制器–8路10位ADC8个单端通道7个差分通道2个具有可编程增益(1x, 10x, 或200x)的差分通道–面向字节的两线接口–两个可编程的串行USART–可工作于主机/从机模式的SPI串行接口–具有独立片内振荡器的可编程看门狗定时器–片内模拟比较器•特殊的处理器特点–上电复位以及可编程的掉电检测–片内经过标定的RC振荡器–片内/片外中断源–6种睡眠模式: 空闲模式、ADC噪声抑制模式、省电模式、掉电模式、Standby模式以及扩展的Standby模式–可以通过软件进行选择的时钟频率–通过熔丝位可以选择ATmega103兼容模式–全局上拉禁止功能•I/O和封装–53个可编程I/O口线–64引脚TQFP与 64引脚 MLF封装•工作电压–2.7 - 5.5V ATmega128L–4.5 - 5.5V ATmega128•速度等级–0 - 8 MHz ATmega128L–0 - 16 MHz ATmega128微处理器,具有128K字节的系统BDTIC /ATMEL2ATmega1282467L–AVR–05/04引脚配置Figure 1. ATmega128的引脚综述ATmega128为基于AVR RISC 结构的8位低功耗CMOS 微处理器。

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

ADCSRA=0x00; // ADC
ADMUX = 0X00;
// Aref
ADC0
ACSR=(1<<ACD);
ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1);
//ADEN
ADC;ADSC,ADC
ADIE,ADC
: :k : ************************************************************************ ****/ void display(unsigned int k)// { DDRE|=1<<2; PORTE|=1<<2; DDRA=0XFF; PORTA=k; } #define SS 0 #define SCK 1 #define MOSI 2 #define MISO 3 #define SS_H() PORTB|=(1<<SS) #define SS_L() PORTB&=~(1<<SS)
#define led0_en() {DDRB|=1<<4;PORTB|=(1<<4);} // #define led0_dis() {DDRB|=1<<4;PORTB&=~(1<<4);} // #define led1_en() {DDRB|=1<<5;PORTB|=(1<<5);} #define led1_dis() {DDRB|=1<<5;PORTB&=~(1<<5);} #define led2_en() {DDRB|=1<<6;PORTB|=(1<<6);} #define led2_dis() {DDRB|=1<<6;PORTB&=~(1<<6);} #define led3_en() {DDRB|=1<<7;PORTB|=(1<<7);} #define led3_dis() {DDRB|=1<<7;PORTB&=~(1<<7);} #define OE 7 #define point 3 #define dp 7 #include <iom128v.h>
if(point==1) HC_595_OUT(table[led_buffer[2]]|(1<<dp)); else HC_595_OUT(table[led_buffer[2]]); led1_en(); delay_nus(60); led1_dis();
if(point==2) HC_595_OUT(table[led_buffer[1]]|(1<<dp)); else HC_595_OUT(table[led_buffer[1]]);
}
void leddis_update(void)
{
/*
*/
if(point==0)
HC_595_OUT(table[led_buffer[3]]|(1<<dp));
else
HC_595_OUT(table[led_buffer[3]]);
led0_en();
delay_nus(60);
led0_dis();
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;
************************************************************************ ****/ void delay(void) {
int i; for(i=0;i<1800;i++); } /*********************************************************************** *****
#include <macros.h>
const unsigned char table[]={0x3F,0x06,0x5B,0x4F,0x66,
0x6D,0x7D,0x07,0x7F,0x6F,
0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};
volatile unsigned char led_buffer[4];
*/
/*
2010 11 13
*/
//Aref AVCC(+5V), Aref
/*
AD
*/
/***********************************************************************
****/
/*********************************
********************************/
#include <iom128v.h>
#include <macros.h>
/********************************
*******************************/
extern const unsigned char tab[]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
*****
:ADC
:
:
************************************************************************
****/
void adc_init(void)
{
DDRF&=0XFE; //PORTF0
ADC0
PORTF&=0XFE; //PORTF0
/***********************************************************************
****/
/*ADC
*/
/*
ATmega128
*/
/* :RC 8MHZ
*/
/*
ICCAVR 7.13A
*/
/*E-Mail:number007cool@
{
/*
*/
SPDR = Data;
/*
*/
while(!(SPSR & (1<<SPIF)))
;
}
/*
HC595
*/
void HC_595_init(void)
{
DDRC |= (1<<OE); // PORTC7
PORTC &= (1<<OE); //
595
PORTB = 0x0F; //
spi_init();
//N ms
/* spi
*/
void spi_init(void)
{
DDRB |= (1<<MOSI)|(1<<SCK)|(1<<SS);// MOSI SCK
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPR1);// SPI
}
/*spi
*/
void SPI_MasterTransmit(char Data)
led2_en(); delay_nus(60); led2_dis();
/*
*/
if(point=3)
HC_595_OUT(table[led_buffer[0]]|(1<<dp));
else
HC_595_OUT(table[led_buffer[0]]);
led3_en();
delay_nus(60);
ATMEGA128

minios@沧
avr 16L Makefie
icc avr winavr
.
avr/io.h
makefile
atmega128 ICC AVR
winavr
makefile
makefile
code vision avr
icc avr iom128v.h
128
atmega128. cvavr mega128.h
void delay_1us(void)
//1us
{
asm("nop");
}
void delay_nus(unsigned int n)
//N us
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1us();
}
//0,1,2,3,4 //5,6,7,8,9 //a,b,c,d,e,f
PORTE|=1<<2;
DDRA=0xff;
PORTA=cnt;
// led
B
cnt++;
if(cnt==255)
cnt=0;
}
void main() {
//DDRB=0XFF; SREG|=0X80; TIMSK=0X04; timer1_init(); while(1) {; } }
相关文档
最新文档