📄 atmega128.h
字号:
/*
********************************************************************************************
头部文件名: ATmega128.h
头部文件名称: ATmega128 单片机内部寄存器名和位名定义的头部文件
适用器件芯片类型: ATmega128(ATMEL公司生产的单片机)
文件版本: 1.0
文件功能:
本文件是 ATmega128 单片机内部寄存器名和位名定义、编译器数据类型定义的的头部文件。
文件说明:
在使用本文件前,必须首先使用全局预定义字符来对C编译系统进行定义!
对各种C编译系统规定使用的全局预定义字符如下(中括号里面的字符):
①.IAR Embedded Workbench for Atmel AVR ------ [_IAR_EW_AVR_]
②.ICCAVR ------------------------------------ [_ICC_AVR_]
③.CodeVision AVR ---------------------------- [_CodeVision_AVR_]
编译工具软件: IAR Embedded Workbench for Atmel AVR 版本:3.20 以上
CodeVision AVR C 版本:1.24.6 以上
ICCAVR 版本:6.31A 以上
链接文件: MCU_C_Macro_Data_Define.h
编作者:
编作者 E-Mail: PTZSW@163.COM
编制日期: 2005年8月22日
----------------------------------------------------------------------------------------
头部文件版本历史:
2005年8月22日 -------- 版本 1.0 :发行版本
********************************************************************************************
*/
/*==========================================================================================
下面两条指令是本头部文件条件编译的预处理指令,用于防止本头部文件被其他文件重复引用。
==========================================================================================*/
#ifndef MCU_8BIT_ATMEGA128_H // "MCU_8BIT_ATMEGA128_H" 条件编译开始
#define MCU_8BIT_ATMEGA128_H
/*==========================================================================================
下面这三条指令是用于区分编译系统为 C++ 或 C 的预处理指令。
"__cplusplus" 为 C++ 预处理器名字,这三条指令表明接在其下面的那些指令为 C 程序特征。
==========================================================================================*/
#ifdef __cplusplus
extern "C" {
#endif
/*==========================================================================================
本头部文件包括的其他头部文件
==========================================================================================*/
#include "MCU_C_Macro_Data_Define.h" // 包含数据类型和常用指令宏定义的头部文件
/*
********************************************************************************************
适合的编译系统:IAR Embedded Workbench for Atmel AVR 版本:3.20 以上
********************************************************************************************
*/
#if defined(_IAR_EW_AVR_) // "IAR Embedded Workbench AVR "条件编译开始
/*==========================================================================================
本头部文件包括的其他头部文件
==========================================================================================*/
#include "IOmacro.h" // AT90S 系列特殊功能寄存器宏定义的头部文件
/*==========================================================================================
本器件芯片的处理器配置选项
==========================================================================================*/
#if TID_GUARD(3) // "TID_GUARD(3)" 条件编译开始
#error 本文件仅只能用于 ICCAVR 或者 AAVR 编译器,且处理器选项为 [-v3] 的条件下进行编译
#endif // "TID_GUARD(3)" 条件编译结束
/*==========================================================================================
如果在此之前,本头部文件没有被其他文件引用或者此文件被汇编程序引用(在每个汇编程序模块中
必须定义特殊功能寄存器),本指令将包含特殊功能寄存器部分的宏定义。
==========================================================================================*/
#if !defined(__IOM128_H) || defined(__IAR_SYSTEMS_ASM__)
#pragma language=extended // 使用 IAR 针对 AVR 特性而扩展的C语言
/*==========================================================================================
预定义特殊功能寄存器存储地址
==========================================================================================*/
/*--------------------------------------------------------------------------------------
本例子用于说明如何对“SFR_B()”进行宏调用,对其进行展开后的结果和对此结果的用法:
SFR_B_R(0x1F, AVR)
展开为:
__io union {
unsigned char AVR; // The sfrb 被看作 1 个字节
struct { // The sfrb 被看作 8 位
unsigned char AVR_Bit0:1,
AVR_Bit1:1,
AVR_Bit2:1,
AVR_Bit3:1,
AVR_Bit4:1,
AVR_Bit5:1,
AVR_Bit6:1,
AVR_Bit7:1;
};
} @ 0x1F;
对展开后结果的用法如下面这些例子所示(操作:置位变量 AVR 的第 6 位):
AVR |= (1<<5);
也可以如下面所示进行操作:
AVR_Bit5 = 1;
本例子用于说明如何对“SFR_B_N()”进行宏调用,对其进行展开后的结果和对此结果的用法:
SFR_B_N(0x25, TCCR2, FOC2, WGM20, COM21, COM20, WGM21, CS22, CS21, CS20)
展开为:
__io union {
unsigned char TCCR2;
struct {
unsigned char TCCR2_Bit0:1,
TCCR2_Bit1:1,
TCCR2_Bit2:1,
TCCR2_Bit3:1,
TCCR2_Bit4:1,
TCCR2_Bit5:1,
TCCR2_Bit6:1,
TCCR2_Bit7:1;
};
struct {
unsigned char TCCR2_CS20:1,
TCCR2_CS21:1,
TCCR2_CS22:1,
TCCR2_WGM21:1,
TCCR2_COM20:1,
TCCR2_COM21:1,
TCCR2_WGM20:1,
TCCR2_FOC2:1;
};
} @ 0x25;
对展开后结果的用法如下面这些例子所示(操作:置位寄存器 TCCR2 的第 6 位):
TCCR2 |= (1<<5);
或者,如果在 ENABLE_BIT_DEFINITIONS 被定义的条件下,也可以如下面所示进行操作:
TCCR2 |= (1<<COM21);
也可以如下面所示进行操作:
TCCR2_Bit5 = 1;
也可以如下面所示进行操作:
TCCR2_COM21 = 1;
--------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------
I/O 寄存器定义($3F-$00)
--------------------------------------------------------------------------------------*/
SFR_B_N(0x00, PINF, PINF7, PINF6, PINF5, PINF4, PINF3, PINF2, PINF1, PINF0)
// 端口F输入引脚地址
SFR_B_N(0x01, PINE, PINE7, PINE6, PINE5, PINE4, PINE3, PINE2, PINE1, PINE0)
// 端口E输入引脚地址
SFR_B_N(0x02, DDRE, DDE7, DDE6, DDE5, DDE4, DDE3, DDE2, DDE1, DDE0)
// 端口E数据方向寄存器
SFR_B_N(0x03, PORTE, PORTE7, PORTE6, PORTE5, PORTE4, PORTE3, PORTE2, PORTE1, PORTE0)
// 端口E数据寄存器
SFR_W_R(0x04, ADC) // ADC数据寄存器(16 位存取模式)
SFR_B2_N(0x06, ADCSR, ADCSRA, ADEN, ADSC, ADFR, ADIF, ADIE, ADPS2, ADPS1, ADPS0)
// ADC控制和状态寄存器
SFR_B_N(0x07, ADMUX, REFS1, REFS0, ADLAR, MUX4, MUX3, MUX2, MUX1, MUX0)
// ADC多路选择寄存器
SFR_B_N(0x08, ACSR, ACD, ACBG, ACO, ACI, ACIE, ACIC, ACIS1, ACIS0)
// 模拟比较器控制和状态寄存器
SFR_B_R(0x09, UBRR0L) // USART0波特率寄存器低字节
SFR_B_N(0x0A, UCSR0B, RXCIE0, TXCIE0, UDRIE0, RXEN0, TXEN0, UCSZ02, RXB80, TXB80)
// USART0控制和状态寄存器B
SFR_B_N(0x0B, UCSR0A, RXC0, TXC0, UDRE0, FE0, DOR0, UPE0, U2X0, MPCM0)
// USART0控制和状态寄存器A
SFR_B_R(0x0C, UDR0)
// USART0 I/O 数据寄存器
SFR_B_N(0x0D, SPCR, SPIE, SPE, DORD, MSTR, CPOL, CPHA, SPR1, SPR0)
// SPI控制寄存器
SFR_B_N(0x0E, SPSR, SPIF, WCOL, Dummy5, Dummy4, Dummy3, Dummy2, Dummy1, SPI2X)
// SPI状态寄存器
SFR_B_R(0x0F, SPDR) // SPI数据寄存器
SFR_B_N(0x10, PIND, PIND7, PIND6, PIND5, PIND4, PIND3, PIND2, PIND1, PIND0)
// 端口D输入引脚地址
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -