打印
[PIC®/AVR®/dsPIC®产品]

还是PIC16F1939的IO口控制问题.

[复制链接]
3063|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
    TRISD=0x00;

    RD5=1;   NOP();  NOP();  RD0=1;
    RD6=0;   NOP();  NOP();  RD1=0;
    RD7=1;   NOP();  NOP();  RD2=0;
    Delay(1000);

    RD5=1;   NOP();  NOP();  RD0=0;
    RD6=1;   NOP();  NOP();  RD1=1;
    RD7=0;   NOP();  NOP();  RD2=0;
    Delay(1000);

    RD5=0;   NOP();  NOP();  RD0=0;
    RD6=1;   NOP();  NOP();  RD1=0;
    RD7=1;   NOP();  NOP();  RD2=1;
    Delay(1000);

这段代码里,只有最后一个配置的RD2正常显示.其余用示波器得到的结果是偶尔一个高电平.而且就一瞬间的高电平.这是什么情况?数据手册好像没说不能这么操作吧?之前用RE0-RE2这3个口的时候一样的操作也只有最后一个配置的IO口实现了功能.所以很纳闷这是为什么.
沙发
pizizhu1234|  楼主 | 2014-8-28 13:41 | 只看该作者
如果直接使用PORTx来操作都是OK的.

使用特权

评论回复
板凳
wangch_sh| | 2014-8-28 15:19 | 只看该作者
我记得好像用PIC24时遇到过,不过忘了怎么解决得了

使用特权

评论回复
地板
pizizhu1234|  楼主 | 2014-8-28 15:51 | 只看该作者
wangch_sh 发表于 2014-8-28 15:19
我记得好像用PIC24时遇到过,不过忘了怎么解决得了

:Q

使用特权

评论回复
5
wangch_sh| | 2014-8-28 16:01 | 只看该作者
RD5=1;   NOP();  NOP();  RD0=0;
或者你这么整:
在RD0=0时,影响了RD5,你就 RD5=1;   NOP();  NOP();  RD0=0;
RD5=1;

使用特权

评论回复
6
poorhack| | 2014-8-28 16:08 | 只看该作者
pizizhu1234 发表于 2014-8-28 13:41
如果直接使用PORTx来操作都是OK的.

同时写PORTD的8个口的操作可行?是不是读改写的问题啊,你试试LATD2试试,要不你传个IO外围电路看看是不是存在读改写的问题。

使用特权

评论回复
7
hnoys| | 2014-8-28 16:14 | 只看该作者
ANSELx设置好没?

使用特权

评论回复
8
yklstudent| | 2014-8-28 17:27 | 只看该作者
6楼靠谱。。。。

使用特权

评论回复
9
pizizhu1234|  楼主 | 2014-8-29 09:23 | 只看该作者
wangch_sh 发表于 2014-8-28 16:01
RD5=1;   NOP();  NOP();  RD0=0;
或者你这么整:
在RD0=0时,影响了RD5,你就 RD5=1;   NOP();  NOP();   ...

这个没问题.只要最后一句就能够实现.谁在最后谁实现.前面的全都不实现.

使用特权

评论回复
10
pizizhu1234|  楼主 | 2014-8-29 09:29 | 只看该作者
poorhack 发表于 2014-8-28 16:08
同时写PORTD的8个口的操作可行?是不是读改写的问题啊,你试试LATD2试试,要不你传个IO外围电路看看是不 ...

LATDx正解.能解释下什么原因吗?

使用特权

评论回复
11
pizizhu1234|  楼主 | 2014-8-29 09:47 | 只看该作者
yklstudent 发表于 2014-8-28 17:27
6楼靠谱。。。。

能解释下什么原因吗?PIC新手.

使用特权

评论回复
12
poorhack| | 2014-8-29 10:26 | 只看该作者
pizizhu1234 发表于 2014-8-29 09:29
LATDx正解.能解释下什么原因吗?

PORTx输出时有个先读端口状态再修最后写的过程,外围电路设计有缺陷就有可能出现问题,这个和你电路设计有关,你把IO外围电路贴出来,就好分析了。

使用特权

评论回复
13
pizizhu1234|  楼主 | 2014-8-29 10:44 | 只看该作者
CS1B,CS2B,CS3B分别是19264液晶的3个分屏使能端.
有没有哪位大哥做过24V直流无刷鼓风机的程序?

使用特权

评论回复
14
pizizhu1234|  楼主 | 2014-8-29 10:47 | 只看该作者
poorhack 发表于 2014-8-29 10:26
PORTx输出时有个先读端口状态再修最后写的过程,外围电路设计有缺陷就有可能出现问题,这个和你电路设计 ...

图已上.之前操作E口也是一样的问题.新手没太理解读改写的真正含义.我明白使用PORTx操作IO口的时候需要先读PORTx.然后修改读到的值.再入LATx.既然已经改写读到的值了.那又有什么影响呢?

使用特权

评论回复
15
poorhack| | 2014-8-29 11:04 | 只看该作者
pizizhu1234 发表于 2014-8-29 10:47
图已上.之前操作E口也是一样的问题.新手没太理解读改写的真正含义.我明白使用PORTx操作IO口的时候需要先 ...

RD2接的是LW,LW在哪,是直接连到IR21038的VS端么?

使用特权

评论回复
16
poorhack| | 2014-8-29 11:16 | 只看该作者
poorhack 发表于 2014-8-29 11:04
RD2接的是LW,LW在哪,是直接连到IR21038的VS端么?

当你修改某一个io口的时候,该端口所有的8个口都会读,然后修改你要改的那个端口,最后再输出。

使用特权

评论回复
17
pizizhu1234|  楼主 | 2014-8-29 11:24 | 只看该作者
poorhack 发表于 2014-8-29 11:16
当你修改某一个io口的时候,该端口所有的8个口都会读,然后修改你要改的那个端口,最后再输出。 ...

那使用RDx和使用LATDx区别就在于LATDx少了读和修改的部分.最终不都是实现LATDx的写入吗?为什么直接操作RDx不行.还是不理解诶.

使用特权

评论回复
18
pizizhu1234|  楼主 | 2014-8-29 11:25 | 只看该作者
poorhack 发表于 2014-8-29 11:04
RD2接的是LW,LW在哪,是直接连到IR21038的VS端么?

LW,LV都和LU一样的.一模一样的图.我就没发了.全是接到IR2103上的

使用特权

评论回复
19
poorhack| | 2014-8-29 11:45 | 只看该作者
pizizhu1234 发表于 2014-8-29 11:24
那使用RDx和使用LATDx区别就在于LATDx少了读和修改的部分.最终不都是实现LATDx的写入吗?为什么直接操作RD ...

张明峰写的一本PIC书里有具体说明,你可以在网上查查。

使用特权

评论回复
20
pizizhu1234|  楼主 | 2014-8-29 12:21 | 只看该作者
poorhack 发表于 2014-8-29 11:45
张明峰写的一本PIC书里有具体说明,你可以在网上查查。

谢谢指点.豁然开朗.

使用特权

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

本版积分规则

5

主题

31

帖子

0

粉丝