单片机的40个引脚大致可分为4类:电源、时钟、控制和I/O引脚。
⒈ 电源:
⑴ VCC - 芯片电源,接+5V;
⑵ VSS - 接地端;
⒉ 时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。
⒊ 控制线:控制线共有4根,
⑴ ALE/PROG:地址锁存允许/片内EPROM编程脉冲
① ALE功能:用来锁存P0口送出的低8位地址
② PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
⑵ PSEN:外ROM读选通信号。
⑶ RST/VPD:复位/备用电源。
① RST(Reset)功能:复位信号输入端。
② VPD功能:在Vcc掉电情况下,接备用电源。
⑷ EA/Vpp:内外ROM选择/片内EPROM编程电源。
① EA功能:内外ROM选择端。
② Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
我看完MCS-51的GPIO口之后,有如下结论:
P0 P1 P2 P3四组,每组八位的IO口,其中P0 P2 P3都有复用功能。
其中PO口的复用功能是可以做外部ROM或者外部RAM的数据总线/ 地址低位并行总线。
P2口的复用功能和P0很类似,但是没有数据总线的功能。他们在GPIO功能上也不是相同,P0口做输出的时候,是OD输出(无法输出高电平),所以需要外接上拉电路,虽然麻烦,但是带来一个新的好处就是可以自己设定上拉的电平高度,不一定和VDD一样了,可高一些;至于接的上拉电阻大小,这就根据你需要的sink和source current确认一下,一般工程上接个10K电阻就好了。对于P1口就是最纯粹的GPIO口(准双向口),在这个地方,值得注意的是,在所有IO口作输入时,总要先通过内部总线向锁存器写入“1”,使得输入引脚不至于被钳制在低电平(这个看看IO口内部结构分析一下就可以知道)。有的知识点提到我们读取引脚数据的方式有两种,一种是直接读引脚,还有一种是读锁存器的数据,两种方式有一些差别,对于某一个Pin长期输入来说,无需每次都对锁存器赋值,直接读引脚就好了;而对于某个引脚先读数据再在cpu处理完了再输出给这个引脚,这个方式的话就采用读锁存器的方式。最后讲一下P3口,P3口是MCS-51外设的复用口,包含串口、外部中断、定时器和外部RAM控制。
下面举几个例子来小试牛刀一下:
P3=0xfd;
delay
**************************************************
联系我们熟悉32位单片机STM32。
STM32的每个GPIO口都可以编程,和51一样,都不能位寻址;STM32的每个IO端口都有7个寄存器来控制。他们分别是:配置模式的2个32位的端口配置寄存器CRL和CRH;2个32位的数据寄存器IDR和ODR;1个32位的置位/复位寄存器BSRR;一个16位的复位寄存器BRR;1个32位的锁存寄存器LCKR
目前我们使用模式寄存器和数据寄存器就可以实现简单的GPIO口控制功能。
首先,开系统时钟和对应的外设时钟,然后复位所需的IO口的模式配置,复位结束之后进行置位,这里要提到一点的是,对数据寄存器的操作可以直接赋值寄存器,还可以使用一种叫做位带操作的方式,类似于位寻址;这个比较方便。
/*初始化GPIO设置,为所需要的模式*/
GPIOC->CRL&=0XFFFFFFF0;//Clear PORTC.0 Seting
GPIOC->CRL|=0X0000003;//设置为推挽输出
GPIOC->ODR=1<0; //PC.0初始化为逻辑1
/*位带操作宏定义*/
#define LED0 PCout(0)// PC0
#define LED1 PDout(2)// PD2
PS:那有几个问题想提出来:
1.Q:单片机复位后,IO口是什么状态?
A:据我的理解,51单片机复位后IO默认为输出模式,各个引脚的状态因为芯片内部结构已经固化死了,所以都是确定的,可以看内部结构分析得到。
2.Q:51单片机GPIO使用前不需要进行配置或者设置吗?
A:输入前必须先写入逻辑1,再进行读取,至于AFIO,接下来会仔细分析...
文章评论(0条评论)
登录后参与讨论