打印
[AVR单片机]

avr程序,高手看看啊!

[复制链接]
2909|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhongmagic|  楼主 | 2008-5-15 08:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#define        Q1_CLK        PB1
#define        Q2_CLK        PB2
#define        Q3_CLK        PB0
#define        CLK_PORT    PORTB
#define        Q_DATA      PORTD
void    write_display_data(uchar    Q1,uchar    Q2,uchar    Q3)
{    Q_DATA=0x00;
    cbi(CLK_PORT,Q1_CLK);
    _nop();
    sbi(CLK_PORT,Q1_CLK);
    Q_DATA=0X00;
    cbi(CLK_PORT,Q2_CLK);
    _nop();
    sbi(CLK_PORT,Q2_CLK);
    Q_DATA=Q3;
    cbi(CLK_PORT,Q3_CLK);
    _nop();
    sbi(CLK_PORT,Q3_CLK);
    Q_DATA=Q1;
    cbi(CLK_PORT,Q1_CLK);
    _nop();
    sbi(CLK_PORT,Q1_CLK);
    Q_DATA=Q2;
    cbi(CLK_PORT,Q2_CLK);
    _nop();
    sbi(CLK_PORT,Q2_CLK);
}
我不明白是cbi sbi什么意思

相关帖子

沙发
tjjack| | 2008-5-15 08:59 | 只看该作者

清零和置位

使用特权

评论回复
板凳
mxh0506| | 2008-5-15 12:55 | 只看该作者

clear bit 和 set bit

是GCC的程序?

使用特权

评论回复
地板
zhongmagic|  楼主 | 2008-5-15 14:25 | 只看该作者

yes

使用特权

评论回复
5
sbhpande| | 2008-5-15 16:04 | 只看该作者

是清零和置为

作用就相当于and、or

使用特权

评论回复
6
农民讲习所| | 2008-5-15 16:51 | 只看该作者

cbi(CLK_PORT,Q1_CLK); 等于 CLK_PORT &= ~( 1<
sbi(CLK_PORT,Q1_CLK); 等于 CLK_PORT |= ( 1<<Q1_CLK) );

生成的汇编代码是一样的。后者更安全,不能位操作的能按字节逻辑操作。

使用特权

评论回复

7
zhongmagic|  楼主 | 2008-5-15 21:41 | 只看该作者

谢谢哦

使用特权

评论回复
8
hotpower| | 2008-5-16 02:05 | 只看该作者

俺喜欢CLK_PORT |= ( 1<

使用特权

评论回复

9
shiyang800| | 2008-5-17 23:56 | 只看该作者

WinAVR的编程风格不错,里面可以学到不少东西!

使用特权

评论回复
10
gongdl1204| | 2008-5-19 20:30 | 只看该作者

请问( 1<
请问为什么 要像  1<<Q1_CLK这样写呢?
  我是个AVR的 初学者 。

使用特权

评论回复

11
ATmega32L| | 2008-5-19 20:40 | 只看该作者

俺喜欢CLK_PORT |= _BV(Q1_CLK);

俺喜欢CLK_PORT |= _BV(Q1_CLK);

使用特权

评论回复
12
smart_avr| | 2008-5-24 11:16 | 只看该作者

回复

CLK_PORT |= _BV(Q1_CLK);  请问这个语句中的 _BV(Q1_CLK);是什么意思啊?
是不是包含在那个头文件的,或者是函数啊?谢谢,刚刚学AVR 都快整晕头了。

使用特权

评论回复
13
zhilikeji| | 2008-5-24 16:31 | 只看该作者

楼上的,我可以回答你.

_BV(Q1_CLK) 相当于1<<(Q1_CLK); Q1_CLK 应该是个整数,如1-7
CLK_PORT |= _BV(Q1_CLK);
CLK_PORT是个端口,

就相当于PROTx |= 1<< Q1_CLK;
就是PROTx端口(不一定是端口,变量也可) Q1_CLK位置1; 其他位不变

使用特权

评论回复
14
qjy_dali| | 2008-5-24 16:58 | 只看该作者

CBI与SBI在AVR的汇编中就有

使用特权

评论回复
15
smart_avr| | 2008-5-26 15:53 | 只看该作者

谢谢

谢谢13楼的朋友的解答。
是不是这样个意思:1<<(Q1_CLK); 就是把1移动到Q1_CLK这个位,也就是把这个位置为1,再这个位和端口的值相或,1或1还是1,其他位不变,。

使用特权

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

本版积分规则

8

主题

13

帖子

0

粉丝