R8/1B 学习板--IAR下的位变量定义、中断、开关中断
时间:10-02
整理:3721RD
点击:
- #include<stdbool.h> //位变量,可以看到里位变量是怎么定义的,
- 在stdbool.h中,定义了一个位宏,如果需要变量定义,就是如下:
- bool abit;
- abit就是一个位变量了,这种方法简单,但是在多个位的时候不好处理,比如需要一批位变量
- 初始化的时候。
- 还可以采用如下方法:
- typedef struct
- {
- unsigned char no0:1;
- unsigned char no1:1;
- unsigned char no2:1;
- unsigned char no3:1;
- unsigned char no4:1;
- unsigned char no5:1;
- unsigned char no6:1;
- unsigned char no7:1;
- } __BIT8 ;
- volatile union { unsigned char strack; __BIT8 strack_bit; } ;
- union { unsigned char sk; __BIT8 sk_bit; } ;
- 定义位:
- #define mflag strack_bit.no0
- volatile union { unsigned char strack; __BIT8 strack_bit; } ;
- 中加上VOLATILE,如果发现给编译器优化掉,就一定要加上,
- strack 就是一个可按位操作的变量,
- strack=0;就可以把所有8个位全部清零,比起BOOL方便一些。
- IAR,写中断函数,与别的单片机没有什么差别,
- #pragma vector=0x16
- __interrupt void tx_irq(void)
- {
- Sec20ms++;
- if(Sec20ms>50)
- {
- p1_1=!p1_1;
- Sec20ms=0;
- }
- }
- vector=0x16 0X16是中断号,tx_irq(void) 是中断函数名,名字随你起。
- IAR下的绝对定义,比如你想把一个数组定义在一个DATA FLASH,
- 按如下操作:
- const unsigned char PWord @0x2BFE; PWord是一个常量,@0x2bfe是一个绝对地址。
- 数组定义:
- const unsigned char buf1[2046] @0x2400 ={1,1,1};
- {1,1,1}是给数组初值。
- #include<intrinsics.h> 中定义一些实用宏,最常用的就是开、关中断了,如下:
- __disable_interrupt() //禁止中断
- __enable_interrupt()
- 这样太长了,写起来烦,可以按如下定义成自己习惯的:
- define di() __disable_interrupt() //禁止中断
- #define ei() __enable_interrupt()
正在研究。