1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
| ;*******************************************************************
;
; Ce programme fait clignoter les leds
;
;*******************************************************************
errorlevel -302 ; supprime l'alerte sur les banks
;*******************************************************************
; configuration du compilateur
;*******************************************************************
list p=16F688
include <p16F688.inc>
;*******************************************************************
; configuration du registre d'état du microcontroleur
;*******************************************************************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC
;*******************************************************************
; assignation des ports du pic
;*******************************************************************
;#define entre PORTC,5 ; RC5 en entrée
#define sortie PORTC ; RC4 en sortie
;*******************************************************************
; definition des variables
;*******************************************************************
cblock 0x0c ; adresse de debut de la RAM pour les variables
w_temp:1
status_temp:1
temp0:1
temp1:1
temp2:1
temp3:1
endc
;*******************************************************************
; definition des macros
;*******************************************************************
bank1 macro
bsf STATUS,RP0 ; sélectionne la page1
endm
bank0 macro
bcf STATUS,RP0 ; selectionne la page2
endm
;*******************************************************************
; Début du code source
;*******************************************************************
org 0x000 ; vecteur de reset
goto debut ; sauter au programme principal
org 0x004 ; vecteur d'interrruption
retfie
debut
call init ; saut au sous programme d'initialisation
boucle
movlw b'11110000'
movwf sortie
movlw .250
call tempo
movlw .250
call tempo
movlw b'10101000'
movwf sortie
movlw .250
call tempo
movlw .250
call tempo
movlw b'11100110'
movwf sortie
movlw .250
call tempo
movlw .250
call tempo
movlw b'01010101'
movwf sortie
movlw .250
call tempo
movlw .250
call tempo
goto boucle
;*******************************************************************
;
; définitions des sous routines
;
;*******************************************************************
;*******************************************************************
; initialisation du micro controleur
;*******************************************************************
init bank1
movlw b'111111' ; configure le port A en entrée
movwf TRISA
movlw b'101100' ; configure RC5 en entrée Asynchrone (RX) et RC4 en sortie Asynchrone (TX) ensuite on a RC3 et RC2 en entrées et RC1 RC0 en sortie
movwf TRISC ;
movlw b'11111111' ; Habilite toutes les interruptions
movwf INTCON
movlw b'11100010' ; Interruptions périphériques
movwf PIE1
movlw b'1100111' ; Fréquence d'oscillation de 4Mhz
movwf OSCCON
movlw b'00100010' ; Transmission 8 bits, transmit enable, Asynchrone. On a SYNC=0 et BRGH=0
movwf TXSTA
movlw b'10011111' ; Serial port enabled, réception 8 bits, enables receiver
movwf RCSTA
movlw b'00000010' ; On a BRG16=0
movfw BAUDCTL ; Le fait d'avoir SYNC=0 BRGH=0 BRG16=0 nous permet de déterminer le Baud, on doit precharger SPBRG à 12.
movlw b'1100' ; on precharge SPBRG à 12 pour obtenir un vitesse de transmission de 4800 Bauds
bank0
clrf PORTC ; efface les PORTA et B
clrf PORTA
return ; fin du sous programme
;*******************************************************************
; temporisation d'environ 1 ms
;*******************************************************************
tempo
movwf temp0 ; on assigne Wreg = 250 à temp0
boucle2
movlw .249 ; on assigne 249 à Wreg
movwf temp1 ; on donne la valeur de Wreg à temp1
boucle3
nop
decfsz temp1,F ; On décremente la valeur de temp1, si on arrive à 0 on saute la ligne suivante, donc dans ce cas là on sort de la boucle
goto boucle3
decfsz temp0,F ; On décremente la valeur de temp0 (qui avant valait 1) qui vaut 250, ceci veut dire que la boucle précédente sera faite 250 fois.
goto boucle2
return
end ; fin du programme |
Partager