打印

^异或?

[复制链接]
11857|71
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
areshan|  楼主 | 2011-6-22 15:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PORTD^=0x80;
我一直认为上面的语句只会把pord7管脚翻转,但是如果portd的其他管家如果设为下降沿中断,也会触发中断。郁闷,这个是不是管脚间相互干扰呢?

相关帖子

沙发
xwj| | 2011-6-22 15:58 | 只看该作者
按说是不会受影响,除非编译器有BUG

使用特权

评论回复
板凳
yewuyi| | 2011-6-22 16:00 | 只看该作者
如果触发产生了下降沿中断,说明在^前,具备下降沿中断的IO口处于高电平状态,执行^后,该IO口编程了低电平,所以产生了中断。

使用特权

评论回复
地板
areshan|  楼主 | 2011-6-22 16:03 | 只看该作者
用的是avr的studio4,不知道是芯片问题还是编译器问题!用的而是avr的xmega32a4!

使用特权

评论回复
5
areshan|  楼主 | 2011-6-22 16:05 | 只看该作者
用^=马上进下降沿中断,屏蔽后就不不进去了!

使用特权

评论回复
6
areshan|  楼主 | 2011-6-22 16:07 | 只看该作者
这个IO口接的是红外接收头,一直是高!不知道是不是因为^=指令被分成了好几个指令,其中把io口当成一部寄存器用于保存中间值的原因!

使用特权

评论回复
7
xwj| | 2011-6-22 16:08 | 只看该作者
studio4?

你是用的用GCC的WINAVR吧?studio4可不带C编译器。

使用特权

评论回复
8
areshan|  楼主 | 2011-6-22 16:08 | 只看该作者
呵呵,不行,我就在红外发射时把接收的下降沿中断给关闭了吧!我试试了关全局中断竟然没有用,非要关下降沿中断才可!不理解!

使用特权

评论回复
9
areshan|  楼主 | 2011-6-22 16:10 | 只看该作者
原厂给的一个叫toolchain的工具,好像是winavr! 7# xwj

使用特权

评论回复
10
yewuyi| | 2011-6-22 16:10 | 只看该作者
用^=马上进下降沿中断,屏蔽后就不不进去了!
areshan 发表于 2011-6-22 16:05


如果该下降沿中断IO口上有内部弱上拉的话,你把它打开,然后执行^看看结果如何

使用特权

评论回复
11
areshan|  楼主 | 2011-6-22 16:11 | 只看该作者
全名:avr-toolchain-installer-3.0.0.240-win32.win32.x86.exe
估计是winavr,以前没有用过winavr!

使用特权

评论回复
12
areshan|  楼主 | 2011-6-22 16:12 | 只看该作者
试过,没有效果,谢谢你yewuyi 10# yewuyi

使用特权

评论回复
13
yewuyi| | 2011-6-22 16:15 | 只看该作者
试过,没有效果,谢谢你yewuyi 10# yewuyi
areshan 发表于 2011-6-22 16:12


在程序的初始化中,在初始化完毕各个寄存器后,先清除一次所有的中断标志

使用特权

评论回复
14
qzhui121| | 2011-6-22 16:17 | 只看该作者
结果如何?!!!

使用特权

评论回复
15
areshan|  楼主 | 2011-6-22 16:18 | 只看该作者
恩,谢谢yewuyi,和xwj,还好问题及时被找到:P!

使用特权

评论回复
16
areshan|  楼主 | 2011-6-22 17:24 | 只看该作者
339:              PORTD.OUT^=PIN3_bm;
+0000038B:   91800000    LDS       R24,0x0000     Load direct from data space
+0000038D:   2789        EOR       R24,R25        Exclusive OR
+0000038E:   8384        STD       Z+4,R24        Store indirect with displacement
上面是avr的汇编,不过不懂!

使用特权

评论回复
17
t.jm| | 2011-6-22 17:30 | 只看该作者
winavr应该没什么问题的,还是从C源程序里差问题吧。

使用特权

评论回复
18
yewuyi| | 2011-6-22 17:42 | 只看该作者
从楼主的问题衍生出来的一个话题:

AVR的IO口,在输出的时候,有一个端口缓冲寄存器,LZ为什么不用?而直接用PORTD来操作呢?

使用特权

评论回复
19
areshan|  楼主 | 2011-6-22 18:26 | 只看该作者
端口缓存器?这个我还没有没用过,avr的端口不是只有PORTADIR(端口方向),PORTOUT(端口输出),PORTIN(端口输入),不知道端口缓存器是哪个?还希望yewuyi能多多指教!

使用特权

评论回复
20
dqyubsh| | 2011-6-22 18:38 | 只看该作者
我不敢用异或,因为不确定它会干什么。

|= 置位
&= 清位

使用特权

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

本版积分规则

127

主题

728

帖子

0

粉丝