找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1960|回复: 10
收起左侧

请教一下51单片机引脚电压

[复制链接]
ID:1002173 发表于 2022-2-26 18:25 | 显示全部楼层 |阅读模式
50黑币
各位大佬好,目前我需要实现的功能是通过51单片机对方波脉冲进行计数这是方波的发生电路:
111111111.png
333333333333.png
这是产生的波形,方波峰值分别为-0.68V和3.24V:
2222222222222.jpg

这是单片机连接图,这里我选择P3.4/T0口作为输入方波的端口:
444444444444.png

但当我把方波产生电路的输出端和单片机连接时,输出端的电平会被单片机拉高并且保持在3.38V左右:
6666666666.png

55555555.png

这种情况下方波电路似乎就失效了,我不太明白为什么会导致这种结果,希望各位大佬能够帮我解答疑惑,谢谢。



代码如下,由于电压问题未解决,代码还没有完善:
/***************   writer:shopping.w   ******************/
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define DATA P1
sbit OE  = P2^5;
sbit EOC = P3^3;
sbit ST  = P2^7;

sbit C1  = P3^0;
sbit C2  = P3^1;
sbit C3  = P3^2;

sbit OUT1 = P3^7;
sbit IN1 = P3^4;

uint display_data = 0;  /*显示数据*/
uchar code LEDData[]=
{
        0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
uint count = 1;

//void T0Init()
//{
//        TMOD=0x05;
//        TH0=0XFF;
//        TL0=0xFD;
//        EA=1;
//        ET0=1;
//        TR0=1;
//}
void DelayMS(uint ms)
{
        uchar i;
        while(ms--)
        {
                 for(i=0;i<120;i++);
        }
}

void Display_Result(uint d)
{
       
        P2 = 0xf7;
        P0 = LEDData[d%10];
        DelayMS(5);
        P2 = 0xfb;
        P0 = LEDData[d%100/10];
        DelayMS(5);
        P2 = 0xfd;
        P0 = (LEDData[d/100]| 0x80);
        DelayMS(5);
       
        P2 = 0xfe;
        P0 = LEDData[0];
        DelayMS(5);
       
}


void main()
{
//        T0Init();

        C1  = 1;
        C2  = 1;
        C3  = 0;
        OUT1 = 0;
        IN1=1;

        while(1)
        {
                OUT1 = ~OUT1;
                 ST = 0;
                ST = 1;
                ST = 0;
                while(EOC == 0);
                OE = 1;
                display_data = ((5.0/255) * DATA) * 100;
                //Display_Result(display_data);
                Display_Result(count);
               
                OE = 0;
                //count = count+1;

        }
}

//void T0_time() interrupt 1
//{
//        count = count+1;
//        TH0 = 0XFF;
//        TL0 = 0XFD;
//}



回复

使用道具 举报

ID:1002173 发表于 2022-3-3 00:30 | 显示全部楼层
发现在单片机和方波电路中间加个最简单的跟随电路就行了,应该是起到隔离的作用。
回复

使用道具 举报

ID:1002173 发表于 2022-3-3 00:31 | 显示全部楼层
过程中还查阅了张志良老师编著的《80C51单片机实验实训100例 基于Keil C和Proteus》。问题已解决!
回复

使用道具 举报

ID:1002173 发表于 2022-3-2 14:32 | 显示全部楼层
温xyz 发表于 2022-2-27 11:37
把R10改为1000欧就行了,另外还要加上负脉冲嵌位。你现在只有正向嵌位稳压二极管。

我把R10改成1000Ω之后还是有这个问题
回复

使用道具 举报

ID:1006852 发表于 2022-3-1 12:19 | 显示全部楼层
1134549525 发表于 2022-2-27 01:09
我查资料看51单片机设置I/O口输入是要把端口设置成1,我把P3.4设置成1了但是没效果,可能是我理解的不太 ...

STC单片机输出口是有4种模式,如下是P0口我的设置。其它口看手册。
//P1M1=0X00;
//P1M0=0XFF;
P0M1=0X00;
P0M0=0XFF;

评分

参与人数 1黑币 +5 收起 理由
1134549525 + 5 谢谢,我查资料看看

查看全部评分

回复

使用道具 举报

ID:965189 发表于 2022-2-27 18:28 | 显示全部楼层
本帖最后由 君工创 于 2022-2-27 18:36 编辑

如果方波发生器输出能力足够的话,R10应在100欧到1K之间。

评分

参与人数 1黑币 +5 收起 理由
1134549525 + 5 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:8222 发表于 2022-2-27 11:39 | 显示全部楼层
不用加负脉冲嵌位了,这稳压管已经有正反向嵌位功能。
回复

使用道具 举报

ID:8222 发表于 2022-2-27 11:37 | 显示全部楼层
把R10改为1000欧就行了,另外还要加上负脉冲嵌位。你现在只有正向嵌位稳压二极管。

评分

参与人数 1黑币 +5 收起 理由
1134549525 + 5 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:1007030 发表于 2022-2-27 11:10 | 显示全部楼层
这个电压测量值是正常的,与你选择的表有关。通常万用表测量的电压对频率的要求是50Hz,而你现在的频率远超过了万用表所测的频率范围。

评分

参与人数 1黑币 +5 收起 理由
1134549525 + 5 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:1002173 发表于 2022-2-27 01:09 | 显示全部楼层
percy 发表于 2022-2-26 20:12
单片机输出口的输出模式你设置了吗?

我查资料看51单片机设置I/O口输入是要把端口设置成1,我把P3.4设置成1了但是没效果,可能是我理解的不太对?
回复

使用道具 举报

ID:1006852 发表于 2022-2-26 20:12 | 显示全部楼层
单片机输出口的输出模式你设置了吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表