![AVR单片机很简单:C语言快速入门及开发实例](https://wfqqreader-1252317822.image.myqcloud.com/cover/188/29975188/b_29975188.jpg)
2.3 各端口说明
2.3.1 PA端口
(1)A口特性 端口A是一个8位通用双向输入/输出(I/O)口,它分配有三个数据存储地址,分别为数据寄存器PORTA($003B),数据方向控制寄存器DDRA($003A)和A口的引脚寄存器PINA($0039)。A口的输入引脚地址为只读方式,而数据方向控制寄存器和数据寄存器为读写方式。
(2)寄存器
①端口A数据寄存器(PORTA)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00025002.jpg?sign=1738885694-6j8gNHIUUudkN9mR6tiBQfcHj2hG5zs9-0-c986912a57c1695f0b96ffecbde6442d)
②端口A数据方向控制寄存器(DDRA)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00026001.jpg?sign=1738885694-rAs44kGDYY9Hri9ecVBvEyakV3mtjniQ-0-ee9e948158808a90c377de13433cfccd)
③端口A输入引脚寄存器(PINA)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00026002.jpg?sign=1738885694-VbXcKGVUOKAnMiZiikYs4JD4zHXgudP2-0-29725ff754be72ea498e7c7c8d7469dc)
(3)第二功能 端口A的第二功能用于外部存储器接口的低字划地址及数据位。端口A的第二功能如表2-3所示。
表2-3 端口A的第二功能
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00026003.jpg?sign=1738885694-lL2HK8vW9HtdKquak92As8dWJFDjQcte-0-d5a200a57e5645f15f9853f7f82d315f)
2.3.2 PB端口
(1)B口特性 端口B是一个8位通用双向输入/输出(I/O)口,它分配有三个数据存储地址,分别为数据寄存器PORTB($0038),数据方向控制寄存器DDRB($0037)和B口的输出引脚寄存器PINB($0036)。其每一个引脚都具有可编程的内部上拉电阻。B口的输入引脚地址为只读方式,而数据方向控制寄存器和数据寄存器为读写方式。
(2)寄存器
①端口B数据寄存器(PORTB)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00026004.jpg?sign=1738885694-uYG25G8MWt6wUrRTqkgZgpofU96hAhVr-0-7bea5eba2755765a67b53e0da66488b7)
②端口B数据方向控制寄存器(DDRB)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00026005.jpg?sign=1738885694-f4mFviD1RoIYjW7Rh0pnrEhW8zScUpuI-0-323cb290655f753ba6ac03d08e6c5a15)
③端口B输入引脚寄存器(PINB)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00026006.jpg?sign=1738885694-scLbzc3WXVX8DYyTTU91YDxy69qew7vf-0-399d3106d811e6a41f0cec797ed3eccf)
(3)第二功能 端口B的第二功能用于定时/计数器输出及SPI功能接口。端口B的第二功能如表2-4所示。
表2-4 端口B的第二功能
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00027001.jpg?sign=1738885694-Sbb01PkLxTZCG3H6n2TsIkwwwFxKkdKo-0-31105544ec26d897c5070efd6c865887)
①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)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00028001.jpg?sign=1738885694-g2uFTsAAjKJ57VfEocSY9AvuxERoUhSD-0-2c19b909d9cb23d40f1f85c0d852659e)
②端口C数据方向控制寄存器(DDRC)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00028002.jpg?sign=1738885694-OUTIhai4lbew0MttMxb347bWQ6LgjIgb-0-f8add82209cd4eb4d49e01bd62c3db0d)
③端口C输入引脚寄存器(PINC)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00028003.jpg?sign=1738885694-9J1QdfV3MQmjc0GRsLPcSNE0WOvf4pKg-0-49fa1167b9854410b4ca645be4ff762b)
当系统处于ATmega103兼容模式时,DDRC和PINC寄存器被初始化为推挽零输出。即使在时钟没有运行的情况下,端口也保持其初始值。要注意的是,在ATmega103兼容模式下DDRC和PINC是可见的。
在ATmega103兼容模式下,端口C为输出端口,其第二功能为外部存储器接口的地址高字节。端口C的第二功能如表2-5所示。
表2-5 端口C的第二功能
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00028004.jpg?sign=1738885694-t57w3vrncOs5Ov29HRNQ9befWIy8HU3Z-0-6368f5a856e81c298449da3c94ff1f78)
2.3.4 PD端口
(1)D口特性 端口D是一个8位通用双向输入/输出(I/O)口,它分配有三个数据存储地址,分别为数据寄存器PORTD($0032),数据方向控制寄存器DDRD($0031)和D口的输出引脚寄存器PIND($0030)。其每一个引脚都具有可编程的内部上拉电阻,D口的输入引脚地址为只读方式,而数据方向控制寄存器和数据寄存器为读写方式。
(2)寄存器
①端口D数据寄存器(PORTD)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00028005.jpg?sign=1738885694-brIOj7bTkffXM7wn2JinaOIwd2Yef5G7-0-13f7a37069120ac3f5233ab26247ef8b)
②端口D数据方向控制寄存器(DDRD)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00028006.jpg?sign=1738885694-uPlYubfN8AVF5OzTvwmI2cRP1F2piTq2-0-1281bd3a2c9931fc7966f89673b38dfc)
③端口D输入引脚寄存器(PIND)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00029001.jpg?sign=1738885694-LhhhtvBPYRwOGfMJ0pvXCaTjw6oJU6sK-0-62d23a910883bb35512fdbdd1511bb47)
(3)第二功能 端口D的第二功能如表2-6所示。
表2-6 端口D的第二功能
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00029002.jpg?sign=1738885694-nFWDjl5zngXdsjToeqjlvygPQ5ufDjFA-0-4037ba58b065665ba890dce269bbfe50)
①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)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00030001.jpg?sign=1738885694-49uTY5MAhTFM5I9wTPZDT5rr1f8Qfxzi-0-6e1a0f6ad731244a271b937bfeccf1b4)
②端口E数据方向控制寄存器(DDRE)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00030002.jpg?sign=1738885694-EQFMpWdEmaqInzoo2lhI3yfj3J1O9Gok-0-c46711dc1bbcd7616f6f0fa9c4aae80c)
③端口E输入引脚寄存器(PINE)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00030003.jpg?sign=1738885694-sdJotZXh7lN7qIgX5Inbkq8rzE3sjLzy-0-c086e2f1f1c8eb0d531de7815ad5df39)
(3)第二功能 端口E的第二功能如表2-7所示。
表2-7 端口E的第二功能
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00030004.jpg?sign=1738885694-5bDoB2rJcHQ7qjvkSuw6gP3M0aQqiGDT-0-42487e1ee18b978b9d396359b4e8ecc5)
①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)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00031001.jpg?sign=1738885694-HRH9HubiUG5TvIcwNowcy1Ym9oDGuA1W-0-945bd5f0e0a003022d783675cef5bae4)
②端口F数据方向控制寄存器(DDRF)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00031002.jpg?sign=1738885694-DnOjtklaLWSIywF5GQmsJAYOe4upv2lZ-0-dcf9823fd7db1a946bf9fb54f3325fab)
③端口F输入引脚寄存器(PINF)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00031003.jpg?sign=1738885694-ZTgmxlfh9nXuXtCiwIn2HrADG6TDFS43-0-f34f24bf3874b5b53738f1a8ebdf44b6)
在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的第二功能
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00031004.jpg?sign=1738885694-FtwZz317eHX5kVeXvMN8jtEdL2bVEPPD-0-9cdc6db8219ce9d5a928ab661b957722)
①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)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00032001.jpg?sign=1738885694-x6TQocNUmhsJ8ziI6bkmFr5vET70gnY5-0-a3c57fd38941c8f00ab84bf6f5d70ede)
②端口G数据方向控制寄存器(DDRG)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00032002.jpg?sign=1738885694-52ndUeKTthrFmCq1v6hlTttGAHvSYtUw-0-223af07c3d460fc81d7c1111b1b89dcc)
③端口G输入引脚寄存器(PING)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00032003.jpg?sign=1738885694-t55V7VQtvwPFgTKAVck3E9StC2a0PTli-0-e24c2c0cf2cff59e1d5d2c4876dcb4e5)
(3)第二功能 在ATmega103兼容模式下端口G只具有下面描述的第二功能,而不能用作通用数字I/O端口。端口G的第二功能如表2-9所示。
表2-9 端口G的第二功能
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00033001.jpg?sign=1738885694-lsCiMnZpot2NqYVEOCLH53TYjW0pZ7UB-0-f0c432e6b578cc6e74c83edb06e145ba)
①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寄存器位定义
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00033006.jpg?sign=1738885694-jgjN2ACk6rvYnSzMEKgvKe0WLOruLwJJ-0-8d7ae2bd04c51399363a98dd9cecb007)