让atmega8可以和飞思卡尔xs128一样对IO引脚进行定义

发布者:学富五车最新更新时间:2022-01-10 来源: eefocus关键字:atmega8  xs128  IO引脚 手机看文章 扫描二维码
随时随地手机看文章

       好吧,不得不承认,我使用飞思卡尔的XS128单片机已经非常之习惯了,结果一上手atmega8,最令我反感的就是atmega8不能对IO引脚进行操作,非要用些繁琐的位操作。我就不,我就要像飞思卡尔那样操作。。。


于是。。。。。。


把我写的下面这个头文件塞到winavr目录的include/avr中,并在io.h头文件的最后包含这个头文件。


嘿嘿,一切变得是那么的亲切与熟悉。。。。。。


/***********************************************************

*  函数库说明:ATMEGE8 

*  版本:      v1.0                

*  修改:      庞辉    芜湖联大飞思卡尔工作室            

*  修改日期:  2011年08月04日           

*                 

*  说明:    无             

*                                                          

*  版本更新:                                              

*                                                                                          

************************************************************

*注意:  无                                       

***********************************************************/

#ifndef _BIT_

#define _BIT_

 

//定义一个8字节的位段 bit0~7是每个位段名称 1代表一位 PBIT就是整个位段的名称

typedef struct 

 

     unsigned bit0 : 1 ; 

     unsigned bit1 : 1 ; 

     unsigned bit2 : 1 ; 

     unsigned bit3 : 1 ; 

     unsigned bit4 : 1 ; 

     unsigned bit5 : 1 ; 

     unsigned bit6 : 1 ; 

     unsigned bit7 : 1 ; 

}PBIT;

 

//强制转换

 

#define PORTABIT    (*(volatile PBIT *)0x3B)

#define DDRABIT     (*(volatile PBIT *)0x3A) 

#define PINABIT     (*(volatile PBIT *)0x39)

 

#define PORTBBIT    (*(volatile PBIT *)0x38) 

#define DDRBBIT     (*(volatile PBIT *)0x37) 

#define PINBBIT     (*(volatile PBIT *)0x36)

 

#define PORTCBIT    (*(volatile PBIT *)0x35) 

#define DDRCBIT     (*(volatile PBIT *)0x34) 

#define PINCBIT     (*(volatile PBIT *)0x33)

 

#define PORTDBIT    (*(volatile PBIT *)0x32) 

#define DDRDBIT     (*(volatile PBIT *)0x31) 

#define PINDBIT     (*(volatile PBIT *)0x30)

 

 

//继续封装

 

#define PORTA_PA0 PORTABIT.bit0

#define PORTA_PA1 PORTABIT.bit1

#define PORTA_PA2 PORTABIT.bit2

#define PORTA_PA3 PORTABIT.bit3

#define PORTA_PA4 PORTABIT.bit4

#define PORTA_PA5 PORTABIT.bit5

#define PORTA_PA6 PORTABIT.bit6

#define PORTA_PA7 PORTABIT.bit7

 

#define PORTB_PB0 PORTBBIT.bit0

#define PORTB_PB1 PORTBBIT.bit1

#define PORTB_PB2 PORTBBIT.bit2

#define PORTB_PB3 PORTBBIT.bit3

#define PORTB_PB4 PORTBBIT.bit4

#define PORTB_PB5 PORTBBIT.bit5

#define PORTB_PB6 PORTBBIT.bit6

#define PORTB_PB7 PORTBBIT.bit7

 

#define PORTC_PC0 PORTCBIT.bit0

#define PORTC_PC1 PORTCBIT.bit1

#define PORTC_PC2 PORTCBIT.bit2

#define PORTC_PC3 PORTCBIT.bit3

#define PORTC_PC4 PORTCBIT.bit4

#define PORTC_PC5 PORTCBIT.bit5

#define PORTC_PC6 PORTCBIT.bit6

#define PORTC_PC7 PORTCBIT.bit7

 

#define PORTD_PD0 PORTDBIT.bit0

#define PORTD_PD1 PORTDBIT.bit1

#define PORTD_PD2 PORTDBIT.bit2

#define PORTD_PD3 PORTDBIT.bit3

#define PORTD_PD4 PORTDBIT.bit4

#define PORTD_PD5 PORTDBIT.bit5

#define PORTD_PD6 PORTDBIT.bit6

#define PORTD_PD7 PORTDBIT.bit7

 

 

//**********************

#define DDRA_DDRA0 DDRABIT.bit0

#define DDRA_DDRA1 DDRABIT.bit1

#define DDRA_DDRA2 DDRABIT.bit2

#define DDRA_DDRA3 DDRABIT.bit3

#define DDRA_DDRA4 DDRABIT.bit4

#define DDRA_DDRA5 DDRABIT.bit5

#define DDRA_DDRA6 DDRABIT.bit6

#define DDRA_DDRA7 DDRABIT.bit7

 

#define DDRB_DDRB0 DDRBBIT.bit0

#define DDRB_DDRB1 DDRBBIT.bit1

#define DDRB_DDRB2 DDRBBIT.bit2

#define DDRB_DDRB3 DDRBBIT.bit3

#define DDRB_DDRB4 DDRBBIT.bit4

#define DDRB_DDRB5 DDRBBIT.bit5

#define DDRB_DDRB6 DDRBBIT.bit6

#define DDRB_DDRB7 DDRBBIT.bit7

 

#define DDRC_DDRC0 DDRCBIT.bit0

#define DDRC_DDRC1 DDRCBIT.bit1

#define DDRC_DDRC2 DDRCBIT.bit2

#define DDRC_DDRC3 DDRCBIT.bit3

#define DDRC_DDRC4 DDRCBIT.bit4

#define DDRC_DDRC5 DDRCBIT.bit5

#define DDRC_DDRC6 DDRCBIT.bit6

#define DDRC_DDRC7 DDRCBIT.bit7

 

#define DDRD_DDRD0 DDRDBIT.bit0

#define DDRD_DDRD1 DDRDBIT.bit1

#define DDRD_DDRD2 DDRDBIT.bit2

#define DDRD_DDRD3 DDRDBIT.bit3

#define DDRD_DDRD4 DDRDBIT.bit4

#define DDRD_DDRD5 DDRDBIT.bit5

#define DDRD_DDRD6 DDRDBIT.bit6

#define DDRD_DDRD7 DDRDBIT.bit7

//*****************

 

#define PINA_PA0 PINABIT.bit0

#define PINA_PA1 PINABIT.bit1

#define PINA_PA2 PINABIT.bit2

#define PINA_PA3 PINABIT.bit3

#define PINA_PA4 PINABIT.bit4

#define PINA_PA5 PINABIT.bit5

#define PINA_PA6 PINABIT.bit6

#define PINA_PA7 PINABIT.bit7

 

#define PINB_PB0 PINBBIT.bit0

#define PINB_PB1 PINBBIT.bit1

#define PINB_PB2 PINBBIT.bit2

#define PINB_PB3 PINBBIT.bit3

#define PINB_PB4 PINBBIT.bit4

#define PINB_PB5 PINBBIT.bit5

#define PINB_PB6 PINBBIT.bit6

#define PINB_PB7 PINBBIT.bit7

 

#define PINC_PC0 PINCBIT.bit0

#define PINC_PC1 PINCBIT.bit1

#define PINC_PC2 PINCBIT.bit2

#define PINC_PC3 PINCBIT.bit3

#define PINC_PC4 PINCBIT.bit4

#define PINC_PC5 PINCBIT.bit5

#define PINC_PC6 PINCBIT.bit6

#define PINC_PC7 PINCBIT.bit7

 

#define PIND_PD0 PINDBIT.bit0

#define PIND_PD1 PINDBIT.bit1

#define PIND_PD2 PINDBIT.bit2

#define PIND_PD3 PINDBIT.bit3

#define PIND_PD4 PINDBIT.bit4

#define PIND_PD5 PINDBIT.bit5

#define PIND_PD6 PINDBIT.bit6

#define PIND_PD7 PINDBIT.bit7

 

#endif

关键字:atmega8  xs128  IO引脚 引用地址:让atmega8可以和飞思卡尔xs128一样对IO引脚进行定义

上一篇:atmega8 Flash的使用
下一篇:atmega8 例程:T1定时器 CTC模式 方波输出

推荐阅读最新更新时间:2024-11-08 10:35

采用Atmega8的数字功放设计
1 引言 数字功放由于其效率高、易与数字音源对接等优点而在现实生活中具有越来越广泛的应用。它主要包含两部分,图1为数字功放的基本框图。其中PWM变换大致有两种,一是模拟PWM,即将输入的模拟信号或数字信号经D/A后与三角波进行比较,这种变换必须要有频率上百kHz、线性度好、满幅的三角波,而且还要有高速模拟比较器,否则将影响PWM波形在解调后的波形,这些都将增加成本和设计复杂度(使用集成D类功放或D类控制芯片另当别论)。二是数字式PWM,即将输入数字信号或模拟信号经A/D后与计数器相比较,即用计数的方法代替三角波,从而避免了三角波非线性所引起的失真。同传统的模拟方式相比,数字方式具有设计简单,效率更高,抗干扰性更强等优点。而At
[单片机]
采用<font color='red'>Atmega8</font>的数字功放设计
ATmega88 引脚功能
引脚名称 引脚功能说明 VCC 电源正 GND 电源地 端口B(PB7..PB0) 端口 B 为 8 位双向 I/O 口,并具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动 特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路将拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口 B 保持为高阻态。通过对系统时钟选择位的设定,PB6可作为反向振荡放大器与内部时钟操作电路的输入 。 通过对系统时钟选择位的设定, PB7 可作为反向振荡放大器的输出。 系统使用内部 RC 振荡器时,通过设置 ASSR 寄存器的 AS2 位,可以将 PB7..6 作为异步 定时器 / 计数器 2 的输
[单片机]
Atmega8 实现D触发锁存器的功能
/************************************************************************** 实验四(第二版):用 Atmega8 实现D触发锁存器的功能 实现目的: 1. 管脚设定为输入时,了解如何可以编程设定 上拉电阻 。 2. 如何使用软件控制取样 频率 及时间,达到一定的抗干扰目的 3. 为了让程序运行更稳定,防止跑飞,如何使用看门狗? By armok (2004-09-18) a13809260240@126.com ***********************************************************************
[单片机]
ATmega8 I/O存储器
ATmega8 的I/O 空间定义见 P 271 寄存器概述 。 ATmega8所有的I/O及外设都被放置于I/O空间。所有的I/O位置都可以通过IN 与OUT指令 来访问,在32 个通用工作寄存器和I/O 之间传输数据。 地址为0x00 - 0x1F 的I/O 寄存器 还可用SBI 和CBI 指令直接进行位寻址,而SBIS 和SBIC 则用来检查某一位的值。更多 内容请参见指令集。使用IN 和OUT指令时地址必须在 0x00 - 0x3F之间。如果要象SRAM 一样通过LD 和ST 指令访问I/O 寄存器,相应的地址要加上0x20。 为了与后续产品兼容,保留未用的未应写 0 ,而保留的I/O 寄存器则不应进行写操作。
[单片机]
ATmega8单片机控制的红外导盲系统设计
为帮助盲人群体更方便地导盲,设计了用单片机控制的红外导盲系统。以ATmega8单片机为控制核心,选用基于PSD原理的红外测距传感器GP2Y0A02YK0F。单片机利用ADC端口实时采集测距传感器的模拟输出信号,并对采集到的数据进行滑动平均滤波,以消除噪声干扰。单片机将得到的距离值与门限值进行比较,并控制语音播报电路发出距离提示信息。该系统能检测前、左、右3个方向1. 5 m内的障碍物信息,抗干扰性强,稳定可靠。 盲人在行走引导方面有很大的困难,目前盲人的导盲主要是依靠手杖敲击路面来判断前方是否有可行的路线,这种方法效率不高,且有一定的局限性,无法告知盲人周围障碍物的分布情况和距离。本文对采用光电式的导盲方式进行了探索研究,
[单片机]
用<font color='red'>ATmega8</font>单片机控制的红外导盲系统设计
利用I2C总线实现ATmega88的在应用编程
引言 随着嵌入式系统技术的发展,电可擦除的Flash存储器由于具有容量大、成本低、编程方便等优点,在微控制器领域得到了广泛的应用Flash微控制器在正常运行前必须将Flash写入用户应用程序,目前对微控制器的Flash程序存储器进行编程的方法主要有出厂固化、编程器编程、在系统编程(In System Programming,ISP)和在应用编程(In Application programming,IAP)4种。 其中,出厂固化和编程器编程方法都要求微控制器在焊接前将程序写入,这显然不满足开发阶段的调试和日后升级的需要。目前比较普及的是在板可编程的ISP和IAP方法。ISP是通过微控制器的串行编程写入应用程序,需要少量的外
[单片机]
利用I2C总线实现<font color='red'>ATmega8</font>8的在应用编程
介绍基于ATmega8单片机控制的正弦波逆变电源设计
  0引言   在风电行业中,经常需要在野外对风机进行维修,这时必须为各类维修工具和仪器进行供电。因此,设计一种便携式。低功耗。智能化的正弦逆变电源来为这些设备供电是十分必要的,可大大提高维修风机的效率。   本文正是基于这种情况下而设计的一种基于单片机的智能化正弦逆变电源。   1 正弦逆变电源的设计方案   本文所设计的逆变器是一种能够将DC 12V直流电转换成220V正弦交流电压,并可以提供给一般电器使用的便携式电源转换器。目前,低压小功率逆变电源已经被广泛应用于工业和民用领域。特别是在交通运输。野外测控作业。机电工程修理等无法直接使用市电之处,低压小功率逆变电源便成为必备的工具之一,它只需要具有一块功率足够的电池与
[单片机]
介绍基于<font color='red'>ATmega8</font>单片机控制的正弦波逆变电源设计
ATmega8 定时器/计时器振荡器
对于拥有定时器/ 振荡器引脚(TOSC1 和TOSC2) 的AVR 微处理器,晶体可以直接与这 两个引脚连接,无需外部电容。此振荡器针对32.768 kHz 的钟表晶体作了优化。不建议 在TOSC1 引脚输入振荡信号。
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved