<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 單片機程序C語(yǔ)言與匯編語(yǔ)言混合編程

單片機程序C語(yǔ)言與匯編語(yǔ)言混合編程

作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò ) 收藏

430單片機C語(yǔ)言匯編語(yǔ)言混合編程

本文引用地址:http://dyxdggzs.com/article/201611/322505.htm

1.C語(yǔ)言函數和匯編語(yǔ)言函數相互調用
在這個(gè)示例中C語(yǔ)言函數main()調用匯編語(yǔ)言函數get_rand()以得到一個(gè)隨機數;匯編語(yǔ)言函數get_rand()首先調用C語(yǔ)言的標準庫函數rand()得到一個(gè)整型隨機值,然后用調用C語(yǔ)言函數mult()的方法把這個(gè)隨機值乘以main()函數傳遞給自己的實(shí)參,并把乘積值返回給main()函數。
1.1C語(yǔ)言源文件
#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匯編語(yǔ)言源程序
; ******************************************************************
;文件名: asm_source.s43
; C語(yǔ)言和匯編語(yǔ)言混合編程,匯編語(yǔ)言源程序
;這段源程序調用兩個(gè)C語(yǔ)言函數,標準庫函數rand()和用戶(hù)自定義函數mult()
; *******************************************************************
#include "msp430x14x.h";頭文件
NAME asmfile
EXTERN rand; C語(yǔ)言標準庫函數rand()
EXTERN mult; c_source.c中用戶(hù)自定義函數
;====================================================================
; get_rand
;====================================================================
PUBLIC get_rand;導出函數名給C語(yǔ)言函數
RSEG CODE
get_rand;
push R11;普通寄存器入棧保護
mov.b R12,R11; C函數傳遞的實(shí)參在R12中,送入R16暫存

Call #rand;調用C函數rand()
;函數值為整型返回在R12中

; rand()函數值作為mult()函數的第一實(shí)參
;送入R12進(jìn)行參數傳遞
mov R11,R14; C函數傳遞的實(shí)參作為mult()函數的第二實(shí)參
;送入R14進(jìn)行參數傳遞
Call #mult; mult()值返回在R12 / R13寄存器對
pop R11;出?;謴图拇嫫鲀热?wbr />
ret
END

2.匯編語(yǔ)言編寫(xiě)中斷服務(wù)程序
為了提高整個(gè)系統響應速度,要求中斷服務(wù)程序的執行時(shí)間較短,執行速度較快,因此最好的方法就是用匯編語(yǔ)言編寫(xiě)中斷服務(wù)程序。但要注意:1、中斷服務(wù)程序不能有參數傳遞和返回值。2、中斷服務(wù)程序中所有被用到的寄存器都需要保護。本示例用匯編語(yǔ)言編寫(xiě)了看門(mén)狗定時(shí)器的中斷服務(wù)程序,用C語(yǔ)言編寫(xiě)了主程序。
2.1C語(yǔ)言主程序
#include

void main( void )
{
// ===系統初始化=============================================
IFG1=0;
WDTCTL=WDT_MDLY_32;
P1DIR = 0x01;
IFG1 &= ~WDTIFG;
IE1 |= WDTIE;
_EINT();
// ===系統初始化結束===========================================
while(1);/*主程序是一段死循環(huán)
}
// ===主函數結束==============================================

2.2匯編語(yǔ)言中斷服務(wù)程序
;**********************************************************************
;文件名: wdt_int.s43
; C語(yǔ)言和匯編語(yǔ)言混合編程,匯編語(yǔ)言源程序
;看門(mén)狗定時(shí)器中斷服務(wù)程序
;***********************************************************************
NAME WDT_ISR
#include "msp430x14x.h";頭文件
;==============================================================
;看門(mén)狗定時(shí)器中斷服務(wù)程序
;================================================================
PUBLIC wdt_isr;導出函數名給C語(yǔ)言函數
RSEG CODE
wdt_isr
xor.b #001h,&P1OUT;觸發(fā)P1.0,led亮滅轉換
reti;中斷返回
;================================================================
COMMON INTVEC(1);中斷向量段
;================================================================
ORG WDT_VECTOR
DW wdt_isr
END



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>