⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.c

📁 C to ASM and ASM to C on Keil C
💻 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 + -