probleme avec le bus SPI

< Sujet précédent  
Index du Forum -> Forum des Logiciels -> MikroPascal
AuteurMessage
Algeria.png aigle666
Newbie



Messages : 1
Inscrit(e) le: 27/08/2018
Posté le 27/08/2018 21:57  
probleme avec le bus SPI
bonjour a tous , voila j'ai un problème avec le bus spi car j'utilise 2 pic 16f877a un en Maitre et l’autre en Esclave , j'ai écrit le programme en Micro-Pascal , je décrit le programme , qu'on j’appuie sur le bouton de l'entre RB4 le Maitre lit la valeur envoyé par l'esclave qui est de la température et il l'affiche sur le portd , et qu'on je lance la simulation sur proteus l'esclave envoie les valeur mai le maitre ne lit pas la valeur correctement
voici le programme du maitre :

program in_out;

var

bIntRB4 , bIntRB5: boolean ; // variable boolean pour interruption

lec_temp : byte; // variable a lire du PORTB

Chip_Select : sbit at RC6_bit; // selection de l'esclave

Chip_Select_Direction : sbit at TRISC6_bit; // direction de la pin SS de selection de l'esclave

temp : byte ; //

buffer : byte ; //

procedure Interrupt ;

begin

//interruption liée a l'etat logique de RB4 a RB7

if INTCON.RBIF = 1 then
begin

INTCON.RBIF := 0; // remise a zero du bit d'état de l'interuption RB4 a RB7

lec_temp := PORTB ; // il faut lire du PORTB

bIntRB4 := true ;


end;

end;


begin

CMCON := 7 ;
TRISA:=%00000000; // toutes ligne du port A en sortie
TRISB:=%01111111; // toute ligne du port B en entrée sauf RB7
TRISC:=%00010000; // toutes ligne du port c en sortie sauf RC4
trisd :=$00 ;
portd :=$00 ;
INTCON := $00 ;
INTCON.RBIE:= 1 ; // activation de l'interruption RB4 a RB7
INTCON.RBIF:= 0 ; // effacement du flag RBIF
INTCON.GIE := 1 ; // autorisation des interruption global
OPTION_REG := $00 ; //
OPTION_REG.NOT_RBPU := 1 ; // désactivation pull_up portB
OPTION_REG.INTEDG := 1 ; // interruption RB0 sur front montant

PORTA := $00; // effacer PORTA

PORTB := $00; // effacer PORTB

PORTC := $00 ; // effacer portc

bIntRB4:= false ; //

bIntRB5:= false ; //

Chip_Select := 1; // Deselect DAC

Chip_Select_Direction := 0; // Set CS# pin as Output

SPI1_Init() ;

while true do

if PORTB.4 = 1 then

begin

Chip_Select := 0 ; // selectionner l'esclave

portd := SPI1_Read(buffer); // lire la valeur contenue dan le buffer

Delay_ms (50) ; //

Chip_Select := 1 ; // deselectionner l'esclave


end;


end.



voici le programme de l'esclave :

program Spi_Slave2;

var

b: word ;

begin

CMCON := 7 ; // desactivation des comparateur

TRISA :=$FF ; // toute les ligne du PORTA sont en entrée

TRISD :=$00 ; //

PORTD :=$00 ; //

trisc :=%00011000 ; // SCLK en entrée et SDI en entrée SDO en sortie

ADC_Init ; // initialisation convertisseur

SPI1_init(); // Initialize SPI module


while true do
begin

b := ADC_Read (0) ; // lecture du canal 0

SPI1_Write(b) ; // envoyer la valeur

portd := b ; //

end ;


end.












Revenir en haut | Permalien

Haut de page

© 2018 Technologue pro, cours électricité électronique informatique · © 2007 - 2018 Technologue pro - Ressources pédagogiques pour l'enseignement technologique en Tunisie
Usage dans un cadre strictement académique

Technologue: cours en ligne gratuit en électricité, électronique, informatique industrielle et mécanique pour l'enseignement technologique en Tunisie et offre des cours en ligne en génie électrique, informatique, mécanique, une base de données de TP, projets fin d'études et un annuaire de ressources pédagogiques
Licence - Sitemap - Qui somme nous ? - confidentialité- Tunisie Index