IAR环境下的msp430c语言编程.docx
- 文档编号:24187466
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:9
- 大小:41.92KB
IAR环境下的msp430c语言编程.docx
《IAR环境下的msp430c语言编程.docx》由会员分享,可在线阅读,更多相关《IAR环境下的msp430c语言编程.docx(9页珍藏版)》请在冰豆网上搜索。
IAR环境下的msp430c语言编程
IAR环境下的msp430c语言编程
MSP430系列单片机实用C语言程序设计
扩展的关键字
1.asm
也可以写成__asm。
功能是在C程序中直接嵌入汇编语言。
语法:
asm(“string”);其中string必须是有效的汇编语句。
2.__interrupt
放在函数前面,标志中断函数。
下面这段程序是异步串行口UART0的接收中断函数。
UART0RX_VECTOR为异步串行口UART0的接收中断向量。
举例:
#pragmavector=UART0RX_VECTOR
__interruptvoidUART0_R(void)//UART0接收中断
{
TXBUF0=RXBUF0;
}
3.__monitor
放在函数前面,功能是但这一函数执行的时候自动关闭中断。
应该尽量缩短这样的函数,否则,中断事件无法得到及时的响应。
4.__no_init
放在全局变量前面,功能是使程序启动时不为变量赋初值。
5.__raw
编译中断函数时,编译器会自动生成一段代码,首先保存当时所用到CPU内寄存器的内容,退出中断程序时再进行恢复。
将__raw放在中断函数前可以禁止保存CPU内寄存器的过程,当然退出时也不会恢复。
是否为中断函数使用此关键字要根据需要而定。
6.__regvar
void__bis_SR_register(unsignedshort);
功能:
将CPU中SR寄存器中的某些位置1。
其参数为屏蔽码,需要置1的位为1。
1.__bis_SR_register_on_exit
void__bis_SR_register_on_exit(unsignedshort);
功能:
用于一个中断函数或者不可中断函数(标志为__monitor)返回时,将CPU内SR寄存器中的某些位置1。
其参数为屏蔽码,需要置1的位为1。
2.__disable_interrupt
void__disable_interrupt(void)
功能:
关闭全局中断。
先执行DINT命令,关闭全局中断,然后再执行NOP命令。
空指令是为了确保关闭了全局中断之后再执行下面的程序。
3.__enable_interrupt
void__enable_interrupt(void)
功能:
使用NINT指令打开全局中断。
4.__even_in_range
void__enable_in_range(unsignedshortvalue,unsignedshortupper_limit)
功能:
只能与switch语句结合使用,判断value是否为偶数且小于等于upper_limit。
举例:
unsignedintMoonRiver,iq0;
iq0=2;
swich(__even_in_range(iq0,4))
{
case0:
MoonRiver=0;
break;
case2:
MoonRiver=2;
}
结果:
假设iq0的值为2,执行完毕时MoonRiver=2。
否则,与普通的swich语句一样,跳过case部分,直接执行下面的程序。
使用__even_in_range的好处是可以生成效率比较高的代码,在判断多中断源的来源时可以使用此函数。
5.__get_interrupt_state
istate_t__get_interrupt_state(void)
功能:
返回当前的中断状态。
返回值istate_t为一结构,通过此函数可以获得当前的中断状态并保存,将来可以使用__set_interrupt_state恢复中断状态。
6.__get_R4_register
unsignedshort__get_R4_register(void);
功能:
返回寄存器R4的值,只在R4被锁定时有效。
7.__get_R5_register
unsignedshort__get_R5_register(void);
功能:
返回寄存器R5的值,只在R5被锁定时有效。
8.__get_SP_register
unsignedshort__get_SP_register(void);
功能:
返回堆栈指针寄存器SP的值。
9.__get_SR_register
unsignedshort__get_SR_register(void);
功能:
返回CPU中状态寄存器SR的值。
10.__get_SR_register_on_exit
unsignedshort__get_SR_register_on_exit(void);
功能:
用于一个中断函数或者不可中断函数(标志为__monitor)返回时,返回状态寄存器SR的值。
只在中断函数或者不可中断函数中有效。
11.__low_power_mode_n
void__low_power_mode_n(void);
功能:
进入低功耗模式0~4。
12.__low_power_mode_off_on_exit
void__low_power_mode_off_on_exit(void);
功能:
从一个中断函数或者不可中断函数(标志为__monitor)返回时退出低功耗模式。
只在中断函数或者不可中断函数中有效。
13.__no_operation
void__no_operation(void);
功能:
执行NOP指令。
14.__op_code
__op_code(unsignedshort);
功能:
在指令流中插入一个常数。
15.__segment_begin
void*__segment_begin(segment);
功能:
segment是段的名字,必须是字符串。
返回指向segment段的地址。
此处的段是程序中定义的数据段、代码段、堆栈段等,一般用户可以使用编译器的默认设置。
16.__segment_end
void*__segment_end(segment);
功能:
segment是段的名字,必须是字符串。
返回指向segment段结束后的第一个字地址。
17.__set_interrupt_state
void__set_interrupt_state(istate_t);
功能:
恢复istate_t中保存的中断状态。
18.__set_R4_register
void__set_R4_register(unsignedshort);
功能:
将unsignedshort值赋给寄存器R4,只在R4被锁定时有效。
19.__set_R5_register
void__set_R5_register(unsignedshort);
功能:
将unsignedshort值赋给寄存器R5,只在R5被锁定时有效。
20.__set_SP_register
void__set_SP_register(unsignedshort);
功能:
给堆栈指针寄存器SP赋值。
21.__swap_bytes
unsignedshort__swap_bytes(unsignedshort);
功能:
一个16位的无符号整数,高8位与低8位进行交换。
如0x1234交换后为0x3412。
扩展定义
为了使用方便,EW430还作了一些定义,有些定义不属于C语言的一部分,而是一种二次包装,如对内部函数的包装。
它们的功能完全可以用其他函数或者表达式实现,用户也可以自己重新定义,但使用它们会使编写程序更加简单易懂。
下面1~4项都是在不同类型CPU的头文件中定义的,如msp14x.h,其中对CPU内的各寄存器和模块的各种工作模式都作了详尽的定义,编程时应尽可能地利用。
1.PxIN、PxOUT、PxDIR、PxSEL
x为端口号。
IN为端口输入寄存器,OUT为端口输出寄存器,DIR为端口方向控制寄存器,SEL为端口第二功能选择寄存器。
举例:
Moon=P1IN;//读端口P1的值,赋给变量Moon
P3Out=5;//P3端口输出5
P2DIR=0xF0;//P2端口的高4位为输出,第4位为输入
P6SEL=0xF;//P6端口的高4位用作I/O端口,低4位用于第二功能
2.BITx
x的取值范围为0~F。
代表寄存器的某一位。
其定义为:
#defineBIT0(0x0001)
#defineBIT1(0x0002)
…
#defineBITE(0x4000)
#defineBITF(0x8000)
BIT0为最低位,BITF为最高位。
MSP430是不支持位操作的,如果想对位操作,最好的方法就是通过位屏蔽来实现。
举例:
P1OUT|=BIT0;//将P1口的最低位输出置1
P1OUT&=~BIT7;//将P1口的最高位输出清0,P1口只有8位
3.LPMx
x:
0~4。
进入0~4低功耗模式。
其定义为:
#defineLPM0_BIS_SR(LPM0_bits)//进入低功耗模式0
…
#defineLPM4_BIS_SR(LPM4_bits)//进入低功耗模式4
从以上代码可以看出扩展定义是对内部函数的第二次包装。
举例:
LPM0;//进入低功耗模式0
LPM4;//进入低功耗模式4
4.LPMx_EXIT
x:
0~4。
退出+0~4低功耗模式。
其定义为:
#defineLPM0_EXIT_BIC_SR_IRQ(LPM0_bits)//进入低功耗模式0
…
#defineLPM4_EXIT_BIC_SR_IRQ(LPM4_bits)//进入低功耗模式4
举例:
LPM0_EXIT;//退出低功耗模式0
LPM4_EXIT;//退出低功耗模式4
5._EINT()
打开全局中断控制,使GIE=1。
6._DINT()
关闭全局中断控制,使GIE=0。
执行__disable_interrupt指令。
7._NOP()
空操作。
执行__no_operation指令。
8._OPC(x)
在指令中插入一个常数。
x为unsignedchar类型。
执行__op_code指令。
9._SWAP_BYTES(x)
x是一个16位的无符号整数,高8位与低8位进行交换。
执行__swap_bytes指令。
10.__no_init[数据类型]变量名@地址
在某一固定地址处定义一个不进行初始化的变量,地址可以在RAM或FLASH内。
如果使用此方式定义在RAM内的变量需要赋值,那么必须首先定义,然后才能赋值。
/*分配变量MoonRiver在RAM地址0x210*/
__no_initunsignedintMoonRiver@0x210;//没有初始化
MoonRiver=100;//初始化MoonRiver为100
/*分配变量MoonRiver在FLASH地址0xFFC0*/
__no_initfloatMoonRiver@0xFFC0;
/*分配变量MoonRiver[3]在FLASH地址0x200*/
__no_initcharMoonRiver[3]@0xFF00;
/*分配结构sMoonRiver在RAM地址0x200*/
Typedefstruct
{
unsignedcharq0;
unsignedintiq0;
}sMoonRiver;//定义一个结构型的数据类型,取名为sMoonRiver
__no_initsMoonRiverMoonRiver@0x200;//声明变量MoonRiver,其数据类型为sMoonRiver
MoonRiver.q0=100;
MoonRiver.iq0=1000;//为MoonRiver赋初值
11.const[数据类型]变量名@地址
在某一固定地址处定义一个只读变量,并且只能在定义的时候赋初值。
这种定义变量的方式在FLASH的固定地址处分配变量时非常有用。
举例:
/*分配变量MoonRiver在RAM地址0x210*/
constunsignedintMoonRiver@0x210=100;//初始化MoonRiver为100
/*分配变量MoonRiver在FLASH地址0xFFC0*/
constfloatMoonRiver@0xFFC0=32.5;//初始化MoonRiver为32.5
/*分配变量MoonRiver[3]在FLASH地址0xFF00*/
constcharMoonRiver[3]@0xFF00={0,1,2};
/*分配结构sMoonRiver在RAM地址0xFFD0*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IAR 环境 msp430c 语言 编程