P2M1[7:0]
0
P2M0[7:0]
0
I/O口模式
准双向口(传统8051 I/O口模式), 灌电流可达20mA,拉电流为230uA, 由于制造误差,实际为250uA~150uA
0 1 1
1 0 1
推挽输出(强上拉输出,可达20mA,要加限流电阻)仅为输入(高阻)
开漏(Open Drain),内部上拉电阻断开,要外加
举例:
MOV P1M1, #10100000B MOV P1M0, #11000000B
P1.7为开漏,P1.6为强推挽输出,P1.5为高阻抗输入; P1.4/P1.3/P1.2/P1.1/P1.0为弱上拉。 注意:
虽然每个I/O口在弱上拉时都能承受20mA的灌电流(还是要加限流电阻,如1K,560Ω等),在强推挽输出时都能输出20mA的拉电流(也要加限流电阻),但整个芯片的工作电流推荐不要超过55mA。即从MCU--Vcc流入的电流不要超过55mA,从MCU--Gnd流出的电流不要超过55mA,整体流入/流出电流不能超过55mA。
1.3 STC12C5A16AD单片机I/O口各种不同的工作模式结果框图:
http://51eda.taobao.com/
1、准双向口输出配置
准双向口输出类型可用作输出和输入功能而不需重新配置口线输出状态。这是因为当口线输出为1时驱动能力很弱,允许外部装置将其拉低。当引脚输出为低时,它的驱动能力很强,可吸收相当大的电流。准双向口有3个上拉晶体管适应不同的需要。
在3个上拉晶体管中,有1个上拉晶体管为“弱上拉”,当口线寄存器为1且引脚本身也为1时打开。此上拉提供基本驱动电流使准双向口输出为1。如果一个引脚输出为1而由外部装置下拉到低时,弱上拉关闭而“极弱上拉维持开状态,为了把这个引脚拉为低,外部装置必须有足够的灌电流能力使引脚上的电压降到门槛电压以下。
第2个上拉晶体管,称为“极弱上拉”,当口线锁存为1时打开。当引脚悬空时,这个极弱的上拉源产生很弱的上拉电流将引脚上拉为高电平。
第3个上拉晶体管称为“弱上拉”。当口线锁存器由0变为1时,这个上拉用来加快准双向口由逻辑0到逻辑1转换。当发生这种情况时,强上拉打开大约2个时钟以使引脚能够迅速地上拉到高电平。 准双向口输出如图2-2所示。
图2-2准双向口输出图
准双向口带有一个施密特触发输入以及一个干扰抑制电路。
准双向口读外部状态前,要先锁存为‘1’才能读到外部正确的状态。 2、推挽输出配置
推挽输出配置的下拉结构与开漏输出以及准双向口的下拉结构相同,但当锁存器为1时提供持续的强上拉。推挽模式一般用于需要更大驱动电流的情况。
推挽引脚配置如图2-3所示。
http://51eda.taobao.com/
图2-3 推挽输出图
3、仅为输入(高阻)配置
输入口配置如图2-4所示。
图2-4 高阻配置图
输入口带有一个施密特触发输入以及一个干扰抑制电路。 4、开漏输出配置
图2-5 开漏输出电路图
当口线锁存器为0时,开漏输出关闭所有上拉晶体管。当作为一个逻辑 输出时,这种配置方式必须有外部上拉,一般通过电阻外接到VDD。这种方式的下拉与准双向口相同。输出口线配置如图2-5所示。
开漏端口带有一个施密特触发输入以及一个干扰抑制电路。
http://51eda.taobao.com/
关于I/O口的注意事项:有些I/O口由低变高读外部状态时读不对,实际并没有损坏,需要软件处理。原因是1T的8051单片机的速度太快了,软件执行由低变高指令后立即读外部状态,此时由于实际输出还没有变高,就可能读不对。正确的方法是在软件设置由低变高后加1到2个空操作指令延时,再读即可。
2 STC12C5A16AD单片机的A/D转换
2.1 STC12C5A16AD单片机A/D功能寄存器介绍
STC12C5A16AD系列单片机自带A/D,A/D转换口在P1口(P1.7-P1.0),有8路8位高速A/D转换器,速度可达到300KHz。8路电压输入型A/D,可作温度检测、电池电压检测、按键扫描、频谱检测等。上电复位后P1口为弱上拉型I/O口,用户可以通过软件设置将8路中的任何一路设置为A/D转换,不需作为A/D使用的口可继续作为I/O口使用。
需作为A/D使用的口需先将P1ASF特殊功能寄存器中的相应工作寄存器位设置为“1”,将相应的口设置为模拟功能,复位值P1ASF=0x00。
表2-5 STC12C5201AD系列单片机P1口模拟功能寄存器(只写,读无效)
Mnemonic Add P1ASF
7
6
5
4 P14ASF
3 P13ASF
2 P12ASF
1
0
9Dh P17ASF P16ASF P15ASFP11ASF P10ASF
表2-6 当P1口中的相应为做为A/D使用时,要将P1ASF中的相应位置1.
P1ASF[7:0] P1.X的功能 P1ASF.0=1 P1ASF.1=1 P1ASF.2=1
P1.0口作为模拟功能A/D使用P1.1口作为模拟功能A/D使用P1.2口作为模拟功能A/D使用
其中P1ASF寄存器地址为9DH(不能寻址)
或P1.2作为比较器时,在Power_Down模式下低功耗
P1ASF.3=1 P1ASF.4=1 P1ASF.5=1 P1ASF.6=1 P1ASF.7=1
P1.3口作为模拟功能A/D使用P1.4口作为模拟功能A/D使用P1.5口作为模拟功能A/D使用P1.6口作为模拟功能A/D使用P1.7口作为模拟功能A/D使用
表2-7为各个与A/D有关的特殊功能寄存器,功能介绍如下:
http://51eda.taobao.com/
1).如果要允许A/D中断则需要将相应的控制位置1: 将EADC置1,允许ADC中断,这是ADC中断的控制位。
将EA置1,打开单片机总中断控制位,此位不打开,也无法产生ADC中断。 A/D中断服务程序中要用软件清A/D中断请求标志位ADC_FALG(也A/D转换结束标志位)。
2).ADC_POWER:ADC电源控制位。
0:关闭ADC电源;1:打开ADC电源。初次打开内部A/D转换模拟电源,需适当延时,等内部电源稳定后,再启动A/D转换。建议启动A/D转换后,在A/D转换结束之前,不要改变任何I/O口的状态,有利于高精度的A/D转换。
3).ADC_RES特殊功能寄存器:A/D转换结果特殊功能寄存器
4).ADC_START:模数转换器(ADC)转换启动控制位,设置为“1”时,开始转换,转换结束后为0。
5).ADC_FLAG:模数转换器转换结束标志位,当A/D转换完成后,ADC_FLAG=1,要由软件清0。
表2-7 与A/D有关的特殊功能寄存器表
Mnemonic Add P1ASF ADC_CONT
R
ADC_RES BDh IE IP
A8h B8h
7
6
5
4 P14ASFADC_ FLAG
EADC PADC
3 P13ASFADC_ START
2 P12ASFCHS2
1
0
9Dh P17ASF P16ASF P15ASFBCh
ADC_ POWER EA
SPEED1 SPEED0
P11ASF P10ASFCHS1
CHS0
2.2 STC12C5A16AD单片机A/D功能寄存器ADC_CONTR
ADC_CONTR的最后3位控制A/D通道的选取。表2-6为通道选取寄存器的设置方式。
表2-8 通道选择寄存器
CHS2 0 0
CHS1 0 0
CHS0 0 1
模拟输入通道选择 选择P1.0作为A/D通道 选择P1.1作为A/D通道
http://51eda.taobao.com/
0 0 1 1 1 1
1 1 0 0 1 1
0 1 0 1 0 1
选择P1.2作为A/D通道 选择P1.3作为A/D通道 选择P1.4作为A/D通道 选择P1.5作为A/D通道 选择P1.6作为A/D通道 选择P1.7作为A/D通道
SPEED1,SPEED0:模数转换器转换速度控制位
表2-9 模数转换速度控制位
SPEED1 1 1 0 0
SPEED0 1 0 1 0
A/D转换所需时间 70个时钟周期转换一次 140个时钟周期转换一次 280个时钟周期转换一次 420个时钟周期转换一次
表2-10 A/D转换结果寄存器
ADC_RES
0000,0000
模拟/数字转换结果计算公式如下:结果ADC_RES[7:0]=256 *Vin/Vcc Vin为模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为模拟参考电压。
表2-11 A/D中断优先级控制寄存器
IPH
B7h
PADCH
STC12C5A16AD系列单片机的A/D转换模块使用的是外部晶体时钟或内部R/C振荡器所产生的系统时钟,不使用时钟分频寄存器CLK_DIV对系统时钟分频后所产生的供给CPU工作所使用的时钟。
好处:
这样可以让ADC用较高的频率工作,提高A/D的转换速度 这样可以让CPU用较低的频率工作,降低系统的功耗 程序中需要注意的事项:
由于是2套时钟,所以,设置ADC_CONTR控制寄存器后,要加4个空操作延时才能读到正确的ADC_CONTR寄存器的值,原因是设置ADC_CONTR控
http://51eda.taobao.com/
制寄存器的语句执行后,要经过4个CPU时钟周期的延时,其值才能保证设置进ADC_CONTR控制寄存器。
3 STC12C5A16AD单片机最小应用系统的构建
STC12C5A16AD单片机系统具备ISP功能,可以方便的实现程序的下载,宏晶的51单片机均采用串口进行ISP下载,但要求下载时单片机必须进入冷启动状态,最小应用系统可参考下图
http://51eda.taobao.com/