![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=1739375301-j6Yr9Q8LabuEPiOpcbYdhmNEq1nbGAxb-0-88e2047b83b63f95435cc68b608ed1b8)
②端口A数据方向控制寄存器(DDRA)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00026001.jpg?sign=1739375301-HXunR32fh6NQEmcrWPSWrLSkAnMok2d1-0-69b728af60aef865c61e424ab2f53ec3)
③端口A输入引脚寄存器(PINA)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00026002.jpg?sign=1739375301-SU0vsZyv4dfG5ginISs2IPRXZwUtHznm-0-e0e6d24c35f342eeed17c94f13057d63)
(3)第二功能 端口A的第二功能用于外部存储器接口的低字划地址及数据位。端口A的第二功能如表2-3所示。
表2-3 端口A的第二功能
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00026003.jpg?sign=1739375301-ZTTYeMYaf89nJVkDZ6qohHpsgJDJZh0e-0-622ad85a17fe5eabb14d3fa8d79fe8de)
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=1739375301-PUuggZYFSGod2ZoTv9QW2KLqghawuWPz-0-dec88ea313f9d4e121b293aec321addf)
②端口B数据方向控制寄存器(DDRB)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00026005.jpg?sign=1739375301-6TQ2jtftVpyETGyXx9wT8WSkdk2FHzi6-0-955dffd79454b53f6473b8f0c2eb645b)
③端口B输入引脚寄存器(PINB)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00026006.jpg?sign=1739375301-glvktzqHnPZBWd2ZLZj4mH7ELZyFrwm1-0-a9c7a1bbc9259e663d0bf99b7c598c5b)
(3)第二功能 端口B的第二功能用于定时/计数器输出及SPI功能接口。端口B的第二功能如表2-4所示。
表2-4 端口B的第二功能
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00027001.jpg?sign=1739375301-M3DX3yzTrHBeOzI3XvpF0Q0xibcNSIB2-0-3e9dd97153ff82e80aa2790ca704ecf1)
①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=1739375301-BATylPWSHhFcf49fhcgbD7bTDAqcrF6H-0-34c5ceafd294a857f2178722a77b4ea5)
②端口C数据方向控制寄存器(DDRC)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00028002.jpg?sign=1739375301-LE1YqcjbxddKDdcFs1VaczJ2veZsSLFQ-0-0678263ceca0f4b9dde6be89497a5df0)
③端口C输入引脚寄存器(PINC)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00028003.jpg?sign=1739375301-kApbo1lp81t4zX9JudmZAJmYDeSXVfsi-0-494f88c68745cd52d204c97dd57a9f16)
当系统处于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=1739375301-SAJS0YQIJ0mFlw7PkXyQDj5mtPCm1CS5-0-0a4483634cce35b11ba84f0397604761)
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=1739375301-Sb6bNr6DwP4IpV4tKzeTGWyJwbefoe0w-0-3d98783f0371c8ae71c2d46a6d2c435e)
②端口D数据方向控制寄存器(DDRD)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00028006.jpg?sign=1739375301-sli4ACSv56kzJPzd36UwaCYYq4osWA5K-0-72c3e7af29f433fc6fbea7390dbea276)
③端口D输入引脚寄存器(PIND)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00029001.jpg?sign=1739375301-VK1RWYbtkxWKJZm3om6kdlPFh7fWFOCI-0-b7da919dd85ab777aeff58739aa49a0e)
(3)第二功能 端口D的第二功能如表2-6所示。
表2-6 端口D的第二功能
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00029002.jpg?sign=1739375301-toglavfmXRRhd2pqM0vxgAdX0vDi3fbu-0-63a4138eda2c42af34d8761993506e67)
①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=1739375301-JZ7tjNuzErGJw0RyFh7OlXgP3IH4dECj-0-e7c622fa70778e20bef6a33a59d52252)
②端口E数据方向控制寄存器(DDRE)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00030002.jpg?sign=1739375301-ze1pBXbjrUICOS166IhcA1Xk932mtseG-0-6fe615fdd9d9995b4ec7f61574dbb028)
③端口E输入引脚寄存器(PINE)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00030003.jpg?sign=1739375301-Ai654udc1FjiKNMHbDHzQlYftLMNC8zI-0-043d336c2534067322853d74b7409143)
(3)第二功能 端口E的第二功能如表2-7所示。
表2-7 端口E的第二功能
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00030004.jpg?sign=1739375301-l7140WVMWEASrqrbP6fexywwtdVmIZHO-0-622b6efda731203cf7896aeee736ebc0)
①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=1739375301-LhVLnREBGzJl6cartSXRnFennv5XsDwD-0-8329d5e79c9bb6c4f46820931639b137)
②端口F数据方向控制寄存器(DDRF)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00031002.jpg?sign=1739375301-TRrwfTY5NHnm8EvMSkMVyNhkkqsGNIOx-0-32cb5c467e1ee7e0d96200daa8c77c77)
③端口F输入引脚寄存器(PINF)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00031003.jpg?sign=1739375301-XnfN81NarM4qUh9CzXvoByz4kltsTncF-0-8a253a668301715e73cfe5dc435a9ca1)
在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=1739375301-Q8y3JKM4U549TuUQPWWFtuouc5hKLAyU-0-d20e3b6b22eb0a67377d663d2bdbd1fc)
①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=1739375301-jKKZ7SEfpbaJGTZwe14v6u4d1LZpoaca-0-cd9c147ecc3d82686ce5ce70dc69826b)
②端口G数据方向控制寄存器(DDRG)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00032002.jpg?sign=1739375301-tlVQCv7ReF3Xm781kYATqW3BIfU3UXQH-0-60421b41a36b5792726c2fefed91ade2)
③端口G输入引脚寄存器(PING)的各位定义如下:
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00032003.jpg?sign=1739375301-eShWUsrIQhQ9PuHQtb1tUS4fcbnHAqZ1-0-62a9159de742e4497f38935a6bb478c2)
(3)第二功能 在ATmega103兼容模式下端口G只具有下面描述的第二功能,而不能用作通用数字I/O端口。端口G的第二功能如表2-9所示。
表2-9 端口G的第二功能
![](https://epubservercos.yuewen.com/A733D6/16499768105836206/epubprivate/OEBPS/Images/img00033001.jpg?sign=1739375301-h6BTYrIVyAHWiwlBZ70mhgK330RKTRof-0-bcef030c15fb06af6d9a5c93abe1b2a9)
①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=1739375301-uX8TgyUmDCbOu8ngDCC5uk1eMesa027v-0-94fb8729b5f3fa2fe1cc162128e177d9)