430单片机C语言与汇编语言混合编程
本文引用地址:
1.C语言函数和汇编语言函数相互调用
本例中,C语言函数main()调用汇编语言函数()得到一个随机数;汇编语言()首先调用C语言标准库函数rand()得到一个整数随机值,然后使用C语言调用函数mult()的方法,将这个随机值乘以传递给的实际参数main() 函数,并将相乘后的值返回给 main() 函数。
1.1C语言源文件
#
长(字符种子);
无效的主要(无效)
{
炭种子;
长期价值;
// ===系统初始化============================================ =
IFG1 = 0;
= WDTPW+;
P1DIR = 0xff;
// ===系统初始化结束========================================== =
种子 = 0x55;
价值=(种子);
而(1);
}
// ===主程序结束 ========================================== == ========
长乘法(整数 x ,整数 y)
{
(x*y);
}
// ===乘法子程序结束 =========================================== = =======
1.2 汇编语言源程序
; ****************************************************** **************
;文件名:.s43
; C语言和汇编语言混合编程,汇编语言源程序
;本源程序调用了两个C语言函数,标准库函数rand()和用户自定义函数mult()
; ****************************************************** ******************
# “。H”; 头文件
名称
兰特;C语言标准库函数rand()
多;.c 中的用户定义函数
;=================================================== === =====================
;
;=================================================== === =====================
;导出函数名到C语言函数
RSEG 代码
;
推R11;正常寄存器推送保护
mov.b R12, R11; C函数传递的实际参数在R12中,发送到R16暂存
呼叫#rand; 调用 C 函数 rand()
;函数值在R12中以整数形式返回
; rand() 函数值作为 mult() 函数的第一个参数
; 发送到 R12 进行参数传递
移动 R11,R14; C函数传递的实参作为mult()函数的第二个参数
; 发送到 R14 进行参数传递
调用#mult; 在 R12/R13 寄存器对中返回的 mult() 值
弹出R11;出栈恢复寄存器内容
ret
结尾
2.用汇编语言编写的中断服务程序
为了提高整个系统的响应速度c语言子函数调用,要求中断服务程序的执行时间更短,执行速度更快,所以最好的办法是用汇编语言编写中断服务程序。但要注意:1、中断服务程序不能有参数传递和返回值。2、中断服务程序中使用的所有寄存器都需要保护。本例中看门狗定时器的中断服务程序用汇编语言编写,主程序用C语言编写。
2.1C语言主程序
#
无效的主要(无效)
{
// ===系统初始化 ============================================ == ==
IFG1=0;
=;
P1DIR = 0x01;
IFG1 &= ~;
IE1 |= WDTIE;
_EINT();
// ===系统初始化结束========================================== === =
while(1);/*主程序是一个无限循环
}
// ===主函数结束 ========================================== == ====
2.2 汇编语言中断服务程序
;************************************************ * *******************
;文件名:.s43
; C语言和汇编语言混合编程,汇编语言源程序
; 看门狗定时器中断服务程序
;************************************************ * ********************
名称
# “。H”; 头文件
;=================================================== === ==============
; 看门狗定时器中断服务程序
;=================================================== === ===============
;导出函数名到C语言函数
RSEG 代码
xor.b #001h,&P1OUT;触发P1.0c语言子函数调用,led通断转换
视网膜;中断返回
;=================================================== === ===============
(1);中断向量段
;=================================================== === ===============
组织机构
德国之声
结尾
文章来源:http://www.eepw.com.cn/article/201611/322505.htm