您的位置 首页 模拟

单片机程序C言语与汇编言语混合编程

430单片机中C语言与汇编语言混合编程1C语言函数和汇编语言函数相互调用在这个示例中C语言函数main()调用汇编语言函数get_rand()以得到一

430单片机C言语汇编言语混合编程

1.C言语函数和汇编言语函数彼此调用
在这个示例中C言语函数main()调用汇编言语函数get_rand()以得到一个随机数;汇编言语函数get_rand()首要调用C言语的规范库函数rand()得到一个整型随机值,然后用调用C言语函数mult()的办法把这个随机值乘以main()函数传递给自己的实参,并把乘积值回来给main()函数。
1.1C言语源文件
#include

extern unsigned long get_rand(unsigned char seed);

void main( void )
{
unsigned char seed;
unsigned long value;

// ===体系初始化==========================================
IFG1 = 0;
WDTCTL = WDTPW+WDTHOLD;
P1DIR = 0xff;
// ===体系初始化完毕========================================

seed = 0x55;
value = get_rand(seed);
while(1);
}
// ===主程序完毕==================================================

unsigned long mult(int x , int y)
{
return (x *y);
}
// ===乘法子程序完毕================================================

1.2汇编言语源程序
; ******************************************************************
;文件名: asm_source.s43
; C言语和汇编言语混合编程,汇编言语源程序
;这段源程序调用两个C言语函数,规范库函数rand()和用户自定义函数mult()
; *******************************************************************
#include “msp430x14x.h”;头文件
NAME asmfile
EXTERN rand; C言语规范库函数rand()
EXTERN mult; c_source.c中用户自定义函数
;====================================================================
; get_rand
;====================================================================
PUBLIC get_rand;导出函数名给C言语函数
RSEG CODE
get_rand;
push R11;一般寄存器入栈维护
mov.b R12,R11; C函数传递的实参在R12中,送入R16暂存

Call #rand;调用C函数rand()
;函数值为整型回来在R12中

; rand()函数值作为mult()函数的榜首实参
;送入R12进行参数传递
mov R11,R14; C函数传递的实参作为mult()函数的第二实参
;送入R14进行参数传递
Call #mult; mult()值回来在R12 / R13寄存器对
pop R11;出栈康复寄存器内容
ret
END

2.汇编言语编写中止服务程序
为了进步整个体系响应速度,要求中止服务程序的履行时间较短,履行速度较快,因而最好的办法便是用汇编言语编写中止服务程序。但要留意:1、中止服务程序不能有参数传递和回来值。2、中止服务程序中所有被用到的寄存器都需求维护。本示例用汇编言语编写了看门狗定时器的中止服务程序,用C言语编写了主程序。
2.1C言语主程序
#include

void main( void )
{
// ===体系初始化=============================================
IFG1=0;
WDTCTL=WDT_MDLY_32;
P1DIR = 0x01;
IFG1 &= ~WDTIFG;
IE1 |= WDTIE;
_EINT();
// ===体系初始化完毕===========================================
while(1);/*主程序是一段死循环
}
// ===主函数完毕==============================================

2.2汇编言语中止服务程序
;**********************************************************************
;文件名: wdt_int.s43
; C言语和汇编言语混合编程,汇编言语源程序
;看门狗定时器中止服务程序
;***********************************************************************
NAME WDT_ISR
#include “msp430x14x.h”;头文件
;==============================================================
;看门狗定时器中止服务程序
;================================================================
PUBL%&&&&&% wdt_isr;导出函数名给C言语函数
RSEG CODE
wdt_isr
xor.b #001h,&P1OUT;触发P1.0,led亮灭转化
reti;中止回来
;================================================================
COMMON INTVEC(1);中止向量段
;================================================================
ORG WDT_VECTOR
DW wdt_isr
END

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部