Parallel port négrier

V

Viks

Guest
Salut les gars

Je suis l'envoi de données à partir 16C773 à 18f4580 utilisant PSP.

Je suis annonce partie du code en utilisant PSP, pouvez-vous me dire quel est le problème ici.Code:

org 0x0000

;************ Initial *******************Aller au début

;******************************

org 0x0008

int_serv gotocommencer

banksel ADCON1

0x0F movlw

movwf ADCON1

0xff movlw; Toutes les broches du port D sont des intrants

movwf TRISD;

CLRF PORTD

0x17 movlw

movwf TRISE

0x00 movlw; Toutes les broches du port C sont des sorties

movwf TRISC;

CLRF PORTC

INTCON banksel

INTCON clrf

0x80 movlw

movwf PIE1; permettre Parallel Slave Port

.....

....

..... Faire des choses ici.int_serv

banksel PIR1

btfss PIR1, PSPIF

Aller à rien

BCF PIR1, PSPIF

banksel TRISE

btfss TRISE, IBF

Aller à rien

movf PORTD, W

movwf PORTC

rienretfiefin
 
LOL
3 jours de sa drôle et pas une seule réponse.
pas de corps déjà utilisé PSP devant moi.

S'IL VOUS PLAÎT m'aider ici

 
Viks,

Êtes-vous définissant le bit GIE à activer les interruptions en général?

Pourquoi commencer votre routine d'interruption à 0x0018?Avez-vous l'intention d'utiliser une faible priorité d'interruption?J'avais une haute priorité depuis votre routine d'interruption des processus qu'un seul type d'interruption.Je pense que si vous souhaitez utiliser une faible priorité d'interruption, vous devez définir GIEL ainsi.

Je n'ai pas vérifié le datasheet, il pense de moi.Bonne chance!

 
Salut

Merci pour la réponse

J'ai essayé les deux priorités Low et High ainsi.
Moyens 0008 et 0018 à la fois.
mais aucun résultat.

Grâce à une raison quelconque, mon 16C773 n'est pas en mesure de donner de générer d'interruption pour 18f4580.

Bien que j'ai testé CS et WR, ces signaux sont OK.
et des données est là aussi sur les lignes PSP.
mais également interrompre n'est pas généré.

Je donne d'impulsions de 30 secondes sur les micro et WR CS.
Est-il OK??

 
30 nous reste beaucoup de temps.

J'ai lu la fiche technique.Pour PSP, vous devez définir les paramètres suivants:

TRISE = B'XXX10111 '
ADCON1 = B'XXXX1010 »par B'XXXX1111 '

Qu'avez-vous dans votre code à l'égard de ces deux registres devrait fonctionner.

Lorsque l'UC lit la PSP, le pavillon est situé dans PSPIF PIR1.Pour générer un rang de priorité élevé d'interruption (à 0x0008), vous devez définir les paramètres suivants:

PSPIE = 1 dans PIE1
PSPIP = 1 dans IPR1
PEIE = 1 dans INTCON
GIE = 1 dans INTCON

Dans votre code vous définissez PSPIE.S'il vous plaît, lire attentivement la fiche dans la section d'interruption.

 
Vous avez besoin de mettre en GIE pour permettre à toutes les interruptions.

 
Salut les gars

Je suis de retour, j'ai fait toutes ces modifications suggérées par les gars.
mais toujours pas de résultat.

Très intéressant, c'est que même si je ne relient PSP avec un autre microcontrôleur (qui envoie des données à celle-ci).
Je vois quelques-uns des épingles PORTD élevé.
Je ne comprends pas cela.
Je pense que c'est la raison pour ne pas avoir de données, parce que le mode PSP n'est pas réglé correctement.
Toute idée pourquoi??

Code:

P = LISTE 18f4580

# INCLUDE <P18F4580.INC>

;**************************************

ORG 0X00

goto START

ORG 0x0008

int_ser goto;**************************************NOP

START

0xC0 movlw

movwf INTCON

0x80 movlw

movwf IPR1

movwf PIE1

MOVLW 0Fh

Movwf ADCON1

MOVLW 0xFF

Movwf TRISD

MOVLW 00H

Movwf TRISC

Movlw B'00010111 '

Movwf TRISE

MOVLW 00H

Movwf PORTCint_ser

BOUCLE

BTFSS PIR1, PSPIF

GOTO rien

BCF PIR1, PSPIF

btfss TRISE, IBF

Aller à rien

MOVF PORTD, 0

Movwf PORTC

rien

retlw 0

FIN
 
Pourquoi avez-vous changé la valeur que vous avez placé dans ADCON1?

Qu'en est-bancaires de la mémoire?(Commandes banksel)

 
Si vous visitez le site de Microchip
et l'utilisation de la recherche sur le site vous pouvez trouver un meilleur pilote pour ce port déjà fait
dans un projet de démonstration

la copier et de la dentelle à votre design

vous devez ajouter un bloc de code d'initialisation MCU aux registres de configuration des horloges et des choses que les besoins declaried même si vous n'êtes pas l'utiliser ....

que les points ci-dessus présente membres

Si vous regardez la démo pour PSP port youll voir ce qui est nécessaire pour obtenir cette section fonctionne correctement

 
jonw0224 a écrit:

Pourquoi avez-vous changé la valeur que vous avez placé dans ADCON1?Qu'en est-bancaires de la mémoire?
(Commandes banksel)
 
Ce code ressemble presque OK, sauf les deux thigs ci-dessous:

1.La routine d'interruption doit se terminer avec 1 retfie (ou retfie 0, si vous n'avez pas besoin de W et STATUS restauré)
2.Si tel est le code réel et pas seulement un extrait, alors vous devez ajouter une boucle d'attente avant la int_ser.
La façon dont il est écrit maintenant, vous ne les initialisations et puis vous allez tout droit dans la routine d'interruption, et puis vous sauter à la retlw, qui vient gâcher la pile, car il n'y avait pas d'appel avant cette date.

Donc, juste avant int_ser ajouter une boucle d'attente, au moins quelque chose comme:

Code:STAY_HERE: nd

Soutien-gorge STAY_HERE

 
VVV a écrit:

Ce code ressemble presque OK, sauf les deux thigs ci-dessous:1.
La routine d'interruption doit se terminer avec 1 retfie (ou retfie 0, si vous n'avez pas besoin de W et STATUS restauré)

2.
Si tel est le code réel et pas seulement un extrait, alors vous devez ajouter une boucle d'attente avant la int_ser.

Donc, juste avant int_ser ajouter une boucle d'attente, au moins quelque chose comme:Code:STAY_HERE: nd

Soutien-gorge STAY_HERE

 
En fait, je ne sais pas.Ce 3-4 fois ne sonne pas bien.Cela ressemble à une entrée a été laissée ouverte, / MCLR peut-être?Le CS / ou des signaux WR /?

Avez-vous, par hasard, sélectionnez la programmation basse tension?
Etes-vous sûr tout le reste fonctionne?
Etes-vous sûr d'écriture signaux ont le bon timing?
Êtes-vous écrit au port tout le temps?
Etes-vous sûr que vous écrivez les données correctes?

Le WDT est activé?Il ne faut pas, mais si c'est le cas, remplacer l'un des NOP dans la boucle avec un clrwdt.

Essayez ces deux choses:

1.Essayez de définir le permettre interrompre bits Après avoir configuré les ports et tout, juste avant la boucle.

2.Dans le rapport de recherche internationale, juste avant la retfie, insérer une conf, PORTB F.Cela permet de basculer les LED sur le port B et vous permettra de voir quand une interruption est générée.

 
MERCI BEAUCOUP.
Je crois que je l'ai eu droit now.and vous êtes celui qui m'a aidé.
J'ai fait des erreurs suivantes.

Citation:

Avez-vous, par hasard, sélectionnez la programmation basse tension?
 

Welcome to EDABoard.com

Sponsor

Back
Top