?? test.c
字號(hào):
//////////////////////////////////////////////////////////////////
/// //
// 作為初學(xué)者,對(duì)Keil C51與匯編函數(shù)的相互調(diào)用一直是個(gè)不敢輕易嘗 //
// 試的難點(diǎn)。本程序的演示通過一個(gè)簡單的相互結(jié)合,演示了下述內(nèi)容 //
// 1。c對(duì)asm的函數(shù)調(diào)用,并展示了變量傳遞方法 //
// 2。用asm編寫中斷函數(shù),并展示了C程序中的全局變量在asm中的引用//
// 希望通過本程序能對(duì)大多數(shù)初學(xué)者學(xué)習(xí)C51有所幫助。 //
//--------------------------------------------------------------//
// 曉奇工作室 http://www.xiao-qi.com/ //
// 曉奇 info@xiao-qi.com //
//////////////////////////////////////////////////////////////////
//#pragma src( aa.a51 ) // 產(chǎn)生匯編代碼
#include "reg51.h"
// 定義一個(gè)16位變量
unsigned int aa;
// 對(duì)外部函數(shù)的說明,并不區(qū)分匯編或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內(nèi)部狀態(tài)初始化。這里僅僅對(duì)ct0作了初始化 //
//////////////////////////////////////////////////////////////////
void prInit(void){
TMOD= 0x11; // 0001 0001 T0,T1 16位定時(shí)器
IP = 0x2; // 0000 0010 定時(shí)0最高優(yōu)先級(jí)
IE = 0x2;
TCON= 5;
TH0 = 0xff; // 預(yù)置初值
TL0 = 0xe0;
TR0 = 1; // 打開定時(shí)器中斷
ET0 = 1;
EA = 1;
}
//////////////////////////////////////////////////////////////////
// 本函數(shù)提供給匯編函數(shù)調(diào)用 //
//////////////////////////////////////////////////////////////////
unsigned char fnMul( unsigned char x ,unsigned char y ){
unsigned char temp;
temp = x*y;
return temp;
}
//////////////////////////////////////////////////////////////////
// 演示主程序,debug時(shí)請(qǐng)?jiān)谶M(jìn)入while(1)處后,留意定時(shí)中斷對(duì)變量 //
// aa的修改.為了更清楚的觀察,請(qǐng)使用F11單步調(diào)試。 // //
//////////////////////////////////////////////////////////////////
void main(void) {
prInit();
aa=fnAdd(10,20);
aa=fnSub(30,10);
aa=aa+1;
while(1);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -