1 | ; ------------------------------------------------------------------------ |
---|
2 | ; programme : hello4 |
---|
3 | ; Date : 20050108:2328 |
---|
4 | ; Version : 1 |
---|
5 | ; Auteurs : franck |
---|
6 | ; Notes : suppose que l'horloge externe est à 20MHz |
---|
7 | ; toujours le chenillard mais avec une routine de délai qui ralentit le |
---|
8 | ; décalage du portd, l'attente est de 200 microsecondes. |
---|
9 | ; ------------------------------------------------------------------------ |
---|
10 | |
---|
11 | list p=16f877 ; definit le processeur cible |
---|
12 | include "p16f877.inc" ; declaration des noms de registres |
---|
13 | |
---|
14 | ; Definition du registre de configuration du PIC |
---|
15 | ; _CP_OFF : le code n'est pas protege et peut etre relu |
---|
16 | ; _WDT_OFF : pas de timer watch dog |
---|
17 | ; _PWRTE_ON : attente d'un délai apres le power on |
---|
18 | ; _HS_OSC : oscillateur à quartz |
---|
19 | ; _LVP_OFF : pas de mode programmation basse tension |
---|
20 | __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC & _LVP_OFF |
---|
21 | |
---|
22 | CBLOCK 0x20 ; première adresse de la zone |
---|
23 | wait200us_arg : 1 ; 1 octet de nom wait200us_arg |
---|
24 | ENDC |
---|
25 | |
---|
26 | org 0 ; adresse du reset |
---|
27 | call initialisation |
---|
28 | goto main |
---|
29 | |
---|
30 | org 4 ; adresse du vecteur d'interruption |
---|
31 | retfie ; par défaut ne rien faire |
---|
32 | |
---|
33 | initialisation |
---|
34 | BANKSEL TRISD ; aller dans le banc de registres TRSID |
---|
35 | clrf TRISD ; place tous les signaux du port D en sortie |
---|
36 | BANKSEL PORTD ; revenir dans le banc de registres PORTD |
---|
37 | return |
---|
38 | |
---|
39 | main movlw 1 ; met 0x01 sur port D |
---|
40 | movwf PORTD |
---|
41 | loop rrf PORTD,f |
---|
42 | call wait200us |
---|
43 | goto loop ; on boucle sur la rotation |
---|
44 | |
---|
45 | wait200us ; routine d'attente active |
---|
46 | movlw d'XXX' ; XXX -> W ? cycle |
---|
47 | movwf wait200us_arg ; W -> wait200us_arg ? cycle |
---|
48 | goto $+1 ; nop2 ? cycles |
---|
49 | decfsz wait200us_arg,f ; wait200us_arg-- ? cycle si faux sinon ? |
---|
50 | goto $-2 ; goto adr courante -2 ? cycles |
---|
51 | return ; ? cycles |
---|
52 | ; ------------------------------------------------------------------------------ |
---|
53 | END ; directive terminant un programme |
---|