打印

^异或?

[复制链接]
楼主: areshan
手机看帖
扫描二维码
随时随地手机跟帖
41
xwj| | 2011-6-24 08:48 | 只看该作者 回帖奖励 |倒序浏览
请问:如果我要对PORTD的第7位取反,应该如何写呢?
ZRL700424 发表于 2011-6-24 08:34


——同问,请38,39楼的专家解答

使用特权

评论回复
42
t.jm| | 2011-6-24 08:57 | 只看该作者
Xmega 的端口多了好多寄存器出来,
有PORT.OUT(输出寄存器),PORT.OUTSET(输出置1),PORT.OUTCLR(输出置0),PORT.OUTTGL(输出反转),
那么:
|可以改写  PORTD.OUTSET = PIN3_bm;
&可以改写 PORTD.OUTCLR = PIN3_bm;
^可以改写 PORTD.OUTTGL = PIN3_bm;

使用特权

评论回复
43
xwj| | 2011-6-24 09:00 | 只看该作者
那非Xmega 的呢?
或者以前的老芯片呢?全扔掉?

使用特权

评论回复
44
触觉的爱| | 2011-6-24 09:33 | 只看该作者
看来Xmega 系列修改了以前的不足

使用特权

评论回复
45
ZRL700424| | 2011-6-24 10:31 | 只看该作者
那非Xmega 的呢?
或者以前的老芯片呢?全扔掉?
xwj 发表于 2011-6-24 09:00

非Xmega或以前的老芯片,是不能对端口取反的!如果一定要对其取反,就要用Xmega!;P

使用特权

评论回复
46
ZRL700424| | 2011-6-24 10:41 | 只看该作者
本帖最后由 ZRL700424 于 2011-6-24 10:42 编辑

MEGA8,IAR:
PORTD^= (1<<7);

生成的汇编:
LDI     R16, 8
IN      R17, 0x18
EOR     R17, R16
OUT     0x18, R17

请教专家,这样的功能如果不这样写应该要怎样写?

使用特权

评论回复
47
dqyubsh| | 2011-6-24 21:18 | 只看该作者
先把0x18、0x17、0x16的区别整明白,再来问这个问题。

既然你相信编译器,那你就这么干吧。不解释了。

使用特权

评论回复
48
ZRL700424| | 2011-6-25 08:13 | 只看该作者
楼上的专家:不是我相信编译器,因为如果要对PORTD的第7位取反,我只会这样写:
PORTD^= (1<<7);

我想请问专家,如果不这样写,应该怎样写呢?
我上面这条语句总共就14个字符,按照你的写法,估计也差不了多少,写出来估计也就十几秒钟的事情,为什么就不愿意写出来呢?

使用特权

评论回复
49
ZRL700424| | 2011-6-25 08:16 | 只看该作者
更奇怪的是:我的AVR项目98%都是用的汇编,C我是半桶水,你怎么就看出我没弄明白0x18、0x17、0x16的区别呢?

使用特权

评论回复
50
ZRL700424| | 2011-6-25 08:28 | 只看该作者
因为楼主的例子写的是PORTD,而我的C程序中用的是PORTB,所以贴出来的反编译的地址是PORTB的地址:
下面是随便从某个程序中复制出来的:
     LDI        R17,TRISA_O
     OUT        DDRA,R17        ;A口方向寄存器设定

   LDI        R17,0B00001000        ;关所有输出
   OUT        PORTA,R17

    IN        R17,PINA       
    ANDI        R17,(1<<HY)

使用特权

评论回复
51
SLEET1986| | 2011-6-25 08:39 | 只看该作者
都是高手,唵学习

使用特权

评论回复
52
dqyubsh| | 2011-6-25 09:06 | 只看该作者
说你分不清0x18、0x17、0x16,你不承认。说你崇拜编译器,你不承认。说你不看手册,你还不承认。

你就想知道你是对的,那么,OK,你对了。

使用特权

评论回复
53
ZRL700424| | 2011-6-25 09:10 | 只看该作者
确实是砖家啊!无语!

使用特权

评论回复
54
ZRL700424| | 2011-6-25 09:34 | 只看该作者
本帖最后由 ZRL700424 于 2011-6-25 09:35 编辑

说你不懂异或指令,你不承认。说你不懂C语言,你不承认。说你不懂单片机,你还承认。

你就认为你是专家,那么,OK,你是专家。
(小声说下:最好拿出点证据来证明你是专家要好点)

使用特权

评论回复
55
123jj| | 2011-6-25 09:39 | 只看该作者
呵呵~~~

二姨家今年流行门真多,又来一个“专家门”  :lol

使用特权

评论回复
56
dqyubsh| | 2011-6-25 10:10 | 只看该作者
从41楼开始,你们把不同意见者推为“专家”,进而开始嘲讽。ZRL700424更是推波助澜,跟人学坏。这不是讨论问题的姿态,不讨人喜欢,招人个应。

所以,你大可以用你的异或。这个情形之下,我闭嘴,不再回应。

使用特权

评论回复
57
ZRL700424| | 2011-6-25 10:15 | 只看该作者
从41楼开始,你们把不同意见者推为“专家”,进而开始嘲讽。ZRL700424更是推波助澜,跟人学坏。这不是讨论问题的姿态,不讨人喜欢,招人个应。

所以,你大可以用你的异或。这个情形之下,我闭嘴,不再回应。 ...
dqyubsh 发表于 2011-6-25 10:10


不同意见者?你有意见吗?意见在哪?
对某个端口取反我说不用异或那怎样用呢?你的意见呢?

使用特权

评论回复
58
ZRL700424| | 2011-6-25 10:19 | 只看该作者
你的不同意见就是指责我不懂编译器,不懂数据手册吗?
你说用异或不可靠,那你说出来应该怎样写不就完了?

使用特权

评论回复
59
numLiu| | 2011-7-1 08:57 | 只看该作者
帖子不错,结尾就有点……

使用特权

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



在输出的时候,端口缓冲寄存器肯定要用端口输出(PORTOUT)的啦~~~

使用特权

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

本版积分规则