AVR单片机很简单:C语言快速入门及开发实例
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3 各端口说明

2.3.1 PA端口

(1)A口特性 端口A是一个8位通用双向输入/输出(I/O)口,它分配有三个数据存储地址,分别为数据寄存器PORTA($003B),数据方向控制寄存器DDRA($003A)和A口的引脚寄存器PINA($0039)。A口的输入引脚地址为只读方式,而数据方向控制寄存器和数据寄存器为读写方式。

(2)寄存器

①端口A数据寄存器(PORTA)的各位定义如下:

②端口A数据方向控制寄存器(DDRA)的各位定义如下:

③端口A输入引脚寄存器(PINA)的各位定义如下:

(3)第二功能 端口A的第二功能用于外部存储器接口的低字划地址及数据位。端口A的第二功能如表2-3所示。

表2-3 端口A的第二功能

2.3.2 PB端口

(1)B口特性 端口B是一个8位通用双向输入/输出(I/O)口,它分配有三个数据存储地址,分别为数据寄存器PORTB($0038),数据方向控制寄存器DDRB($0037)和B口的输出引脚寄存器PINB($0036)。其每一个引脚都具有可编程的内部上拉电阻。B口的输入引脚地址为只读方式,而数据方向控制寄存器和数据寄存器为读写方式。

(2)寄存器

①端口B数据寄存器(PORTB)的各位定义如下:

②端口B数据方向控制寄存器(DDRB)的各位定义如下:

③端口B输入引脚寄存器(PINB)的各位定义如下:

(3)第二功能 端口B的第二功能用于定时/计数器输出及SPI功能接口。端口B的第二功能如表2-4所示。

表2-4 端口B的第二功能

①Bit7(OC2/OC1C)。PB7可以作为T/C2输出比较器模块的输出,此时引脚必须配置为输出(DDB7设置为“1”),OC2引脚也是PWM模式的输出引脚。PB7也可以作为T/C1输出比较C模块的输出,此时引脚必须配置为输出(DDB7设置为“1”),OC1C是PWM模式的输出引脚,其中,OC2为输出比较匹配模块的输出,OC1C为输出比较匹配C模块的输出。

②Bit6(OC1B)。PB6可以作为T/C1输出比较B模块的输出,此时引脚必须配置为输出(DDB6设置为“1”),OC1B是PWM模式的输出引脚。其中,OC1B为输出比较匹配B模块的输出。

③Bit5(OC1A)。PB5可以作为T/C1输出比较A模块的输出,此时引脚必须配置为输出(DDB5设置为“1”),OC1A是PWM模式的输出引脚。其中,OC1A为输出比较匹配A模块的输出。

④Bit4(OC0)。PB4可以作为T/C0输出比较模块的输出,此时引脚必须配置为输出(DDB4设置为“1”),OC0是PWM模式的输出引脚。其中,OC0为输出比较匹配B模块的输出。

⑤Bit3(MISO)。MISO为SPI通道的主机数据输入和从机数据输出。当工作于主机模式时,不论DDB3的设置如何,这个引脚都将设置为输入;当工作于从机械模式时,这个引脚的数据方向由DDB3控制。设置为输入时,上拉电阻由PORTB3控制。

⑥Bit2(MOSI)。当工作于从机模式时,不论DDB2设置如何,这个引脚都将设置为输入;当工作于主机模式时,这个引脚的数据方向由DDB2控制。设置为输入后,上拉电阻由PORTB2控制。其中MOSI为SPI通道的主机数据输出和从机数据输入。

⑦Bit1(SCK)。当工作于从机模式时,不论DDB1设置如何,这个引脚都将设置为输入,当工作于主机模式时,这个引脚的数据方向由DDB1控制。设置为输入后,上拉电阻由PORTB1控制,其SCK为SPI通道的主机时钟输出和从机时钟输入。

⑧Bit0()。当工作于从机模式时,不论DDB0设置如何,这个引脚都将设置为输入;当工作于主机模式时,这个引脚的数据方向DDB0控制,设置为输入后,上拉电阻由PORTB0控制,其中为从机选择输入。

2.3.3 PC端口

(1)C口特性 端口C是一个8位通用双向输入/输出(I/O)口,它分配有三个数据存储地址,分别为数据寄存器PORTC($0035),数据方向控制寄存器DDRC($0034)和C口的输出引脚寄存器PINC($0033)。其每一个引脚都具有可编程的内部上拉电阻,C口的输入引脚地址为只读方式,而数据方向控制寄存器和数据寄存器为读写方式。

(2)寄存器

①端口C数据寄存器(PORTC)的各位定义如下:

②端口C数据方向控制寄存器(DDRC)的各位定义如下:

③端口C输入引脚寄存器(PINC)的各位定义如下:

当系统处于ATmega103兼容模式时,DDRC和PINC寄存器被初始化为推挽零输出。即使在时钟没有运行的情况下,端口也保持其初始值。要注意的是,在ATmega103兼容模式下DDRC和PINC是可见的。

在ATmega103兼容模式下,端口C为输出端口,其第二功能为外部存储器接口的地址高字节。端口C的第二功能如表2-5所示。

表2-5 端口C的第二功能

2.3.4 PD端口

(1)D口特性 端口D是一个8位通用双向输入/输出(I/O)口,它分配有三个数据存储地址,分别为数据寄存器PORTD($0032),数据方向控制寄存器DDRD($0031)和D口的输出引脚寄存器PIND($0030)。其每一个引脚都具有可编程的内部上拉电阻,D口的输入引脚地址为只读方式,而数据方向控制寄存器和数据寄存器为读写方式。

(2)寄存器

①端口D数据寄存器(PORTD)的各位定义如下:

②端口D数据方向控制寄存器(DDRD)的各位定义如下:

③端口D输入引脚寄存器(PIND)的各位定义如下:

(3)第二功能 端口D的第二功能如表2-6所示。

表2-6 端口D的第二功能

①Bit7(T2)。T2为T/C2的计数输入源。

②Bit6(T1)。T1为T/C1的计数输入源。

③Bit5(XCK1)。PD5可以作为USART1的外部输入/输出时钟,其数据方向寄存器控制时钟为输入(DDD4为“0”)还是输出(DDD4为“1”)。只有当USART1工作于同步模式时XCK1才有效。其中,XCK1为USART1的外部时钟。

④Bit4(ICP1)。PD4可以作为T/C1的输入捕捉引脚。其中ICP1为输入捕捉引脚1。

⑤Bit3(IN3/TX1)。PD3以作为MCU的外部中断源3(INT3)。当使能了USART1的发送器后,这个引脚被强制设置为输出,此时DDD3不起作用,其中,TXD1为USART1的数据发送引脚。

⑥Bit2(INT2/RXD1)。PD2可以作为MCU的外部中断源2(INT2)。当使能了USART1的接收器后,这个引脚被强制设置为输出,此时DDD2不起作用。但是PORTD2仍然控制上拉电阻。其中,RXD1为USART1的数据接收引脚。

⑦Bit1(INT1/SDA)。PDI可以作为MCU的外部中断源1(INT1)。当寄存器TWCR的TWEN置位时使能两线接口。引脚PDI与端口脱离开而成为两线接口的串行数据I/O引脚。此时,引脚配置一个尖峰滤波器以抑制50ns以下的尖峰信号,而引脚由具有斜率限制功能的开漏驱动器驱动。其中,SDA为两线接口的数据引脚。

⑧Bit0(INT0/SCL)。PD0可以作为MCU的外部中断源0(INT0)。当寄存器TWCR的TWEN置位时使能两线接口,引脚PD0与端口脱离开而成为两线接口的串行数据时钟I/O引脚。此时,引脚配置一个尖峰滤波器以抑制50ns以下的尖峰信号,而引脚由具有斜率限制功能的开漏驱动器驱动。其中SCL为两线接口的时钟。

2.3.5 PE端口

(1)E口特性 端口E是一个8位通用双向输入/输出(I/O)口,它分配有三个数据存储地址,分别为数据寄存器PORTE($0023),数据方向控制寄存器DDRE($0022)和E口的输出引脚寄存器PINE($0021)。其每一个引脚都具有可编程的内部上拉电阻,E口的输入引脚地址为只读方式,而数据方向控制寄存器和数据寄存器为读写方式。

(2)寄存器

①端口E数据寄存器(PORTE)的各位定义如下:

②端口E数据方向控制寄存器(DDRE)的各位定义如下:

③端口E输入引脚寄存器(PINE)的各位定义如下:

(3)第二功能 端口E的第二功能如表2-7所示。

表2-7 端口E的第二功能

①Bit7(INT7/ICP3)。PE7可以作为MCU的外部中断源7(INT7),还可以作为T/C3的输入捕捉引脚。其中,ICP3为输入捕捉引脚3。

②Bit6(INT6/T3)。PE6可以作为MCU的外部中断源6(INT6),T3为T/C3的计数输入源。

③Bit5(INT5/OC3C)。PE5可以作为MCU的外部中断源5(INT5),还可以作为T/C3输出比较C的输出引脚,此时需要置DDE5以将其配置为输出。OC3C还可以作为PWM模式的输出,其中,OC3C为输出比较匹配C的输出。

④Bit4(INT4/OC3B)。PE4可以作为MCU的外部中断源4(INT4),还可以作为T/C3输出比较B的输出引脚,此时需要置位DDE4以将其配置为输出。OC3B可以作为PWM模式的输出,其中,OC3B为输出比较匹配B的输出。

⑤Bit3(AINI/OC3A)。AIN1为模拟比较器负输入端,PE3可以作为T/C3输出比较A的输出引脚,此时需要置位DDE3以将其配置为输出,OC3A不还可以作为PWM模式的输出,其中,OC3A为输出比较匹配A的输出。

⑥Bit2(AIN0/XCK0)。AIN0为模拟比较器正输入端,PE2可以作为USART0的外部输入/输出时钟,其数据方向寄存器DDE控制这个时钟是输入时钟(DDE2为“0”)还是输出时钟(DDE2O“1”)。只有当USART0工作于同步模式时XCK0才会生效,其中,XCK0为USART0的外部时钟。

⑦Bit1(PDO/TXD0)。在串行下载程序时,PE1用来输出数据。其中,PD0为SPI串行编程的数据输出。TXD0为USART0发送引脚。

⑧Bit0(PDI/RXD0)。在串行下载程序时,PE0用来输入数据。其中,PDI为SPI串行编程的数据输入。不管DDRE0的设置如何,当使能USART0接收器后这个引脚配置为输入。PORTE0仍然控制着上拉电阻的使能,其中,RXD0为USART0接收引脚。

2.3.6 PF端口

(1)F口特性 端口F可作为ADC的模拟输入引脚,也可作为8位通用双向(I/O)口,它分配有三个数据存储地址,分别为数据寄存器PORTF($0062),数据方向控制寄存器DDRF($0061)和F口的输出引脚寄存器PINF($0020)。其每一个引脚都具有可编程的内部上拉电阻,F口的输入引脚地址为只读方式,而数据方向控制寄存器和数据寄存器为读写方式。

(2)寄存器

①端口F数据寄存器(PORTF)的各位定义如下:

②端口F数据方向控制寄存器(DDRF)的各位定义如下:

③端口F输入引脚寄存器(PINF)的各位定义如下:

在ATmega103兼容模式下寄存器PORTF和DDRF是不可见的,因为此时端口F只能作为输入引脚使用。

(3)第二功能 端口F的第二功能是ADC输入。如果端口F的一些引脚配置为输出,则在A/D转换过程中不要改变输出引脚的电平,否则可能会损坏转换结果,在ATmega103兼容模式下端口F只能作为输入。若使能了JTAG接口,则即使在复位阶段PF7(TDI)、PF5(TMS)和PF4(TCK)的上拉电阻仍然有效。端口F的第二功能如表2-8所示。

表2-8 端口F的第二功能

①Bit7(ADC/TDI)。ADC7为模数转换器通道7。PF7可以作为将要移入指令寄存器或数据寄存器(扫描链)的串行输入数据。使能JTAG接口之后这个引脚不能再用作普通I/O口。其中,TDI为JTAG测试数据输入引脚。

②Bit6(ADC6/TDO)。ADC6为模数转换器通道6。PF6可以作为将要移入指令寄存器或数据寄存器的串行输出数据。使能JTAG接口之后这个引脚不能再用作普通I/O口。除TAP状态外TDO引脚为三态,其中,TDO为JTAG测试数据输出引脚。

③Bit5(ADC5/TMS)。ADC5为模数转换器通道5。PF5可以作为TAP控制器状态机的定位。使能JTAG接口之后这个引脚不能再用作普通I/O口。其中,TMS为JTAG测试模式选择引脚。

④Bit4(ADC4/TCK)。ADC4为模数转换器通道4。使能JTAG接口后PF4可以作为JTAG测试时钟,以提供JTAG基准时钟。其中,TCK为JTAG测试时钟。

⑤Bit3~Bit0(ADC3~ADC0)。模数转换器通道3~0。

2.3.7 PG端口

(1)G口特性 端口G是一个8位通用双向输入/输出(I/O)口,它分配有三个数据存储地址,分别为数据寄存器PORTG($0065)、数据方向控制寄存器DDRG($0064)和G口的输出引脚寄存器PING($0063)。G口的输入引脚地址为只读方式,而数据方向控制寄存器和数据寄存器为读写方式。

在ATmega103兼容模式下,端口G只能作为外部存储器的所存信号以及32kHz振荡器的输入,并且在复位时这些引脚初始化为PG0=1、PG=1以及PG2=0。PG3和PG4是振荡器引脚。

(2)寄存器

①端口G数据寄存器(PORTG)的各位定义如下:

②端口G数据方向控制寄存器(DDRG)的各位定义如下:

③端口G输入引脚寄存器(PING)的各位定义如下:

(3)第二功能 在ATmega103兼容模式下端口G只具有下面描述的第二功能,而不能用作通用数字I/O端口。端口G的第二功能如表2-9所示。

表2-9 端口G的第二功能

①Bit4(TOSC1)。当寄存器ASSR的AS0置位时使能T/C0的异步时钟,PG4从端口上脱离,成为反向振荡器放大器的输入,此时可以外接晶体振荡器,同时不能用作I/O。其中,TOSC1为定时器振荡器引脚。

②Bit3(TOSC2)。当寄存器ASSR的AS0置位时使能T/C0的异步时钟,PG3从端口上脱离,成为反向振荡器放大器的输入,此时可以外接晶体振荡器,同时不用作I/O,其中,TOSC2为定时器振荡器引脚2。

③Bit2(ALE)。ALE为外部存储器地址锁存使能信号。

④Bit1()。为外部存储器写控制信号。

⑤Bit0()。为外部存储器写控制信号。

(4)特殊功能I/O寄存器 特殊功能I/O寄存器(SFIOR)的位定义如表2-10所示。

表2-10 SFIOR特殊功能I/O寄存器位定义