AVR端口(DDxn,PORTxn)配置及其说明_艺术纸箱_百度空间

最基础的也是最容易忽视和遗忘的。曾经没注意IO三态变化而出现的错误印象深刻。

引脚序号             引脚名称                               引脚功能

                                    8 位双向I/O 口, 具有可编程的内部上拉电阻。

                                           其输出缓冲器具有对称的驱动特

                                    性,可以输出和吸收大电流。作为输入使用时,
                    PB5
    1                                  若内部上拉电阻使能,端口被外部电路拉

                                      低时将输出电流。在复位过程中,即使系统

                                        时钟还未起振,端口A 处于高阻状态。

                    MOSI                 SPI 总线的主机输出/ 从机输入信号

                    PB6                          8 位双向 I/O 口
    2
                    MISO                 SPI 总线的主机输入/ 从机输出信号

                    PB7                          8 位双向 I/O 口
    3
                     SCK                        SPI 总线的串行时钟

                                   复位输入引脚。持续时间超过最小门限时间的低电
    4              RESET
                                                平将引起系统复位。

    5               VCC                          数字电路的电源

    6               GND                                地

    7              XTAL2                      反向振荡放大器的输出端

    8              XTAL1             反向振荡放大器与片内时钟操作电路的输入端

                    PD0                          8 位双向 I/O 口
    9
                    RXD                           USART 输入引脚

                    PD1                          8 位双向 I/O 口
   10
                    TXD                           USART 输出引脚

                    PD2                          8 位双向 I/O 口
   11
                    INT0                        外部中断 0 的输入

                    PD3                          8 位双向 I/O 口
   12
                    INT1                        外部中断 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

                                   端口A 与A/D转换器的电源。。不使用ADC 时,该

   27               AVCC           引脚应直接与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 口


                    AIN1                          模拟比较负输入

                     OC0                       T/C0 输出比较匹配输出

   44                SS                          SPI 从机选择引脚

          Atmega16单片机有32个通用I/O口,有PA ~PD四组,每组都是8位。其主要的寄存器有DDRXn(X=A,B,C,D;n=0,2,…,7,下同),PORTXn和PINXn。

           DDRX是方向寄存器,可读可写。在写操作时用于制定PX口是作为输入口还是输出口;在读操作时,从DDRX寄存器读出来的是端口的方向设定值。DDRX寄存器的初始值为0x00。

          PORTX是数据寄存器,可读写。在写操作时,从PORTX写入的数据存入内部锁存器,以确定端口的工作状态或者将写入的数据送到外部数据总线。PORTX寄存器的初始值为0x00。

           PINX用来访问端口X的逻辑值,且只允许读操作。从PINX读入的数据只是X口引脚的逻辑 状态。其初始值为高阻态。

/************************************引脚配置**************************************************/
/*
引脚配置为输入时,若 PORTxn 为 "1“ ,上拉电阻将使能。如果需要关闭这个上拉电阻, 可以将 PORTxn 清零,或者将这个引脚配置为输出。复位时各引脚为高阻态,即使此

时并没有时钟在运行。
当引脚配置为输出时,若 PORTxn 为 "1“ ,引脚输出高电平("1“) ,否则输出低电平(“0“)。
在 ( 高阻态 ) 三态 ({DDxn, PORTxn} = 0b00) 输出高电平 ({DDxn, PORTxn} = 0b11) 两种状态之间进行切换时,上拉电阻使能 ({DDxn, PORTxn} = 0b01) 或输出低电平

({DDxn, PORTxn} = 0b10) 这两种模式必然会有一个发生。通常,上拉电阻使能是xx可以接受的,因为高阻环境不在意是强高电平输出还是上拉输出。如果使用情况不是这样

子,可以通过置位 SFIOR 寄存器的 PUD 来禁止所有端口的上拉电阻.
在上拉输入和输出低电平之间切换也有同样的问题。用户必须选择高阻态 ({DDxn, PORTxn} = 0b00) 或输出高电平 ({DDxn, PORTxn}=0b10) 作为中间步骤
*/
void IO_change(void)
{
//高阻态
DDxn=0;
PORTxn=0;
//禁止所有端口的上拉电阻
SFIOR|=1<<PUD;
//输出高电平
DDxn=0xff;
PORTxn=0xff;
//使能所有端口的上拉电阻
SFIOR&=~(1<<PUD);
}

void IO_change_A(void)
{//高阻态
DDxn=0;
PORTxn=0;
//上拉电阻使能 ({DDxn, PORTxn} = 0b01) 或输出低电平 ({DDxn, PORTxn} = 0b10)
DDxn=0;
PORTxn=0xff;
/*
DDxn=0xff;
PORTxn=0;
*/
//输出高电平
DDxn=0xff;
PORTxn=0xff;

}
void IO_changge_B()
{//上拉输入
DDxn=0;
PORTxn=0xff;
//高阻态 ({DDxn, PORTxn} = 0b00) 或输出高电平 ({DDxn, PORTxn}=0b11)
DDxn=0;
PORTxn=0;
/*
DDxn=0xff;
PORTxn=0xff;
*/
//输出低电平
DDxn=0xff;
PORTxn=0;

}
/******************************************读取引脚的数据***************************************/
void read_PINX(void)
{
/*

                                                     PUD              上拉电
                                 DDxn   PORTxn    (in SFIOR)   I/O      阻      说明

                                   0       0          X       Input     No     高阻态 (Hi-Z)

                                   0       1          0       Input    Yes     被外部电路拉低时将输出电流

                                   0       1          1       Input     No     高阻态 (Hi-Z)

                                   1        0         X       Output    No     输出低电平 ( 吸收电流 )

                                   1        1         X       Output    No     输出高电平 ( 输出电流 )
不论如何配置 DDxn ,都可以通过读取PINxn 寄存器来获得引脚电平.PINxn 寄存器的各个位与其前面的锁存器组成了一个同步器,这样就可以避免在内部时钟状态发生改变的短时

间范围内由于引脚电平变化而造成的信号不稳定.引入了延迟是必然的。
*/
unsigned char i;
/* 定义上拉电阻和设置高电平输出       */
/* 为端口引脚定义方向     */
PORTB = (1<<PB7)|(1<<PB6)|(1<<PB1)|(1<<PB0);
DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0);
/* 为了同步插入 nop指令 */
_NOP();
/* 读取端口引脚 */
i = PINB;
}
/**************************未连接引脚的处理****************************************/
/*
如果有引脚未被使用,建议给这些引脚赋予一个确定电平。虽然如上文所述,在深层休眠模式下大多数数字输入被禁用,但还是需要避免因引脚没有确定的电平而造成悬空引脚在

其它数字输入使能模式 ( 复位、工作模式、空闲模式 ) 消耗电流。最简单的保证未用引脚具有确定电平的方法是使能内部上拉电阻。但要注意的是复位时上拉电阻将被禁用。如

果复位时的功耗也有严格要求则建议使用外部上拉或下拉电阻。不推荐直接将未用引脚与 VCC 或 GND 连接,因为这样可能会在引脚偶然作为输出时出现冲击电流。

*/



郑重声明:资讯 【AVR端口(DDxn,PORTxn)配置及其说明_艺术纸箱_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——