PIC12F629一个GPIO口如何实现即为输入又输出口

[复制链接]
2607|15
 楼主| 晨光如沐 发表于 2019-3-18 16:22 | 显示全部楼层 |阅读模式
求配置方法,我使用时分复用但是仿真的时候没用。。。
Cjy_JDxy 发表于 2019-3-18 16:35 | 显示全部楼层
时分复用应该可以呀。你是怎么仿真的?
 楼主| 晨光如沐 发表于 2019-3-18 17:02 | 显示全部楼层
Cjy_JDxy 发表于 2019-3-18 16:35
时分复用应该可以呀。你是怎么仿真的?

                        TRISIO=0X0C;
                        __delay_ms(10);
                        if(GPIO2==0){while(GPIO2==0)GPIO=0X00;}
                        else GPIO=0Xff;
                        TRISIO=0X08;
                        __delay_ms(10);
理论上应该可以实现 GPIO2上是什么电平就输出其他脚什么吗
我仿真接的示波器
 楼主| 晨光如沐 发表于 2019-3-18 17:02 | 显示全部楼层
Cjy_JDxy 发表于 2019-3-18 16:35
时分复用应该可以呀。你是怎么仿真的?

GPIO2上接了开关电路
Cjy_JDxy 发表于 2019-3-18 17:09 | 显示全部楼层
总感觉你那个while有问题
你这样写试试:
TRISIO=0X0C;
                        __delay_ms(10);
                        if(GPIO2==0)
                        GPIO=0X00;
                        else GPIO=0Xff;
                        TRISIO=0X08;
                        __delay_ms(10);
 楼主| 晨光如沐 发表于 2019-3-18 19:52 | 显示全部楼层
本帖最后由 晨光如沐 于 2019-3-19 08:11 编辑
Cjy_JDxy 发表于 2019-3-18 17:09
总感觉你那个while有问题
你这样写试试:
TRISIO=0X0C;

还是不行 全部为1
Cjy_JDxy 发表于 2019-3-19 08:36 | 显示全部楼层

你的仿真电路图是怎样的?
 楼主| 晨光如沐 发表于 2019-3-19 08:47 | 显示全部楼层
Cjy_JDxy 发表于 2019-3-19 08:36
你的仿真电路图是怎样的?

while(1)
{
GPIO=0XFF;
__delay_ms(1);
GPIO=0X00;
__delay_ms(10);
GPIO=0XFF;
}
这样理论上低电平应该比高电平宽 ,结果波形低电平远小于高电平
现在就很迷
仿真图如下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
mzb2012 发表于 2019-3-19 10:19 | 显示全部楼层
不要仿真,实际板子跑跑来测试吧
Cjy_JDxy 发表于 2019-3-19 11:01 | 显示全部楼层

看我的。


#include <pic12f675.h> // includ le fichier pic12f675
//#include <delay.c> //includ le fichier delay en μs
//#include <delay.h>

void main()
{
unsigned int i;
TRISIO0 = 1 ; //GPIO0 configuré en entrée
TRISIO1 = 0 ; //GPIO1 configuré en sortie
TRISIO2 = 0 ; //GPIO2 configuré en sortie
TRISIO3 = 0 ; //GPIO3 configuré en sortie
TRISIO4 = 1 ; //GPIO4 configuré en entrée
TRISIO5 = 0 ; //GPIO5 configuré en sortie
//ANSEL   = 0x41 ; //pin AN0 is configured as analog
//ADCON   = 0xC3 ; // reference voltage is Vdd
while(1)
    {

GPIO2 = 1 ;
for(i=0;i<60000;i++);
//delayMs    (1000);
GPIO2 = 0 ;
//delayMs(9000);
for(i=0;i<60000;i++);
    }




}



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 晨光如沐 发表于 2019-3-19 15:00 | 显示全部楼层

老哥能不能你试试 让GPIO0等于GPIO2的电平看看
应该是
if(GPIO2==0)GPIO0=0;
else GPIO0=1;
没错吧 我试了不行 吐白沫
Cjy_JDxy 发表于 2019-3-19 15:22 | 显示全部楼层
晨光如沐 发表于 2019-3-19 15:00
老哥能不能你试试 让GPIO0等于GPIO2的电平看看
应该是
if(GPIO2==0)GPIO0=0;

可以了。



TRISIO0 = 0 ; //GPIO0 configuré en entrée
TRISIO1 = 0 ; //GPIO1 configuré en sortie
TRISIO2 = 1 ; //GPIO2 configuré en sortie
TRISIO3 = 0 ; //GPIO3 configuré en sortie
TRISIO4 = 1 ; //GPIO4 configuré en entrée
TRISIO5 = 0 ; //GPIO5 configuré en sortie
ANSEL   = 0x40 ; //pin AN0 is configured as analog
//ADCON   = 0xC3 ; // reference voltage is Vdd
while(1)
    {

                if(GPIO2==0)GPIO0=0;
                else GPIO0=1;
    }




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 晨光如沐 发表于 2019-3-19 15:38 | 显示全部楼层

我感觉可能是我仿真软件出问题了 一样硬件 一样软件 就是不一样 除了3口就是读不了
 楼主| 晨光如沐 发表于 2019-3-19 15:40 | 显示全部楼层
mzb2012 发表于 2019-3-19 10:19
不要仿真,实际板子跑跑来测试吧

好的
Cjy_JDxy 发表于 2019-3-19 15:41 | 显示全部楼层
晨光如沐 发表于 2019-3-19 15:38
我感觉可能是我仿真软件出问题了 一样硬件 一样软件 就是不一样 除了3口就是读不了 ...

ANSEL   = 0x40 ; //pin AN0 is configured as analog
这一句你加了吗
ALTONZASX 发表于 2019-3-20 23:40 | 显示全部楼层
本帖最后由 ALTONZASX 于 2019-3-20 23:42 编辑

Dobra robota!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

14

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部