MicroTmeFonction: hello4.asm

File hello4.asm, 2.3 KB (added by Franck Wajsburt, 16 years ago)
Line 
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 
33initialisation
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 
39main    movlw   1               ; met 0x01  sur port D
40        movwf   PORTD
41loop    rrf     PORTD,f
42        call    wait200us
43        goto    loop            ; on boucle sur la rotation
44 
45wait200us ; 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