- 1、本文档共80页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
IAR编程注意事项
编程总结
1. 关于IAR中数据的乘除运算注意事项:
在IAR中作乘除法运算时必须注意其数据类型的定义及防止数据的溢出及数据表达式中的隐式的数据类型的转换。
例如:
sint get_press(void)
{
uint tmp_data = 0;
sint temp_data = 0;
sint data = 0;
tmp_data = twi_read()+(410-zero_data[3]); //410是压力为0时的偏置值
temp_data = tmp_data-410;
data = (temp_data * 2590.0) / 3276.0; //将数字量换算成实际的压力值*/
return (data);
}
其中2590和3276必须写成2590.0和3276.0,否则写成2590和3276则计算的结果错误。
2.整形。符号型,浮点数的混合运算:
注意事项及运算规则:、
c语言中允许进行整形、字符型、实型的混合运算,但在实际运算时,要将不同的类型转化成统一的类型再进行运算,运算规则是: 1,所有char-int,float-double. 2,低级类型服从高级类型: char-int-unsigned-long-float-double. 3,赋值运算的最终结果,以左边变量的类型为准。如果位数一样,则有符号转换为无符号(char例外。。。不知道为什么)2.如果位数不一样,位数小向位数大的类型转换,例如unsigned int 和char ,char的转换为unsigned int。unsigned char和long,unsigned char转换为long等等。Unsigned int x,y,z,d,w,b;
Press = 41.23569
X = Press;(利用隐形转换符取读点数的整数部分)
Y = X/10;
Z = X%10;
D = (Press – X)*100; (利用隐形转换符取读点数小数的后两位)
W = D/10;
B = D%10;
1.在以I/O口访问LCD时,编写LCD程序时注意读写时序,(EN,RS,RW信号之间必须加延时)例如:
PORTG|=EN; //EN=1
s_ms(100);
PORTG|=RS; //RS=1
s_ms(100);
PORTG=~RW; //RW=0
s_ms(100);
PORTA=WDLCM; //ê?3?êy?Y
s_ms(100);
PORTG=~EN; //EN=0
2.若是以总线的方式访问时,则不必管读写时序,时序由硬件自动完成。例如:
flash uint addr[]={0xD000,0xD100,0xD400,0xD500,0xC800,0xC900,
0xCC00, 0xCD00
};以上为lcd的端口地址;
point = (uchar *)addr[1];
*point = data;
3.多位数显示优化程序:
{
i = (data0)/100; 百位
j = (data0-(i*100))/10;十位
k = data0-(i*100)-j*10;个位
}
4. 串行接收数据时:在一位一位接手之前先要进行移位,否则在一位一位接受后在移位则出现错误,例如:
Uchar retc;
retc = retc 1;(一定要在if前面否则接收的数据最后一位出错)。
if(!(PIND(14)))
{
retc = retc0xfe;
}
else
{
retc = retc|0x01;
}
}
{头文件都放置再inc文件夹中}
在IAR 中对片内EEPROM 的访问只能通过函数_EEPUT 和_EEGET 进行访问;(需包含#include ina90.h头文件)
使用 flash关键词可以将使用const 类型定义的常量分配进FLASH存贮器以节省RAM的使用(const unsigned char prog_uchar[]={….};用prog_uchar[]访问)
#define flash const __flash 可以将常量保存到flash存贮器中。
IAR中的中断函数格式:
#pragma vector = TIMER1_OVF_vect;
__interrupt void TIMER2_interr
文档评论(0)