|
ما الفرق بين sous-programme و Macro
|
السلام عليكم
لاحظ كود البرنامج التالي بالاسمبلي:
1/ sous-programme
هو جزء من الكود خاص بتنفيذ مجموعة من التعليمات.
وهكدا يمكن ان نستدعيه في البرنامج الرئيس Programme Principal بالتعليمة call مثلما يحدث بالنسبة ل sous-programme الخاص بالتوقيت Pause
2/ Macro
مجرد طريقة لاختصار الكتابة ..
بدل ان نكتب مجموعة من الاسطر التي تتكرر مرتين او اكثر في البرنامج الرئيس،او اجزاء البرنامج الفرعية، يمكن ان نعوضها بماكرو نعطيه عنوانا بكلمة واحدة .. وكلما كتبنا تلك الكلمة في البرنامج، يعوضه المترجم mpasm الموجود في Mplab بجميع تعليمات الاسطر الاصلية..
مثلا هنا Bank0 هي ماكرو عوضت السطرين المكتوبين بالازرق
و Bank1 عوضت السطرين المكتوبين بالاحمر
هذه العملية مهمة في البرامج كثيرة الاسطر المتكررة..
كود:
;*****************************************************************************
;* Pic 16f84a
;*****************************************************************************
LIST p=16f84a; Définition de processeur
#include <p16f84a.inc>; Définitions de constantes
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC
;*****************************************************************************
;MACROS
;*****************************************************************************
BANK0 macro
bcf STATUS,RP1
bcf STATUS,RP0 ;passage en banque 0
endm
BANK1 macro ; (la macro BANK1 remplace le deux lignes en rouge)
bcf STATUS,RP1
bsf STATUS,RP0 ;passage en banque 1
endm
;*****************************************************************************
;VARIABLES
;*****************************************************************************
CBLOCK 0x0C
cmpt1 : 1
cmpt2 : 1
cmpt3 : 1
ENDC
;*****************************************************************************
;DEMARRAGE SUR RESET
;*****************************************************************************
org 0x000 ; Adresse de départ après reset
goto init ; Adresse 0: initialiser
;*****************************************************************************
;sous programme Initialisation
;*****************************************************************************
init ; (sous programme)
BANK0 ;Passage en banque 0 (la macro BANK0 remplace le deux lignes en bleu)
MOVLW b'00000000'
MOVWF PORTA
MOVLW b'00000000'
MOVWF PORTB
BANK1 ;Passage en banque 1 (la macro BANK1 remplace le deux lignes en rouge)
bcf TRISB,7
BANK0 ;Passage en banque 0
goto start ; sauter au programme principal
;*****************************************************************************
;* sous programme Pause
;*****************************************************************************
Pause ; sous programme
nop
movlw d'46'
movwf cmpt3
b3Pause
movlw d'189'
movwf cmpt2
b2Pause
movlw d'37'
movwf cmpt1
b1Pause
decfsz cmpt1,f
goto b1Pause
decfsz cmpt2,f
goto b2Pause
decfsz cmpt3,f
goto b3Pause
return
;*****************************************************************************
;Programme principal
;*****************************************************************************
start ;
bsf PORTB,7
call Pause
bcf PORTB,7
call Pause
goto start
END ;