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
| ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;x PROJET:
;x
;x
;x
;x le 01/11/2014
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
#include <p16F690.inc>
List p=16F690
; __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
__config 0x3F38
org 0x00
goto init
;xxxxxxxxxxxxxxxxxxxx
;x macros x
;xxxxxxxxxxxxxxxxxxxx
bank1 macro ; passage en banque 1
bcf STATUS,IRP
bsf STATUS,RP0
bcf STATUS,RP1
endm
bank0 macro ; passage en banque 0
bcf STATUS,IRP
bcf STATUS,RP0
bcf STATUS,RP1
endm
ow_haut macro
banksel PORTA ; la j'utiliser le BANKSEL car avec le macro bank0 sa marche pas
bsf PORTA,5 ;RAP5=1
endm
ow_bas macro
banksel PORTA
bcf PORTA,5 ;RAP5=0
endm
;la c'est une macro que normalement que fait une tomporisation multiple de 5 (je trouver ca sur le site de maxim:D) mais aussi je peux pas l'utiliser
wait: macro temps ;Temps :variable en microsecondes correspondant a temps de retard a généré,doit être multiple de 5.
movlw (temps/5) -1 ; 1us
movwf tempo ; 1us
call attendre_5us ; 2us
endm
attendre_5us
nop ;1us
nop ;1us
decfsz tempo,f ;1us /2 si tempo 0
goto attendre_5us ;2us
retlw 0
;xxxxxxxxxxxxxxxxxxxxxxx
;x initialisation de bus x
;xxxxxxxxxxxxxxxxxxxxxxx
init
banksel OSCCON
movlw b'01100111'
movwf OSCCON ;régler l'oscillateur interne a 4Mhz,1us par instruction .
clrf esclave ; initialisation de nombre des esclaves à 0
attendre_bs
banksel TRISA
BCF TRISA,TRISA5 ;RA5=0 RA5 en sortie
ow_haut ;bus 1-wire par default a l'etat haut
ow_bas ;bus ow a l'etat bas
wait .500 ;attendre 500us a l'etat bas,le temps de Pulse RESET de maitre
ow_haut ;relacher le bus
wait .70 ;attendre 70us pour arriver au zone de detection de presence des esclaves
banksel TRISA
bsf TRISA,TRISA5 ;RA5=0 RA5 en entrée
btfss PORTA,5 ;lire RA5 et sauter si egale a 1 ,si y'a aucune esclave
incf esclave,F ;esclave=1 si RA5 =0
wait .400 ;si non on attend 430us le temps maximum de RESET de maitre
goto attendre_bs
end |
Partager