Exemples en assmbleur pour la programmation des PIC

السلام عليكم

اتمنى ان يساعدكم هذا الموقع على البرمجة بلغة assembleur

Vous allez pouvoir trouver sur cette page quelques programmes pour faire vos premiers pas avec les microcontrôleurs PIC.

a-Allumer une led

; programme qui permet d'allumer une LED
; sur la sortie PB3

#include <p16F84.inc> ; initialisation des noms de variables


ORG 0x00 ; début de programme
goto main ; saut au programme principal

main nop ; TRIS est le registre de direction des ports
bsf STATUS,5 ; banque 1 pour accéder au registre TRIS
movlw B'00000000' ; 0 = sortie
movwf TRISB ; le port b est entièrement en sortie

bcf STATUS,5 ; retour à la banque 0
bsf PORTB,0 ; met le bit 0 du port B à 1 (allume la LED)

end ; fin de programme


b-Faire clignoter une led
; programe qui permet de faire clignoter une LED
; sur le port B0
; sans utiliser les interruptions et le TIMER TMR0

#include <p16F84.inc>

compt_1 equ 0C
compt_2 equ 0D
compt_3 equ 0E
compt_4 equ 0F

ORG 0x00 ; processor reset vector
goto main

; * * * * * * * * * * * * * * * * * * * * * * * * * *
;
; sous-programmes d'attente
;
; * * * * * * * * * * * * * * * * * * * * * * * * * *
wait: nop ; 1er temps d'attente
decfsz compt_1,1 ; environ 260 ms
goto wait
movlw 0xff
movwf compt_1
decfsz compt_2,1
goto wait
movlw 0xff
movwf compt_1
movlw 0xff
movwf compt_2

return


wait2: nop ; 2ème temps d'attente
decfsz compt_3,1 ; environ 200ms
goto wait2
movlw 0xAf
movwf compt_3
decfsz compt_4,1
goto wait2
movlw 0xAf
movwf compt_3
movlw 0xAf
movwf compt_4

return
; * * * * * * * * * * * * * * * * * * * * * * * * * * *
;
; Programme Principal
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * *
main: nop

movlw 0xff ; initialisation des compteurs
movwf compt_1
movlw 0xff
movwf compt_2

movlw 0xAf
movwf compt_3
movlw 0xAf
movwf compt_4

banksel TRISB
clrf TRISB ; PORTB en sortie

banksel PORTB
movlw B'00000001' ; PORTB0 = 1
movwf PORTB
call wait ; temps d'attente (1)

movlw B'00000000' ; PORTB0 = 0
movwf PORTB
call wait ; temps d'attente (1)

movlw B'00000001' ; PORTB0 = 1
movwf PORTB
call wait ; temps d'attente (1)

movlw B'00000000' ; PORTB0 = 0
movwf PORTB
call wait2 ; temps d'attente (2)

movlw B'00000001' ; PORTB0 = 1
movwf PORTB
call wait ; temps d'attente (1)

movlw B'00000000' ; PORTB0 = 0
movwf PORTB
call wait2 ; temps d'attente (2)

goto main ; retour au début du programme
; (boucle sans fin)

END ; fin de programme

Warning[224] E:\PAGE_NOV2001\PIC\LED2.ASM 66 : Use of this instruction is not recommended.
c-Créer une interruption sur le PORT B pour déclencher le clignotement d'une led
programme autorisant une interuption sur le port B
; déclenchant le clignotement d'une LED

#include <p16F84.inc>


compt_1 equ 0C
compt_2 equ 0D

ORG 0x00 ; processor reset vector
goto main

inter org 0x04 ; interruption du port B

btfsc INTCON,0 ; test si l'interruption
; a été provoquée par PORTB
goto LED
goto fin

LED: movlw B'00000001' ; allume
movwf PORTB
call wait

movlw B'00000000' ; éteint
movwf PORTB
call wait

movlw B'00000001'
movwf PORTB
call wait

movlw B'00000000'
movwf PORTB
goto fin

fin: bcf INTCON,0 ; met à 0 le drapeau d'interruption PORT B
retfie


; programme principal

main: bcf STATUS,5 ; banque 0
clrf PORTB
bsf STATUS,5 ; banque 1
movlw B'00010000' ; met B4 en entrée
movwf TRISB

bcf STATUS,5 ; banque 0
bsf PORTB,1
call wait
clrf INTCON ; raz du registre d'interruption
bsf INTCON,3 ; autorise l'interruption du port B
bsf INTCON,7 ; autorise les interruptions

final: nop ; boucle sans fin d'attente des interruptions
goto final

wait: nop ; sous-programme de tempo
decfsz compt_1,1
goto wait
movlw 0xff
movwf compt_1
decfsz compt_2,1
goto wait
movlw 0xff
movwf compt_1
movlw 0xff
movwf compt_2
return


END


d-Utiliser le TIMER interne du PIC pour faire clignoter une led
; programme permettant de faire clignoter une LED
; toutes les secondes (983,04 ms précisément !)

#include <p16F84.inc> ; processor specific variable definitions

;**********************************************************************
sec equ 0xF
compt_1 equ 0F

;***********************************************************************************
ORG 0x00 ; processor reset vector
goto main ; go to beginning of program
;***********************************************************************************

; *********************************************************************
ORG 0x04 ; routine d'interruption
btfsc INTCON,2 ; test interr de TMR0 ?
goto temps ; si oui -> temps
goto fin

temps: decfsz compt_1,1 ; test si le cpt de tps égale 0
goto fintps ; si non goto fintps
movlw sec ; si oui recharge le cpt
movwf compt_1
comf PORTB,1 ; et inverse les bits du PORTB

fintps: bcf INTCON,2 ; RAZ du drapeau d'interruption TMR0

fin: retfie ; fin d'interruption


; * * * * * * * * * * * * * * * * * *
; Programme principal
; * * * * * * * * * * * * * * * * * *
main: bsf STATUS,5 ; banque 1
clrf TRISB ; portb en sortie

movlw B'11000111' ; mise à jour du registre OPTION
movwf OPTION_REG ; TIMER = 256µs*256 = 65,536ms

bcf STATUS,5 ; banque 0
clrf PORTB ; RAZ PORTB

movlw sec
movwf compt_1


bcf STATUS,0 ; RAZ de carry

bsf INTCON,5 ; autorise le débordement du TMR0
bsf INTCON,7 ; autorise toutes les interruptions

movlw B'00000001' ; envoi un 1 sur B0
movwf PORTB


;***********************************************************************************

boucle: nop ; boucle d'attente d'interruption
goto boucle

END


e- Commander un afficheur LCD 1*16 caract. en mode 4 bits
;*****************************************
; programme de gestion d'un afficheur LCD
; 1*16 caractères en mode 4 bits
; par microcontroleur PIC 16F84
;
; mai / 2002
;*****************************************

include "p16f84.inc"

en equ 0 ; ra0 = enable
rs equ 1 ; ra1 = RS
conf2 equ B'00001110' ; display ON/OFF
conf1a equ B'00110011' ; set interface
conf1b equ B'00110010' ; la 1ere instruction
;est executée 2 fois (mode 8 bits)
clear equ B'00000001' ; clear display
caract1 equ 0x80 ; ligne1 gauche
caract2 equ 0xC0 ; ligne1 droite
compt equ 0x0D
sauv equ 0x0F



org 0x000
nop
goto main

main org 0x100
banksel TRISB ; banc 1
movlw B'01110000'
movwf TRISB ; port B en sortie
movlw B'00111100'
movwf TRISA ; port A en entrée

banksel PORTA ; banc 0


call tempo
call tempo
call tempo

bcf PORTA,en

call init
movlw "b"
call envdata
movlw "o"
call envdata
movlw "n"
call envdata
movlw "j"
call envdata
movlw "o"
call envdata
movlw "u"
call envdata
movlw "r"
call envdata
movlw " "
call envdata

call droit

movlw "m"
call envdata
movlw "a"
call envdata
movlw "i"
call envdata
movlw " "
call envdata
movlw "2"
call envdata
movlw "0"
call envdata
movlw "0"
call envdata
movlw "2"
call envdata

clrf INTCON

fin nop
goto fin


tempo movlw 0xFF
movwf compt
bouct decf compt,1
nop
nop
btfss STATUS,2
goto bouct
return

envinit bsf PORTA,en
movwf sauv
swapf sauv,0 ; echange sauv
andlw 0x0F
movwf PORTB
call tempo
bcf PORTA,en
call tempo
bsf PORTA,en
movf sauv,0 ; echange sauv
andlw 0x0F
movwf PORTB
call tempo
bcf PORTA,en
call tempo
return

envdata movwf sauv
swapf sauv,0 ; echange sauv
andlw 0x0F
movwf PORTB
bsf PORTA,en
call tempo
bcf PORTA,en
call tempo
movf sauv,0 ; echange sauv
andlw 0x0F
movwf PORTB
bsf PORTA,en
call tempo
bcf PORTA,en
call tempo
return

init bcf PORTA,rs ; rs=0 => configuration
movlw conf1a
call envinit
movlw conf1b
call envinit
movlw conf2
call envinit
movlw clear
call envinit
movlw caract1 ; écriture
call envinit ; ligne 1 gauche
bsf PORTA,rs ; rs=1 => fin de config
return

gauch bcf PORTA,rs
movlw caract1 ; écriture
call envinit ; ligne 1 gauche
bsf PORTA,rs ; rs=1 => fin de config
return

droit bcf PORTA,rs
movlw caract2 ; écriture
call envinit ; ligne 1 droite
bsf PORTA,rs ; rs=1 => fin de config
return

cls bcf PORTA,rs
movlw clear
call envinit
bsf PORTA,rs
return

end



Message[302] E:\MONTAGES\PIC\LCD1.ASM 25 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] E:\MONTAGES\PIC\LCD1.ASM 27 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[305] E:\MONTAGES\PIC\LCD1.ASM 80 : Using default destination of 1 (file).
Message[302] E:\MONTAGES\PIC\LCD3.ASM 48 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] E:\MONTAGES\PIC\LCD3.ASM 50 : Register in operand not in bank 0. Ensure that bank bits are correct
.
c'est bien d'utilisé ce lien pour debuter avec l'Assembleur
 
STRUCTURES ÉLÉMENTAIRES POUR PIC

السلام عليكم

Ce lien est tres imporatant pour ce qui interesse a la programmation de pic de "bigonoff


Le cours de référence en français pour PIC
[FONT=Arial, Helvetica, sans-serif][SIZE=+1]
[/SIZE][/FONT]
[FONT=Arial, Helvetica, sans-serif][SIZE=+1]STRUCTURES ÉLÉMENTAIRES POUR PIC[/SIZE][/FONT][FONT=Arial, Helvetica, sans-serif][SIZE=+1]
[/SIZE][/FONT]​

Ligne%20transparentewzCkuYAY3S.www.arabsbook.com.gif

voila le cite ou je trouve ces informations les strusteurs comme "if then else" et d'autres

http://pagesperso-orange.fr/doumai/index.htm

bon courage

 
بارك الله فيك ايضا
في الحقيقة يا اخي المشرف أود المشاركة في دورة الروبوتيك بالجزائر العام المقبل انشاء الله لذا اسعى لجمع المعلومات حول برمجة فب هذا الموضوع كوني طالبة اعلام الي
لذا اتوجه بطلب المساعدة والنصيحة في الخصوص لكل من له التجربة في هذا الميدان
شكر مسبقا
وأجركم على الله
 
بارك الله فيك ايضا
في الحقيقة يا اخي المشرف أود المشاركة في دورة الروبوتيك بالجزائر العام المقبل انشاء الله لذا اسعى لجمع المعلومات حول برمجة فب هذا الموضوع كوني طالبة اعلام الي
لذا اتوجه بطلب المساعدة والنصيحة في الخصوص لكل من له التجربة في هذا الميدان
شكر مسبقا
وأجركم على الله


اختي الفاضلة انا مولع بتخصص الروبوتيك ورسالة تخرجي في هذا المجال
اذا تسنى لي ساطرحها لاحقا (commande d'un bras manipulateur par un pic 16F84)
تفضلي بقراءة هذا الموضوع
http://university.arabsbook.com/forum28/thread58522.html
بالتوفيق..
 
في الحقيقة اردت الكتابة بالفرنسية ولكن يجب اناكتب بالعربية اعتزازا بها و رفقا باخواننا
اود تقديم الشكر الكثير على تعبك معي وادعو الله ان يكثر من امثالك ويعينكم على ما تقدمون من خدمات وادعو الله ان يجعلنا مثلكم في خدمة العلم
 
عودة
أعلى