[PIC®/AVR®/dsPIC®产品] 还是PIC16F1939的IO口控制问题.

[复制链接]
 楼主| pizizhu1234 发表于 2014-8-28 13:31 | 显示全部楼层 |阅读模式
    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
wangch_sh 发表于 2014-8-28 16:01 | 显示全部楼层
RD5=1;   NOP();  NOP();  RD0=0;
或者你这么整:
在RD0=0时,影响了RD5,你就 RD5=1;   NOP();  NOP();  RD0=0;
RD5=1;
poorhack 发表于 2014-8-28 16:08 | 显示全部楼层
pizizhu1234 发表于 2014-8-28 13:41
如果直接使用PORTx来操作都是OK的.

同时写PORTD的8个口的操作可行?是不是读改写的问题啊,你试试LATD2试试,要不你传个IO外围电路看看是不是存在读改写的问题。
hnoys 发表于 2014-8-28 16:14 | 显示全部楼层
ANSELx设置好没?
yklstudent 发表于 2014-8-28 17:27 | 显示全部楼层
6楼靠谱。。。。
 楼主| 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();   ...

这个没问题.只要最后一句就能够实现.谁在最后谁实现.前面的全都不实现.
 楼主| pizizhu1234 发表于 2014-8-29 09:29 | 显示全部楼层
poorhack 发表于 2014-8-28 16:08
同时写PORTD的8个口的操作可行?是不是读改写的问题啊,你试试LATD2试试,要不你传个IO外围电路看看是不 ...

LATDx正解.能解释下什么原因吗?
 楼主| pizizhu1234 发表于 2014-8-29 09:47 | 显示全部楼层
yklstudent 发表于 2014-8-28 17:27
6楼靠谱。。。。

能解释下什么原因吗?PIC新手.
poorhack 发表于 2014-8-29 10:26 | 显示全部楼层
pizizhu1234 发表于 2014-8-29 09:29
LATDx正解.能解释下什么原因吗?

PORTx输出时有个先读端口状态再修最后写的过程,外围电路设计有缺陷就有可能出现问题,这个和你电路设计有关,你把IO外围电路贴出来,就好分析了。
 楼主| pizizhu1234 发表于 2014-8-29 10:44 | 显示全部楼层
CS1B,CS2B,CS3B分别是19264液晶的3个分屏使能端.
有没有哪位大哥做过24V直流无刷鼓风机的程序?

本帖子中包含更多资源

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

×
 楼主| pizizhu1234 发表于 2014-8-29 10:47 | 显示全部楼层
poorhack 发表于 2014-8-29 10:26
PORTx输出时有个先读端口状态再修最后写的过程,外围电路设计有缺陷就有可能出现问题,这个和你电路设计 ...

图已上.之前操作E口也是一样的问题.新手没太理解读改写的真正含义.我明白使用PORTx操作IO口的时候需要先读PORTx.然后修改读到的值.再入LATx.既然已经改写读到的值了.那又有什么影响呢?
poorhack 发表于 2014-8-29 11:04 | 显示全部楼层
pizizhu1234 发表于 2014-8-29 10:47
图已上.之前操作E口也是一样的问题.新手没太理解读改写的真正含义.我明白使用PORTx操作IO口的时候需要先 ...

RD2接的是LW,LW在哪,是直接连到IR21038的VS端么?
poorhack 发表于 2014-8-29 11:16 | 显示全部楼层
poorhack 发表于 2014-8-29 11:04
RD2接的是LW,LW在哪,是直接连到IR21038的VS端么?

当你修改某一个io口的时候,该端口所有的8个口都会读,然后修改你要改的那个端口,最后再输出。
 楼主| pizizhu1234 发表于 2014-8-29 11:24 | 显示全部楼层
poorhack 发表于 2014-8-29 11:16
当你修改某一个io口的时候,该端口所有的8个口都会读,然后修改你要改的那个端口,最后再输出。 ...

那使用RDx和使用LATDx区别就在于LATDx少了读和修改的部分.最终不都是实现LATDx的写入吗?为什么直接操作RDx不行.还是不理解诶.
 楼主| pizizhu1234 发表于 2014-8-29 11:25 | 显示全部楼层
poorhack 发表于 2014-8-29 11:04
RD2接的是LW,LW在哪,是直接连到IR21038的VS端么?

LW,LV都和LU一样的.一模一样的图.我就没发了.全是接到IR2103上的
poorhack 发表于 2014-8-29 11:45 | 显示全部楼层
pizizhu1234 发表于 2014-8-29 11:24
那使用RDx和使用LATDx区别就在于LATDx少了读和修改的部分.最终不都是实现LATDx的写入吗?为什么直接操作RD ...

张明峰写的一本PIC书里有具体说明,你可以在网上查查。
 楼主| pizizhu1234 发表于 2014-8-29 12:21 | 显示全部楼层
poorhack 发表于 2014-8-29 11:45
张明峰写的一本PIC书里有具体说明,你可以在网上查查。

谢谢指点.豁然开朗.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

31

帖子

0

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