Accueil
F6FCO
Ondes courtes
Le radioamateurisme
Station
Manipulateurs
Divers radio
Mecatronique
Robotique
CNC
Imprimante 3D
Electronique
Usinage
Divers
Travail du bois
Petits trucs
Divers
PIC16F877A
Hello World
;******************************************************** ; - F6FCO - ; Hello World ;******************************************************** list p=16f877A ; list directive to define processor #include
; processor specific variable definitions radix dec ; on travaille en décimal par défaut __CONFIG _CP_OFF & _DEBUG_ON & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_OFF & _WDT_OFF & _HS_OSC ; '__CONFIG' directive is used to embed configuration data within .asm file. ; The lables following the directive are located in the respective .inc file. ; See respective data sheet for additional information on configuration word. ;ADCON1VAL EQU B'00000110' ; PORTA en mode digital cblock 0x20 Reg_1 Reg_2 Reg_3 Conchita ; variable à tout faire LcdLigne LcdColonne endc BANK0 macro ; passer en banque0 bcf STATUS,RP0 bcf STATUS,RP1 endm BANK1 macro ; passer en banque1 bsf STATUS,RP0 bcf STATUS,RP1 endm BANK2 macro ; passer en banque2 bcf STATUS,RP0 bsf STATUS,RP1 endm BANK3 macro ; passer en banque3 bsf STATUS,RP0 bsf STATUS,RP1 endm ;********************************************************************** ORG 0x000 ; processor reset vector BANK1 movlw d'6' ; PORTA en mode digital movwf ADCON1 ; écriture dans contrôle A/D movlw b'00000000' movwf TRISA movlw b'00000000' movwf TRISB movlw b'00000000' movwf TRISC movlw b'00000000' movwf TRISD movlw d'6' ; PORTA en mode digital movwf ADCON1 ; écriture dans contrôle A/D BANK0 clrf PORTA clrf PORTB clrf PORTC clrf PORTD
#include
main bcf PORTB,0 nop call tempo300ms bsf PORTB,0 nop call tempo300ms goto main tempo300ms ; Délai 300 000 Cycles de la machine ; Durée du délai 300 millisecond ; Fréquence de l'oscillateur 4 MHZ movlw .153 movwf Reg_1 movlw .134 movwf Reg_2 movlw .2 movwf Reg_3 decfsz Reg_1,F goto $-1 decfsz Reg_2,F goto $-3 decfsz Reg_3,F goto $-5 return END
Hello World avec le Timer0 en mode 8bits
;********************************************************************** ; ; Led clignotante avec TIMER0 ; ; ;********************************************************************** list p=16f877A ; list directive to define processor #include
; processor specific variable definitions radix dec ; on travaille en décimal par défaut __CONFIG _CP_OFF & _DEBUG_ON & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_OFF & _WDT_OFF & _HS_OSC #define LED PORTA,0 BANK0 macro ; passer en banque0 bcf STATUS,RP0 bcf STATUS,RP1 endm BANK1 macro ; passer en banque1 bsf STATUS,RP0 bcf STATUS,RP1 endm BANK2 macro ; passer en banque2 bcf STATUS,RP0 bsf STATUS,RP1 endm BANK3 macro ; passer en banque3 bsf STATUS,RP0 bsf STATUS,RP1 endm cblock 0x20 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 goto init ; Adresse 0: initialiser ; ------------------------ Routines Interruptions ;sauvegarder registres org 0x004 ; 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 goto 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 TIMER0 inttimer decfsz cmpt,f ; décrémenter compteur de passages return ; pas 0, on ne fait rien BANK0 movlw b'00000001' ; sélectionner bit à inverser xorwf PORTA , 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 BANK1 movlw H'0087' ; Valeur registre option, Prescaler à 256 movwf OPTION_REG movlw d'6' ; PORTA en mode digital/analogique movwf ADCON1 ; écriture dans contrôle A/D movlw b'00000000' movwf TRISA movwf TRISB BANK0 movlw h'00A0' ; réglage interruptions Timer0 movwf INTCON ; charger interrupt control movlw d'7' movwf cmpt ; ----------------------------------- main goto main END