Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Bout de code posé là !

Modérateur : Jérémy

ASM: Hello World avec Timer0 en mode 8bits sur 18F258
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 2846
Âge : 99
Enregistré en : décembre 2017
Localisation : Banlieue sud de Klyntar
Contact :

#1 Message par F6FCO » mar. 14 mai 2024 19:36

Hello World sur B1.

Code : Tout sélectionner

;**********************************************************************
;
                                                                    
;             Led clignotante avecr TIMER0
;                                                                     
;                                                                     
;**********************************************************************


        Errorlevel-302                 ; Supprime le message "Ensure that bank bits are correct" 
        list            p
=18f258        ; processeur utilisé 
        
#include        <p18f258.inc>        ; Définitions des constantes PIC

 
 CONFIG OSC 
= XT                             
 CONFIG OSCS
=OFF
 CONFIG PWRT 
= ON                              
 CONFIG BOR 
= OFF
 CONFIG BORV 
= 45                             
 CONFIG WDT 
= OFF                             
 CONFIG WDTPS 
= 1
 CONFIG STVR 
= OFF
 CONFIG LVP 
= OFF                             
 CONFIG DEBUG 
= ON                           
 CONFIG CP0 
= OFF                             
 CONFIG CP1 
= OFF                             
 CONFIG CP2 
= OFF                             
 CONFIG CPB 
= OFF                             
 CONFIG CPD 
= OFF                             
 CONFIG WRT0 
= OFF                            
 CONFIG WRT1 
= OFF                            
 CONFIG WRT2 
= OFF                            
 CONFIG WRTC 
= OFF                        
 CONFIG WRTB 
= OFF                        
 CONFIG WRTD 
= OFF                            
 CONFIG EBTR0 
= OFF                       
 CONFIG EBTR1 
= OFF                           
 CONFIG EBTR2 
= OFF                           
 CONFIG EBTR3 
= OFF                           
 CONFIG EBTRB 
= OFF                           

MasqueIntcon    EQU    H
'00A0'     ; réglage interruptions Timer0


#DEFINE LED    PORTB,1             

    CBLOCK 0x00C               
    w_temp 
:1            ; Sauvegarde du registre W
    status_temp 
: 1            ; Sauvegarde du registre STATUS
    cmpt 
: 1            
    ENDC                                      

    org     0x000             
; Adresse de départ après reset
      bra    init            
; Adresse 0: initialiser

; ------------------------  Routines Interruptions                            
    
;sauvegarder registres    
    org     0x008            
; adresse d'interruption
    movwf   w_temp          ; sauver registre W
    swapf    STATUS,w        ; swap status avec résultat dans w
    movwf    status_temp        ; sauver status swappé

    ; Interrupt TIMER0
    btfsc    INTCON,TMR0IE        ; tester si interrupt timer autorisée
    btfss    INTCON,TMR0IF        ; oui, tester si interrupt timer en cours
    bra     restorereg
    call    inttimer        ; oui, traiter interrupt timer
    bcf    INTCON,TMR0IF        ; effacer flag interrupt timer

    
    ;restaurer registres
restorereg
    swapf    status_temp,w        ; swap ancien status, résultat dans w
    movwf   STATUS            ; restaurer status
    swapf   w_temp,f        ; Inversion L et H de l'
ancien W
                                   
; sans modifier Z
    swapf   w_temp
,w          ; Réinversion de L et H dans W
                    
; W restauré sans modifier status
    retfie              
; return from interrupt

    
;  Routine d'interruption TIMER 0                            
inttimer
    decfsz    cmpt,f            ; décrémenter compteur de passages
    return                ; pas 0, on ne fait rien
    movlw    b'
00000010'        ; sélectionner bit à inverser
    xorwf    PORTB , f        ; inverser LED
    movlw    d'
7'            ; on recommence à décompter
    movwf    cmpt            
    return                ; fin d'
interruption timer
    
; ------------------------ Init

init
    clrf    PORTA            
    clrf    PORTB            
    clrf    EEADR            
; diminue la consommation
    movlw    h
'C7'            ; Timer0 interne avec prescaler 256        
    movwf    T0CON        
        movlw     0Fh
          movwf     ADCON1                
; mode digital
    movlw    b
'00000000'
    movwf    TRISA
    movwf    TRISB

    movlw    MasqueIntcon        
; masque interruption
    movwf    INTCON            
; charger interrupt control

    movlw    d
'7'            
    movwf    cmpt            

; -----------------------------------
main

    nop
    nop
    bra     main            
; boucler

    END                


Une porte nand prend 2 bits en entrée... :eek:

Retourner vers « Recueil de mini programmes »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité