【提问贴】请教一下有关AVR单片机的问题

2019-07-15 12:03发布

求大神帮忙解决一下!!!
问题1:
我在学习EEPROM时候,有“EECR |=BIT(EEMWE)”这样一个语句,我把它改成了“EECR |=BIT(2)”之后也能实现,但是我把它改成EECR |=0X03就无法实现了,这是为什么?
问题2:
我再看一些书的时候,发现了类似“PORTD ^=_BV(PD7)”和“#define DQ PB3”这样的语句,这种语句好像直接对某一端口位操作了,但是AVR单片不是不能这样直接位操作么?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
houjue
1楼-- · 2019-07-15 17:54
绝世废人 发表于 2017-2-3 10:43
请问下AVR单片机里面这种PD7 PB3是头文件里面的么?

       我用过的宏定义方式:
#define LED_SET     PORTD |= (1 << PD5)       //位置高
#define LED_CLR     PORTD &= ~(1 << PD5)    //位置低
#define LED_COM    PORTD ^= (1 << PD5)      //位取反
#define LED_R        PIND & (1 << PD5)           //位读取
      通过上面的定义就可以在程序中直接操作I/O了。 最佳答案
houjue
2楼-- · 2019-07-15 22:48
你把EECR |=0X03写成EECR |=0X04就明白了。
绝世废人
3楼-- · 2019-07-16 04:17
houjue 发表于 2017-2-2 14:30
你把EECR |=0X03写成EECR |=0X04就明白了。

我去,,,竟然犯这种错误了。谢谢!顺便问下为啥能用PD7 PB3这种类型的?
zwx_zhang
4楼-- · 2019-07-16 05:23
宏定义在C中用得很多,多学多用,单片机C中基本不用位操作指令,有些环境中根本没有,对端口的操作8位一起计算,但编译后的汇编代码是否为位操作,是编译器根据单片类型自动完成,
绝世废人
5楼-- · 2019-07-16 10:16
 精彩回答 2  元偷偷看……
houjue
6楼-- · 2019-07-16 13:18
绝世废人 发表于 2017-2-2 20:07
我去,,,竟然犯这种错误了。谢谢!顺便问下为啥能用PD7 PB3这种类型的?

不客气。你去网上找AVR的位操作就知道了,4楼说的不对。

评分

参与人数 1积分 +5 收起 理由 绝世废人 + 5

查看全部评分

一周热门 更多>