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
| ;********************************************************************************:
; Ce programme envoi un message à 9600 Bd via l'USART
;********************************************************************************
LIST P=16F887 F=INHX32 ; directive qui définit le processeur utilisé
; et le format des données envoyées
#include<P16F887.INC> ; fichier de définition des constantes
;******************************************************************************
; BITS DE CONFIGURATION
;******************************************************************************
__CONFIG _HS_OSC & _WDT_OFF & _CP_OFF & _CPD_OFF & _LVP_OFF
;******************************************************************************
; DECLARATION de VARIABLES *
;******************************************************************************
CBLOCK h'20' ; début de la zone en 20h en RAM
INDEX :1 ;INDEX occupe un octet à l'adresse 20h
ENDC ; Fin de la zone
; on aurait pu écrire aussi INDEX EQU Ox2O
;********************************************************************************
; DEMARRAGE SUR RESET *
;********************************************************************************
org 0x0 ; Adresse de départ après reset
goto debut
org 0x10 ; adresse de début du programme
debut
;********************************************************************************
; PROGRAMME PRINCIPAL *
;********************************************************************************
call init
caract0
BANKSEL INDEX
clrf INDEX ; initialisation de l'index qui pointe le premier caractère
boucle
movf INDEX,W ; W pointe le caractère à afficher
call MESSAGE ; recherche du caractère dans la table
andlw 0xFF ; test de fin de message (le dernier caractère est 0)
btfsc STATUS,Z
goto caract0 ; si c'est le dernier caractère on recommence au premier
call emission ; sous programme d'émission
call tempo ; attente
incf INDEX ,F ; incrémentation du caractère à afficher
goto boucle ; rebouclage
;********************************************************************************
; SOUS PROGRAMMES *
;********************************************************************************
;********************************************************************************
; INITIALISATION *
;********************************************************************************
init
; initialisation du PORTC en entrée
BANKSEl PORTC ; passage en banque 0
clrf PORTC ; RAZ des bascules D du port B
BANKSEL TRISC ; passage en banque 1
movlw 0xFF
movwf TRISC ; PORTC en entrée pour utiliser l'usart
; initialisation de l'USART
BANKSEL SPBRG ; passage en banque 1
movlw d'25' ; avec BRGH=1, il faut 25 dans SPBRG pour 9,6 kBd
movwf SPBRG
movlw h'24' ;
movwf TXSTA ; 8 bits, autorisé, asynchrone, haute vitesse
BANKSEL RCSTA ; passage en banque 0
movlw h'80'
movwf RCSTA ; port série
; initialisation du Timer 1 :division par 8 de l'horloge interne
BANKSEL T1CON ; passage en banque 0
movlw b'00110001' ; T1CGPS1=1 T1CGPS0=1 T1OSCEN=0 TMR1CS=0 TMR1ON=1
movwf T1CON ; predivision TMR1 timer 1:8, hor ext off, hor int
; timer on
return
;********************************************************************************
; TEMPORISATION 100ms *
;********************************************************************************
; fréquence du quartz : 4 MHz, temps de cycle 1 µs , prédivision : 8
; 2E16 - 100ms/8µs= 53036d = CF2Ch
tempo
movlw 0x2C
movwf TMR1L ; initialisation de TMR1L
movlw 0xCF
movwf TMR1H ; initialisation de TMR1H
boucle_tmr
btfss PIR1,TMR1IF ; Test bit TMR1F de PIR1
goto boucle_tmr ; boucle d'attente si timer non nul
bcf PIR1,TMR1IF ; RAZ du drapeau
return
;********************************************************************************
; EMISSION *
;********************************************************************************
emission
movwf TXREG ; le caractère dans W est prêt à être émis
boucle_emission
btfss PIR1,TXIF ; attente de l'envoi du dernier bit
goto boucle_emission
return
;*****************************************************************************
; TABLE *
;********************************************************************** *******
MESSAGE
ADDWF PCL,F
DT "Salam Aleikum" ; directive de définition d'une table de caractère
RETLW h'0D' ; Retour chariot
RETLW h'00' ; indicateur de fin de message
;*****************************************************************************
END |
Partager