單片機程序C語言與彙編語言混合編程

2021-01-08 電子產品世界

430單片機C語言彙編語言混合編程

本文引用地址:http://www.eepw.com.cn/article/201611/322505.htm

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

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

; rand()函數值作為mult()函數的第一實參
;送入R12進行參數傳遞
mov R11,R14; C函數傳遞的實參作為mult()函數的第二實參
;送入R14進行參數傳遞
Call #mult; mult()值返回在R12 / R13寄存器對
pop R11;出棧恢復寄存器內容
ret
END

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

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

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


相關焦點

  • 單片機編程用C語言還是彙編?
    單片機是一種可編程器件,單片機的出現使硬體設計變得更為簡單,產品的功能也更強大,而程序就是單片機的靈魂。目前功能稍微複雜一點的電子產品,都是以單片機為核心,再加以不通的外設電路實現不通的功能需求。單片機的編程可以通過彙編語言和C語言來實現。
  • C語言與彙編語言混合編程應遵守的規則
    在使用C語言時,要用到和彙編語言的混合編程。若彙編代碼較為簡潔,則可使用直接內嵌彙編的方法;否則要將彙編程序以文件的形式加入到項目中,按照ATPCS(ARM/Thumb過程調用標準,ARM/Thumb Procedure Call Standard)的規定與C程序相互調用與訪問。
  • 【愛找茬】都是C語言,單片機C語言和普通的C語言究竟有什麼差異呢?
    單片機的C語言: 單片機軟體設計使用C語言作為編程開發軟體,採用模塊化的程序結構,設計了按鍵模塊程序、RFID模塊程序、日曆時鐘模塊程序、GPRS模塊程序、顯示存儲模塊程序等,並編寫系統主程序,將五個程序模塊組合在一起,實現單片機控制系統的整體功能。
  • PIC單片機C語言程序設計(8)
    即可用MPLAB IDE7.40 對PIC 單片機建立彙編語言或C 語言的源程序、創建項目(project)、對源程序進行彙編(使用彙編語言時)或編譯(使用C 語言時),彙編或編譯通過後,會生成目標碼。hex 文件。有了目標碼。hex 文件,就可對PIC 單片機編程(燒寫)和對源程序進行模擬調試了。
  • 為什麼C語言是最適合單片機編程的高級語言!
    為什麼還在用C語言編程?答案是:C語言是最適合單片機編程的高級語言。 這個問題的意思應該是:現在有很多很好用的高級語言,如java,python等等,為什麼這些語言不能用來編寫單片機程序呢?那麼這個問題的答案就是:不是不能,而是不合適。
  • PIC單片機C語言程序實例
    編者按:為了幫助具有PIC單片機彙編語言知識的技術人員或工程師,快速掌握利用C語言編寫PIC單片機程序的方法,本刊特推出《PIC單片機C語言程序設計》系列連載文章。丈中給出的C語言程序實例,均是可執行的,讀者可以放心引用。      一、彙編語言與C語言      早期的單片機程序多採用彙編語言編寫。
  • 最適合單片機編程的高級語言,除了C語言,別無選擇!
    單片機為什麼還在用C語言編程?答案是:C語言是最適合單片機編程的高級語言。 這個問題的意思應該是:現在有很多很好用的高級語言,如java,python,VC等等,為什麼這些語言不能用來編寫單片機程序呢?那麼這個問題的答案就是:不能不能,而是不合適。
  • PIC單片機C語言編程教程(1)
    > 語言來開發單片機系統軟體最大的好處是編寫代碼效率高、軟體調試直觀、維護升級方便、代碼的重複利用率高、便於跨平臺的代碼移植等等,因此 C 語言編程在單片機系統設計中已得到越來越廣泛的運用。這幾款 Flash 型的單片機因其所具備的豐富的片上資源而最適用於單片機學習入門,因此筆者建議感興趣的讀者可從 PICC-Lite 入手掌握 PIC 單片機的 C 語言編程。
  • ARM中ADS環境下C語言和彙編語言混合編程及示例
    稍大規模的嵌入式程序設計中,大部分的代碼都是用C來編寫的,主要是因為C語言具有較強的結構性,便於人的理解,並且具有大量的庫支持。但對於一寫硬體上的操作,很多地方還是要用到彙編語言,例如硬體系統的初始化中的CPU 狀態的設定,中斷的使能,主頻的設定,RAM控制參數等。
  • 單片機中C語言延時函數
    單片機C語言延時程序計算2009-11-02 22:15單片機C語言延時程序用C語言寫出來程序非常的簡練,它是一種模塊化的語言,一種比彙編更高級的語言,但是就是這樣一種語言也還是有它不足之處:它的延時很不好控制
  • C語言能夠實現單片機功能,為什麼還要使用彙編呢?
    如今C語言確實很強大,在嵌入式編程當中應用廣泛,但是為什麼還要學習彙編語言,難學又不易理解?首先彙編語言和C語言都是程式語言,彙編是一種機器語言直接面對底層,與單片機底層硬體構架息息相關,相對於C語言,是一門低級語言,C語言面向過程的語言,在編譯執行會轉為彙編在生成單片機可執行文件。是一門高級語言,兩種語言各有優缺點。一,C語言/彙編優缺點。1學習難度。
  • ARM中C和彙編混合編程及示例ARM中C和彙編混合編程及示
    本文引用地址:http://www.eepw.com.cn/article/201611/317675.htm單純的C或者彙編編程請參考相關的書籍或者手冊,這裡主要討論C和彙編的混合編程,包括相互之間的函數調用。下面分四種情況來進行討論,暫不涉及C++。
  • C語言和彙編語言是什麼?他們之間可以有怎樣的合作?為你解析
    C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的程式語言;儘管C語言提供了許多低級處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規格寫出的C語言程序可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平臺。
  • PIC單片機asm與C混合編程
    另外,PICC 的彙編編譯器要求輸入原程序文件的擴展名是「*.as」,而MPASM 預設認定的原程序以「*.asm」為擴展名。在基於PICC 編譯環境下開發PIC 單片機的C 語言應用程式時基本無需關心其彙編編譯器,除非是在混合語言編程時用彙編語言編寫完整的彙編原程序模塊文件。
  • 單片機c語言教程:建立你的第一個KeilC51項目
    隨著單片機技術的不斷發展,以單片機C語言為主流的高級語言也不斷被更多的單片機愛好者和工程師所喜愛。使用C51肯定要使用到編譯器,以便把寫好的C程序編譯為機器碼,這樣單片機才能執行編寫好的程序。
  • 單片機C語言延時分析
    標準的C語言中沒有空語句。但在單片機的C語言編程中,經常需要用幾個空指令產生短延時的效果。這在彙編語言中很容易實現,寫幾個nop就行了。
  • 51單片機教程之基礎編(基於C語言)
    大家好,我是陳濱,本人是去年9月份開始學單片機,到現在一年多了,現在本人基本掌握了單片機編程,開始深入學習彙編語言了。很多初學者有很多的疑惑,我究竟是先學C語言,還是彙編語言?其實我告訴你,本人認為,先學C語言!為什麼呢?C語言是目前使用最廣泛的中級語言,就連現在的windows7也是C語言編寫的,C語言易讀性好,無需對單片機內部結構十分熟悉即會編程,可移植性高,便於維護。C語言只有32個關鍵字,9種控制語句,而且編譯器提供了很多函數庫,使用十分方便。
  • 單片機C語言模塊化編程方法
    初學者往往搞不懂如何模塊化編程,其實它是簡單易學,而且又是組織良好程序結構行之有效的方法之一.本文將先大概講一下模塊化的方法和注意事項,最後將以初學者使用最廣的keil c編譯器為例,給出模塊化編程的詳細步驟。
  • 彙編語言基礎
    通過前面的學習,我們對單片機的硬體結構已有了一定的了解,下面,我們將與大家一起來學習單片機的彙編指令系統。所謂指令,就是規定計算機進行某種操作的命令。計算機按程序一條一條地依次執行指令,從而完成指定任務。
  • 單片機10秒倒計時c語言彙編語言程序
    (2)數碼管動態顯示(循環顯示0~9,時間間隔為1秒,1秒的時間間隔用定時器T0實現)①彙編語言:ORG 0000HAJMP MAINORG 000BHAJMP INTT0ORG 0030HMAIN:CLR P2.7MOV