Accueil > > > BUS I2C POUR PIC16XXX
BUS I2C POUR PIC16XXX
Information sur la source
Description
Que dire de plus, que vous trouverez ici les principales commandes I2C.
Il vous suffit ensuite en fonction du composant avec lequel vous communiquez, de les assember dans le bon ordre.
Source
- ;
- ; Routines I2C V1.0
- ;
- ; O.R 04/2003
- ;-----------------------------------------------------------------------------------------
- ;
- ;
- ; Cette routine nécessite :
- ; - Les deux macros : SDA_IN et SDA_OUT
- ; - Les variables : I2C_flag, I2C_DATA, I
- ; - Le fichier : Q4mhz.asm
- ;
- ;
-
-
- I2C_INIT:
- SDA_OUT ;SDA en sortie
- bsf SDA ;SDA a 1
- bsf SCL ;SCL a 1
-
- return
-
- I2C_START: ;SDA_OUT
- ;SDA=1 SCL=1
- bsf SCL ;SCL a 1
- bsf SDA ;SDA a 1
- bcf SDA ;SDA a 0
-
- return
-
- I2C_STOP: ;SDA_OUT
- ;SDA=X SCL=0
- bcf SDA ;SDA a 0
- bsf SCL ;SCL a 1
- bsf SDA ;SDA a 1
-
- return
-
- I2C_SLAVE_ACK: ;SDA_OUT
- ;SDA=X SCL=0
- bcf SCL ;SCL a 0
- SDA_IN ;SDA en entrée
- CALL Tempo_11us
- bsf SCL ;SCL a 1
- CALL Tempo_11us
- btfsc SDA ;Si 1 ecriture d'un flag d'erreur
- call NO_ACK
- bcf SCL ;SCL a 0
- CALL Tempo_11us
-
- SDA_OUT ;SDA en sortie
-
- return
-
- I2C_MASTER_ACK: ;SDA_IN
- ;SDA=X SCL=0
- bcf SCL ;SCL a 0
- SDA_OUT ;SDA en sortie
- bcf SDA ;SDA a 0
- bsf SCL ;SCL a 1
- CALL Tempo_11us
- bcf SCL ;SCL a 0
- CALL Tempo_11us
- bsf SDA ;SDA a 1
-
- return
-
- I2C_MASTER_NACK: ;SDA_IN
- ;SDA=X SCL=0
- bcf SCL ;SCL a 0
- SDA_OUT ;SDA en sortie
- bsf SDA ;SDA a 1
- bsf SCL ;SCL a 1
- CALL Tempo_11us
- bcf SCL ;SCL a 0
- CALL Tempo_11us
- bcf SDA ;SDA a 0
-
- return
-
- I2C_SEND_BYTE:
- movwf I2C_DATA ;w contient les data a envoyer
- movlw d'8'
- movwf I
- Next_data_s:
- decf I,f
- bcf SCL ;SCL a 0
- CALL Tempo_11us
- rlf I2C_DATA,f ;Rotation a gauche bit(I) dans la carry
- btfsc carry ;Si I=1
- bsf SDA ;SDA a 1
- btfss carry ;Si I=0
- bcf SDA ;SDA a 0
- bsf SCL ;SCL a 1
- CALL Tempo_11us
- incf I,f
- decfsz I,f ;Si I!=0
- goto Next_data_s
-
- bcf SCL ;SCL a 0
- CALL Tempo_11us
-
- call I2C_SLAVE_ACK
-
- return
-
- I2C_RECEIVE_BYTE:
- movlw d'8'
- movwf I
- clrf I2C_DATA
- SDA_IN ;SDA en entrée
- Next_data_r:
- decf I,f
- bcf SCL ;SCL a 0
- CALL Tempo_11us
- bsf SCL ;SCL a 1
- CALL Tempo_11us
- btfsc SDA ;Si SDA=1
- bsf carry
- btfss SDA ;Si SDA=0
- bcf carry
-
- rlf I2C_DATA,f ;décallage à gauche et met la carry dans le LSB
-
- incf I,f
- decfsz I,f ;Si I!=0
- goto Next_data_r
-
- bcf SCL ;SCL a 0
- CALL Tempo_11us
-
- call I2C_MASTER_ACK
-
- return
-
- I2C_RECEIVE_BYTE_LAST:
- movlw d'8'
- movwf I
- SDA_IN ;SDA en entrée
- Next_data_rl:
- decf I,f
- bcf SCL ;SCL a 0
- CALL Tempo_11us
- bsf SCL ;SCL a 1
- CALL Tempo_11us
- btfsc SDA ;Si SDA=1
- bsf carry
- btfss SDA ;Si SDA=0
- bcf carry
-
- rlf I2C_DATA,f ;décallage à gauche et met la carry dans le LSB
-
- incf I,f
- decfsz I,f ;Si I!=0
- goto Next_data_rl
-
- bcf SCL ;SCL a 0
- CALL Tempo_11us
-
- call I2C_MASTER_NACK
-
- return
-
-
- ;-----------------------------------------------------------------------------------------
- ; I2C_flag
- ; 0: NO_ACK
- ; 1:
- ; 2:
- ; 3:
- ; 4:
- ; 5:
- ; 6:
- ; 7:
- ;
-
-
- NO_ACK:
- bsf I2C_flag,0 ;Pas d'ack de l'esclave -> problème de comm
-
- return
-
;
; Routines I2C V1.0
;
; O.R 04/2003
;-----------------------------------------------------------------------------------------
;
;
; Cette routine nécessite :
; - Les deux macros : SDA_IN et SDA_OUT
; - Les variables : I2C_flag, I2C_DATA, I
; - Le fichier : Q4mhz.asm
;
;
I2C_INIT:
SDA_OUT ;SDA en sortie
bsf SDA ;SDA a 1
bsf SCL ;SCL a 1
return
I2C_START: ;SDA_OUT
;SDA=1 SCL=1
bsf SCL ;SCL a 1
bsf SDA ;SDA a 1
bcf SDA ;SDA a 0
return
I2C_STOP: ;SDA_OUT
;SDA=X SCL=0
bcf SDA ;SDA a 0
bsf SCL ;SCL a 1
bsf SDA ;SDA a 1
return
I2C_SLAVE_ACK: ;SDA_OUT
;SDA=X SCL=0
bcf SCL ;SCL a 0
SDA_IN ;SDA en entrée
CALL Tempo_11us
bsf SCL ;SCL a 1
CALL Tempo_11us
btfsc SDA ;Si 1 ecriture d'un flag d'erreur
call NO_ACK
bcf SCL ;SCL a 0
CALL Tempo_11us
SDA_OUT ;SDA en sortie
return
I2C_MASTER_ACK: ;SDA_IN
;SDA=X SCL=0
bcf SCL ;SCL a 0
SDA_OUT ;SDA en sortie
bcf SDA ;SDA a 0
bsf SCL ;SCL a 1
CALL Tempo_11us
bcf SCL ;SCL a 0
CALL Tempo_11us
bsf SDA ;SDA a 1
return
I2C_MASTER_NACK: ;SDA_IN
;SDA=X SCL=0
bcf SCL ;SCL a 0
SDA_OUT ;SDA en sortie
bsf SDA ;SDA a 1
bsf SCL ;SCL a 1
CALL Tempo_11us
bcf SCL ;SCL a 0
CALL Tempo_11us
bcf SDA ;SDA a 0
return
I2C_SEND_BYTE:
movwf I2C_DATA ;w contient les data a envoyer
movlw d'8'
movwf I
Next_data_s:
decf I,f
bcf SCL ;SCL a 0
CALL Tempo_11us
rlf I2C_DATA,f ;Rotation a gauche bit(I) dans la carry
btfsc carry ;Si I=1
bsf SDA ;SDA a 1
btfss carry ;Si I=0
bcf SDA ;SDA a 0
bsf SCL ;SCL a 1
CALL Tempo_11us
incf I,f
decfsz I,f ;Si I!=0
goto Next_data_s
bcf SCL ;SCL a 0
CALL Tempo_11us
call I2C_SLAVE_ACK
return
I2C_RECEIVE_BYTE:
movlw d'8'
movwf I
clrf I2C_DATA
SDA_IN ;SDA en entrée
Next_data_r:
decf I,f
bcf SCL ;SCL a 0
CALL Tempo_11us
bsf SCL ;SCL a 1
CALL Tempo_11us
btfsc SDA ;Si SDA=1
bsf carry
btfss SDA ;Si SDA=0
bcf carry
rlf I2C_DATA,f ;décallage à gauche et met la carry dans le LSB
incf I,f
decfsz I,f ;Si I!=0
goto Next_data_r
bcf SCL ;SCL a 0
CALL Tempo_11us
call I2C_MASTER_ACK
return
I2C_RECEIVE_BYTE_LAST:
movlw d'8'
movwf I
SDA_IN ;SDA en entrée
Next_data_rl:
decf I,f
bcf SCL ;SCL a 0
CALL Tempo_11us
bsf SCL ;SCL a 1
CALL Tempo_11us
btfsc SDA ;Si SDA=1
bsf carry
btfss SDA ;Si SDA=0
bcf carry
rlf I2C_DATA,f ;décallage à gauche et met la carry dans le LSB
incf I,f
decfsz I,f ;Si I!=0
goto Next_data_rl
bcf SCL ;SCL a 0
CALL Tempo_11us
call I2C_MASTER_NACK
return
;-----------------------------------------------------------------------------------------
; I2C_flag
; 0: NO_ACK
; 1:
; 2:
; 3:
; 4:
; 5:
; 6:
; 7:
;
NO_ACK:
bsf I2C_flag,0 ;Pas d'ack de l'esclave -> problème de comm
return
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
SQL SERVER : QUERY NOTIFICATION OU COMMENT êTRE NOTIFIé DE MODIFICATIONS DE DONNéES CôTé APPLICATIONSQL SERVER : QUERY NOTIFICATION OU COMMENT êTRE NOTIFIé DE MODIFICATIONS DE DONNéES CôTé APPLICATION par christian
Cette fonctionnalité à vue le jour dans Ado.Net 2.0 et s'appuie sur SQL Server 2005 (et plus) même si elle fonctionne avec SQL Server 2000. Le principe de fonctionnement côté applicatif est assez simple, on fournit une requête et lorsque le résultat d...
Cliquez pour lire la suite de l'article par christian [WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL?[WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL? par JeremyJeanson
Certain d'entre vous on peut être vécu cette situation embarrassante après quelques temps passer avec WF4 : Au début avec mon " ActivityDesigner" , tout allait bien. Et puis un jour j'ai au des problèmes de " Binding" . Alors nous sommes allé sur le site ...
Cliquez pour lire la suite de l'article par JeremyJeanson MYTIC - SHAREPOINT 2010 : DéJà UN MYTHE MICROSOFT ?MYTIC - SHAREPOINT 2010 : DéJà UN MYTHE MICROSOFT ? par junarnoalg
La prochaine session de MyTIC aura lieu à Namur, le 23 mars prochain. Pendant presque une heure, nous parlerons de SharePoint 2010. Voici un aperçu du programme.
Accueil : 17h30 Début de la session : 18h00 - Les nouvelles int...
Cliquez pour lire la suite de l'article par junarnoalg [MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA par cyril
Le deuxième keynote du mix fut très riche en contenu. Internet Explorer 9 Juste un après le lancement de Internet Explorer 8, Microsoft a dévoilé les nouveautés de Internet Explorer 9. Désormais, IE supportera HTML5, SVG et CSS3. L'élément ...
Cliquez pour lire la suite de l'article par cyril
Forum
RE : ASSEMBLEURRE : ASSEMBLEUR par ghuysmans99
Cliquez pour lire la suite par ghuysmans99 RE : ASSEMBLEURRE : ASSEMBLEUR par ghuysmans99
Cliquez pour lire la suite par ghuysmans99 ASSEMBLEURASSEMBLEUR par solleil
Cliquez pour lire la suite par solleil
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|