- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
d1.IAR‐AVR 不让用位定义?
在OPTIONS/sys/勾选EN_BIT。
2.不能C 语言和汇编同步仿真?
在Linker ‐ Output ‐ Format 中选择Debug information for C‐SPY,然后勾选其下的两个选项即
可。
3. IAR 头文件修改使用?
IAR 的iomacro.h 文件里定义了I/O 寄存器。我们就可以进行位书写。
/user1/1306/archives/2007/43702.html
4 在c 语言里对位的操作如一般如下:
PORTB|=(12);//置PORTB 的第2 位=1
PORTB=~(12);//置PORTB 的第2 位=0
PORTB^|=(12);//取反PORTB 的第2 位
While(PORTB(12));//判断1
While(!(PORTB(12)));//判断为0
IAR 编译器对位的支持更强大,除了上面的方法外还有以下更简单的操作方法:
PORTB_ Bit2=1; //置PORTB 的第2 位=1
PORTB_ Bit2=0; //置PORTB 的第2 位=0
PORTB_ Bit2=~ PORTB_ Bit2;//取反PORTB 的第2 位
While(PORTB_ Bit2);或者while(PORTB_Bit2==1);//判断1
while(PORTB_ Bit2==0);//判断0
PORTC_Bit4=PORTB_Bit2;//把PORTB 的第2 位传送到PORTC 的第4 位
5. 位变量定义?
由于iar 使用了扩展语言,它对位域的支持变为最小为char 类型,我们可以很方便地用来定
义位变量。
采用结构体来定义位变量:
struct
{
unsigned char bit0:1;
unsigned char bit1:1;
unsigned char bit2:1;
unsigned char bit3:1;
unsigned char bit4:1;
unsigned char bit5:1;
unsigned char bit6:1;
unsigned char bit7:1;
}t;
然后就可以用以下位变量了。
t.bit0=1;
t.bit0=~t.bit0;
但是采用以上结构体做出来的位变量只可以访问t 的位,不能够直接访问变量t,和标准的
IAR 位操作也不一样。采用联合体来定义效果更佳。
#i ncludeiom8.h
union
{
unsigned char t;
struct
{unsigned char t_bit0:1,
t_bit1:1,
t_bit2:1,
t_bit3:1,
t_bit4:1,
t_bit5:1,
t_bit6:1,
t_bit7:1;
};
};
void main(void)
{
t_bit0=1;//访问变量t 的位
t_bit0=~t_bit0;
PORTB=t;//直接访问变量t
}
位变量也可以直接定义在工作寄存器里。
6. bool 数据类型在C++语言里是默认支持的?
如果你在C 代码的头文件里包含stdbool.h, bool 数据类型也可以使用在C 语言里。也可以使
用布尔值 false 和 true。不过是占用8 位1 个字节。
#i ncludeiom8.h
#i ncludestdbool.h
bool y=0;//定义位变量
void main(void)
{
y=!y;//取反位变量
PORTB_Bit3=y;//传递位变量
}
5 和6 出自/user1/4580/archives/2008/44786.html
7. 死循环建议用:
for(;;)
do
{
}while(1);
避免用:
while(1)
{
}
8.杂
1.在使用__EEPUT();__EEGET();函数的时候,一定要引用头文件inavr.h”。
2.使用__delay_cycles(8000);//8M 晶振下的ms 级的延时函数,同样要调用
头文件inavr.h。
3.全局中断的使能函数:__enable__interrupt();
4.全局中断的禁止函数:__disable__interrupt();
9.IAR 建立库文件
如何在IAR 下把已经写好的程序以库的形式封装起来,减少多次编译的代码量
1.options-general options-output-output file,选library;
2-library confi-library,选择none
3.点OK,并且编译.
之后生成的.r90(obj 文件)就可以在别的地方调用了.
10 iar 头文件问题
IAR 的iomacro.h 文件里定义了I/O 寄存器。我们就可以进行位书写。
文档评论(0)