您的位置 首页 硬件

AVR编程_位界说

Question在我的源代码中如何进行位定义?Answer我们总是在AVR器件数据手册中推荐使用位定义的方式来编写你的C或汇编源代码。位定义与器件手

Question
在我的源代码中怎么进行位界说
Answer

咱们总是在AVR器材数据手册中引荐运用位界说的方法来编写你的C或汇编源代码。

位界说与器材手册的该位界说共同的话能够很便利的了解代码的意义和让其他人更好的了解你的代码。一起,假如你需求移植你的代码到其他的AVR器材,用位界说能够很便利的进行移植,由于不同的AVR器材的肯定地址和位的方位或许不同,可是位界说一般都保持共同。当移植一个规划,常常需求包括正确的界说文件。

在不同的AVR器材的编译器包括文件中,一切的I/O寄存器位命名和方位都被界说了。

下面是一个Atmega16在WinAVR中的比方,iom16.h包括文件中TXEN(使能USART发送器)和RXEN位(使能USART接纳器)界说如下:

#define UCSRB _SFR_IO8(0x0A)
#define TXEN 3 //Bit 3
#define RXEN 4 //Bit 4

因而,在代码中,写UCSRB = (1<

另一个汇编和c代码的比方如下:

汇编代码

***************************************************************

; Define pull-ups and set outputs high
; Define directions for port pins
ldi r16,(1<ldi r17,(1<out PORTB,r16
out DDRB,r17
; Insert nop for synchronization
nop
; Read port pins
in r16,PINB

***************************************************************

C代码
***************************************************************
unsigned char i;

PORTB = (1<DDRB = (1<
***************************************************************

为了防止各多的附加功用和寄存器功用的抵触,不要拜访被标示为保存的寄存器位。保存的寄存器总是被写为0。这能保证前向兼容性,一起当时未用的功用将都保持在默许的状况。

____________________以下为老于增加,2009/06/07________________________

读取外部引脚电平常,应读取PINX.n的值,比方,

1)判别PD6是否高电平:

if(PIND & (1<<6))...

2)等候PD6变为低电平,如判别ADC转化完结

while( !(PIND & (1<<6) );

或许写成:

while( (PIND & 0x40) == 0x40 );

需求留意的是,在朴实软件环境下,如VC,一个变量与一个常量与操作之后,往往会改动该变量的值,如

unsigned char ch = 0xc0;

unsigned char ch1 = ch & 0x40;

此刻ch1 = 0x40,其值现已改动。

而读取管脚的输入状况,PINX,或许读取寄存器数据,如UCSR0A串口接纳寄存器的内容,该数值与一个常量与操作之后,并不会改动其内容自身,即,下次再读取PINX和UCSR0A,其值不会改动,除非硬件条件发生了改动它才会发生变化。这些变量依存于硬件环境。

这也是初学者对变量,常量,位操作运用上简单混杂的问题所在。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/261290.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部