📄 test.c
字号:
//////////////////////////////////////////////////////////////////
/// //
// 作为初学者,对Keil C51与汇编函数的相互调用一直是个不敢轻易尝 //
// 试的难点。本程序的演示通过一个简单的相互结合,演示了下述内容 //
// 1。c对asm的函数调用,并展示了变量传递方法 //
// 2。用asm编写中断函数,并展示了C程序中的全局变量在asm中的引用//
// 希望通过本程序能对大多数初学者学习C51有所帮助。 //
//--------------------------------------------------------------//
// 晓奇工作室 http://www.xiao-qi.com/ //
// 晓奇 info@xiao-qi.com //
//////////////////////////////////////////////////////////////////
//#pragma src( aa.a51 ) // 产生汇编代码
#include "reg51.h"
// 定义一个16位变量
unsigned int aa;
// 对外部函数的说明,并不区分汇编或C
extern void timerCt0(void);
extern unsigned char fnAdd( unsigned char x ,unsigned char y );
extern unsigned char fnSub( unsigned char x ,unsigned char y );
//////////////////////////////////////////////////////////////////
// cpu内部状态初始化。这里仅仅对ct0作了初始化 //
//////////////////////////////////////////////////////////////////
void prInit(void){
TMOD= 0x11; // 0001 0001 T0,T1 16位定时器
IP = 0x2; // 0000 0010 定时0最高优先级
IE = 0x2;
TCON= 5;
TH0 = 0xff; // 预置初值
TL0 = 0xe0;
TR0 = 1; // 打开定时器中断
ET0 = 1;
EA = 1;
}
//////////////////////////////////////////////////////////////////
// 本函数提供给汇编函数调用 //
//////////////////////////////////////////////////////////////////
unsigned char fnMul( unsigned char x ,unsigned char y ){
unsigned char temp;
temp = x*y;
return temp;
}
//////////////////////////////////////////////////////////////////
// 演示主程序,debug时请在进入while(1)处后,留意定时中断对变量 //
// aa的修改.为了更清楚的观察,请使用F11单步调试。 // //
//////////////////////////////////////////////////////////////////
void main(void) {
prInit();
aa=fnAdd(10,20);
aa=fnSub(30,10);
aa=aa+1;
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -