打印

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

[复制链接]
2277|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上接了开关电路

使用特权

评论回复
5
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);

使用特权

评论回复
6
晨光如沐|  楼主 | 2019-3-18 19:52 | 只看该作者
本帖最后由 晨光如沐 于 2019-3-19 08:11 编辑
Cjy_JDxy 发表于 2019-3-18 17:09
总感觉你那个while有问题
你这样写试试:
TRISIO=0X0C;

还是不行 全部为1

使用特权

评论回复
7
Cjy_JDxy| | 2019-3-19 08:36 | 只看该作者

你的仿真电路图是怎样的?

使用特权

评论回复
8
晨光如沐|  楼主 | 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;
}
这样理论上低电平应该比高电平宽 ,结果波形低电平远小于高电平
现在就很迷
仿真图如下

使用特权

评论回复
9
mzb2012| | 2019-3-19 10:19 | 只看该作者
不要仿真,实际板子跑跑来测试吧

使用特权

评论回复
10
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++);
    }




}



使用特权

评论回复
11
晨光如沐|  楼主 | 2019-3-19 15:00 | 只看该作者

老哥能不能你试试 让GPIO0等于GPIO2的电平看看
应该是
if(GPIO2==0)GPIO0=0;
else GPIO0=1;
没错吧 我试了不行 吐白沫

使用特权

评论回复
12
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;
    }




使用特权

评论回复
13
晨光如沐|  楼主 | 2019-3-19 15:38 | 只看该作者

我感觉可能是我仿真软件出问题了 一样硬件 一样软件 就是不一样 除了3口就是读不了

使用特权

评论回复
14
晨光如沐|  楼主 | 2019-3-19 15:40 | 只看该作者
mzb2012 发表于 2019-3-19 10:19
不要仿真,实际板子跑跑来测试吧

好的

使用特权

评论回复
15
Cjy_JDxy| | 2019-3-19 15:41 | 只看该作者
晨光如沐 发表于 2019-3-19 15:38
我感觉可能是我仿真软件出问题了 一样硬件 一样软件 就是不一样 除了3口就是读不了 ...

ANSEL   = 0x40 ; //pin AN0 is configured as analog
这一句你加了吗

使用特权

评论回复
16
ALTONZASX| | 2019-3-20 23:40 | 只看该作者
本帖最后由 ALTONZASX 于 2019-3-20 23:42 编辑

Dobra robota!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

14

帖子

0

粉丝