单片机引脚读写操作
自己总结下单片机引脚的用法。
使用单片机时肯定会用到单片机的IO引脚。以51单片机P1口为例。内部结构如图所示
当单片机进行写操作时,引脚锁存器(D触发器)CLK端接收有效电平,然后内部总线上需要写的数据就会通过D触发器传输到Q'。当写1时Q'为0,使MOSFET截止,因此外部引脚电平为1.当写0时Q'为1,MOSFET饱和导通,此时引脚可以看成接地,所以引脚为0。
如果对单片机IO口进行读操作。由图可以看出读操作包括读寄存器和读引脚。以前知道有这两种区别,但是从来没仔细区分过。从图中可以看出读寄存器时读寄存器上的三态缓冲器打开,Q端的值直接传到了内部总线上,而下面的读引脚三台缓冲器是高阻态,读引脚时则相反。
汇编语言中对读寄存器和读引脚做了一定的区别,但说实话我在看汇编代码时还是区分不清两者的区别。现在大家对单片机编程应该大部分采用的都是C语言,在我看来,C语言中已经极大的淡化了读寄存器还是读引脚的区别。
有些人说a=P1是读引脚(a是某个字符变量),P1=P1|0x00是读寄存器(可能是认为这里P1进行了一次逻辑运算,只有寄存器中的值才能进行逻辑运算),但我在用C语言时感觉用P1=P1|0x00也是读的引脚。也有些人说看经过编译器编译后的汇编代码才能分辩出两者的区别,不知道这里大家怎么看读引脚和读寄存器?
在读引脚时需要先向引脚锁存器中写1。因为如果引脚寄存器中是0的话会导通MOSFET,使外部端口一直是低电平,即使外面接的是高电平在读引脚的时候也读的是0。以前知道需要这样做,但读引脚的时候一直没写过1,发现读的也对,现在我觉得这样写不符合规范。
一般来说单片机在上电复位后默认引脚寄存器的值是1,这样一来关断了MOSFET,而我们在使用单片机的时候如果这个引脚作为输入,也不会让它变成一会儿输出一会儿输入,使得能够准确的读出外部端口的值。现在我在写程序时如果端口做为输入引脚,我会在初始化里对其写一次1。当然,以后就不用写了,因为写了一次1后没有其他的写操作,引脚锁存器中会一直保持这个值不变。当然,如果某个单片机引脚同时作为输出和输入引脚复用时,则必须在输出完成后变成输入前先向其写1,再读引脚的值。
STC单片机的特殊功能寄存(SFR)
今天我们来聊一聊STC单片机的特殊功能寄存器(SFR)。
首先,特殊功能寄存器位于何处呢? STC单片机的内部随机读取存储器(RAM),在物理和逻辑上可分为两大部分,内部256字节的随机读取存储器,内部扩展的随机读取存储器。其中,第一部分的地址为00H至FFH,第二部分根据单片机型号的不同空间的大小也有所不同。第一部分又分为两个模块:地址为00H~7FH的低128字节通用RAM,和地址为80H~FFH的高128字节RAM,而我们所讨论的特殊功能寄存器,就位于高128字节的地址空间中。如图1.
图1 特殊功能寄存器的位置
这种内存划分适用于基本所有stc系列单片机,如STC89C51/52,STC10/12/15乃至最新的STC8系列单片机。如图2.
图2 各种型号的STC单片机
那么,具体到一种型号的单片机上,如何查询和使用某一特殊功能寄存器呢?这是stc 12c5a60s2系列单片机的特殊功能寄存器及地址映象的对应表。如图3.
图3 特殊功能寄存器的地址映象
在使用相应的寄存器时,先声明寄存器地址,再对寄存器赋值即可。比如我们要将P1端口的输出模式配置为推挽输出,这样操作即可。如图4.
图4 将P1端口设置为推挽输出
我们需要注意特殊功能寄存器的地址能够被8整除,那么就可以进行位操作,反之则不可进行位操作。那么,表中的第一列均可进行位操作。如图5.
图5 第一列可进行位操作
例如我们将P1端口的第二位电平拉高,可以直接对该位进行赋值,而不不必对整个P1端口进行或运算。
图6 将P1端口的第二位拉高
最后,在代码编写时,常常有朋友问到, reg51.h和reg 52.h这两个头文件有什么区别。这两个头文件都用于声明单片机的特殊功能寄存器。我们直接打开这两个头文件,注释内容告诉我们,reg51.h适用于80c51及80c31控制器,而reg52.h则适用于80c52及80c32控制器。如图7.
图7 两种头文件的区别
而c52单片机是c51单片机的增强板,主要区别为前者多了一个T2定时器,那么在头文件中,reg52.h就多了相应的T2定时器的相关特殊功能寄存器的声明,如定时器T2高八位、低八位寄存器:TH2,TL2;定时器T2中断允许寄存器:ET2等。如图8.
图8 reg52.h头文件多出的寄存器
相关问答
怎么最快的知道 STC单片机 的好坏???上电源后,怎么判断呢?我怀...我怀疑我的STC单片机坏了。电源ST讨论回答(6)是正确的检测最好你要搭建一个平台,这样一插上单片机写入之前写好的测试程序,这样是很快的也更全面,因为单片...
如何快速学会 stc 15系列 单片机 ?我学单片机也有几年了,今天我谈谈如何高效地学习单片机。单片机是一门实用的技术,既然是一门技术就应该按其固有的规律去学习,不可急于求成。第一步就是要多实...
如何复制 stc 15f204ea-35i-sop28 单片机 中的程序?STC单片机程序不支持读取,因此正常情况下,不能复制单片机里面写入的程序到另一块单片机。STC单片机程序不支持读取,因此正常情况下,不能复制单片机里面写入的...
stc单片机 发展史?单片机的发展先后经历了4位、8位、16位和32位等阶段。8位单片机由于功能强,被广泛用于工业控制、智能接口、仪器仪表等各个领域,8位单片在中、小规模应用场合...
STC单片机 51单片机有A版,B版,C版之分,怎么区别啊?如何识别A,B,C,D版见单片机表面文字最下面一行最后一个字母,例如有一款STC单片机上的文字如下89LE52RC40C-PLCC0632CT690800D最后一个字为D即为D版如何.....
单片机 开始可以烧程序用了几次就烧不进去 为什么?-ZOL问答有可能已经烧坏了,特别是89c52系列更特别是STC品牌的89C52的。很容易坏,你要...单片机是可以重复烧写的,每次烧写时会自动覆盖里面的内容。STC单片机的下载...
proteus怎么找 单片机 ?要找出符合proteus要求的单片机并不困难。1.Proteus是一款专门用来设计嵌入式系统的软件,在软件中预设了多种单片机型号和库文件,方便开发者使用,不需要自己...
stc单片机 是哪个公司?深圳宏晶公司,其生产超强抗干扰工业规格的单片微型计算机现推广的产品有:STC增强型8051系列FLASH单片机低成本、MCU型DSP微处理器、复位电源监控电路高性能SRA...
stc单片机 如何单线接收信号?你好,STC单片机可以通过单线接收信号的方式来实现通信。具体步骤如下:1.准备一个IO口作为接收信号的引脚。可以选择任意一个IO口,但需注意引脚的电平兼容性...
如何在keil4中添加 STC单片机 ?1、在STC的官网下载好最新的STC-ISP软件,然后在电脑上打开此软件。2、在kiel仿真设置页面下,点击“添加STC仿真驱动到keil软件中/添加型号和头文件到keil软件...