有很多朋友在学习的时候,都会对其阻值的取值问题而头疼。其实,
P0
口
接不接上拉电阻,电阻值该选择多大的都是根据不同的情况来选择的。下面来简单分析下如下的几种情况: 种:
P0
口
作为共阳极LED数码管的驱动端
口
。这种情况下,
P0
口
主要是以吸收电流来作为有效工作方式,不对外输出高电平,此时,不应接上拉,任何上拉都不要接。接多少丢多少。不仅增加成本,而且增大了工作电流。至于数码管的鬼影问题,那是程序部分的问题,与硬件无关。 第二种:
P0
口
作为数据传输接
口
。这种情况下,
P0
口
需要输出高电平,而高电平的输出其实就是来自于上拉电阻。在数据输出状态下,
P0
口
的负载都是逻辑器件,不需要大的输入功率,那么,就可
最新单片机仿真 用数组的指针控制
P0
口
8 位LED流水点亮最新单片机仿真 用数组的指针控制
P0
口
8 位LED流水点亮最新单片机仿真 用数组的指针控制
P0
口
8 位LED流水点亮最新单片机仿真 用数组的指针控制
P0
口
8 位LED流水点亮最新单片机仿真 用数组的指针控制
P0
口
8 位LED流水点亮最新单片机仿真 用数组的指针控制
P0
口
8 位LED流水点亮最新单片机仿真 用数组的指针控制
P0
口
8 位LED流水点亮最新单片机仿真 用数组的指针控制
P0
口
8 位LED流水点亮最新单片机仿真 用数组的指针控制
P0
口
8 位LED流水点亮最新单片机仿真 用数组的指针控制
P0
口
8 位LED流水点亮最新单片机仿真 用数组的指针控制
P0
口
8 位LED流水点亮最新单片机仿真 用数组的指针控制
P0
口
8 位LED流水点亮最新单片机仿真 用数组的指针控制
P0
口
8 位LED流水点亮最新单片机仿真 用数组的指针控制
P0
口
8 位LED流水点亮最新单片机仿真 用数组的指针控制
P0
口
8 位LED流水点亮最新单片机仿真 用数组的指针控制
P0
口
8 位LED流水点亮最新单片机仿真 用数组的指针控制
P0
口
作为I/O
口
输出的时候时,输出低电平为0 输出高电平为高组态(并非5V,相当于悬空状态,也就是说
P0
口
不能真正的输出高电平)。给所接的负载提供电流,因此必须接(一电阻连接到VCC),由电源通过这个上拉电阻给负载提供电流。
P0
作输入时不需要上拉电阻,但要先置1。因为
P0
口
作一般I/O
口
时上拉场效应管一直截止,所以如果不置1,下拉场效应管会导通,永远只能读到0。因此在输入前置1,使下拉场效应管截止,端
口
会处于高阻浮空状态,才可以正确读入数据。 由于
P0
口
内部没有上拉电阻,是开漏的,不管它的驱动能力多大,相当于它是没有电源的,需要外部的电路提供,绝大多数情况下
P0
口
是必需加上拉电阻的。
欢迎扫码关注本人微信公众号:公众号上分享更多嵌入式知识和资料,分享个人学习嵌入式的心得体会。欢迎大家一起来玩呀。
我们写C51代码的时候给
P0
口
写一些值都是使用
P0
= 0Xff,但是这个
P0
是什么意思,在那里定义呢?
其实是在<reg51.h>这个头文件中。我们打开<reg51.h>这个头文件可以看到如下的定义。
//表示
P0
的寄存器地址的值为0x80;
sfr
P0
= 0x80;
sfr SP = 0x81;
可以使用定时器和中断的方式来实现
51单片机
同时输出
P0
和P1
口
的信号。具体步骤如下:
1. 配置定时器:使用定时器0或定时器1来产生中断,并设置中断时间为1/8000秒(125us)。同时,将定时器的计数值设置为一个比较大的值,例如65535,使得定时器每次计数都能够达到最大值,并产生中断。
2. 配置中断:在定时器中断服务函数中,设置
P0
和P1
口
的输出状态,使它们同时输出相应的信号。然后清除中断标志位,等待下一次中断的到来。
3. 启动定时器:在主函数中启动定时器,并开启中断。
以下是示例代码:
#include <reg51.h>
void timer_isr(void) interrupt 1 // 定时器中断服务函数
P0
= 0xFF; //
P0
口
输出高电平
P1 = 0xFF; // P1
口
输出高电平
TH0 = TL0 = 0xFFFF; // 重新设置定时器计数值
TF0 = 0; // 清除中断标志位
void main()
TMOD = 0x01; // 设置定时器0为模式1
TH0 = TL0 = 0xFFFF; // 设置定时器计数值
ET0 = 1; // 开启定时器中断
EA = 1; // 开启总中断
TR0 = 1; // 启动定时器
while(1)
// 主函数中可以添加其他代码
注意:以上代码仅为示例,需要根据实际需求进行修改和完善。同时,
P0
和P1
口
的输出状态也需要根据实际电路进行设置。