IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Autres architectures Assembleur Discussion :

[68HC11] Blocage sur une boucle


Sujet :

Autres architectures Assembleur

  1. #1
    Membre averti
    Profil pro
    Ingénieur en électronique
    Inscrit en
    Septembre 2004
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur en électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 419
    Points : 333
    Points
    333
    Par défaut [68HC11] Blocage sur une boucle
    Bonjour, je suis débutant ( en fait , j'apprend en electronique en cours )

    Le problème est dû à la modification d'un programme. J'explique le project : des feux de signalisation (lumières) qu'il faut faire allumer et 2 programmes (jour et nuit) .

    Celui qui fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    **************** CONSTANTES ***********
    PortC 	equ 	$1003 		;Port C
    DDRC 	equ 	$1007 		;Direction du port C
    NT1 	equ 	$34C9 		;Valeur tempo
    NT2 	equ 	$0005		; 
     
     
    		ORG 	$F000 			; programme en EPROM
    DEBUT	Lds 	#$00FF 		;Pile à la fin de la RAM
    		LDAA	#$003F
    		STAA 	DDRC	;envoi de la config du portc
     
     
    JOUR 	LDX 	#SEQ1
    		LDAA	,X		;Prend donnée pointée N1
    SUIT1 	STAA 	PortC 		;COMMANDE DES DELS
    		INX
    		LDAB	,X		;LECTURE DE LA DUREE N2
    		PSHX 			;sauvegarde de X car utilisé dans TEMPO
    		JSR 	TEMPO
    		PULX			;rappel du pointeur de donnée X
    		INX
    		LDAA 	$0,X
    		BNE 	SUIT1 		;FIN DE SEQUENCE SI OCTET NUL
    		BRA	JOUR
     
    ***********************************************
    TEMPO 	LDX 	#NT1 		;TEMPO DE DUREE (B = N2 secondes)
    Bouc1 	LDY 	#NT2
    Bouc2 	DEY
    		CPY 	#$0000
    		BNE	Bouc2
    		DEX
    		CPX 	#$0000
    		BNE 	Bouc1
    		DECB
    		BNE 	TEMPO
    		RTS
    ;***********************************************************
    SEQ1 	fdb 	$2402 		;SEQUENCE DE JOUR
    		fdb 	$0C20
    		fdb	$1403
    		fdb	$2402
    		fdb	$2120
    		fdb 	$2203
    		fcb	$0000
    ;****************** vecteurs interruptions **************
    RESET	ORG	$FFFE
    		FDB	DEBUT
    		end
    PC7 et PC6 servent pour sélectionner le programme jour ou nuit .

    port C = 01000000 JOUR
    port C = 10000000 Nuit

    Le programme est le suivant (mais il bloque à la boucle debut 2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    **************** CONSTANTES ***********
    PortC 	equ 	$1003 		;Port C
    DDRC 	equ 	$1007 		;Direction du port C
    NT1 	equ 	$34C9 		;Valeur tempo
    NT2 	equ 	$0005		; 
     
    ************** PROGRAMME PRINCIPAL *********************
    		ORG 	$F000 			; programme en EPROM
    DEBUT	Lds 	#$00FF 		;Pile à la fin de la RAM
    		LDAA	#$003F
    		STAA 	DDRC	;envoi de la config du portc
     
     
    ************************Programme ajout ********************
    DEBUT2	LDAA	PortC
    		ANDA	#%11000000
    		CMPA	#%01000000
    		BEQ	JOUR
    		CMPA	#%10000000
    		BEQ	NUIT
    		BRA	DEBUT2		
     
     
    ************************ programme jour **********************
    JOUR 	LDX 	#SEQ1
    		LDAA	,X		;Prend donnée pointée N1
    SUIT1 	STAA 	PortC 		;COMMANDE DES DELS
    		INX
    		LDAB	,X		;LECTURE DE LA DUREE N2
    		PSHX 			;sauvegarde de X car utilisé dans TEMPO
    		JSR 	TEMPO
    		PULX			;rappel du pointeur de donnée X
    		INX
    		LDAA 	$0,X
    		BNE 	SUIT1 		;FIN DE SEQUENCE SI OCTET NUL
    		BRA	JOUR
    ***********************************************************
    NUIT	BRA	JOUR
     
    ***CEci n'est pas réaliser car , le choix ne fonctionne pas ... 
     
     
     
    ***********************************************
    TEMPO 	LDX 	#NT1 		;TEMPO DE DUREE (B = N2 secondes)
    Bouc1 	LDY 	#NT2
    Bouc2 	DEY
    		CPY 	#$0000
    		BNE	Bouc2
    		DEX
    		CPX 	#$0000
    		BNE 	Bouc1
    		DECB
    		BNE 	TEMPO
    		RTS
    ;***********************************************************
    SEQ1 	fdb 	$2402 		;SEQUENCE DE JOUR
    		fdb 	$0C20
    		fdb	$1403
    		fdb	$2402
    		fdb	$2120
    		fdb 	$2203
    		fcb	$0000
    ;****************** vecteurs interruptions **************
    RESET	ORG	$FFFE
    		FDB	DEBUT
    		end
    Logiciel utilisé : DEVMIC11acps , et isis ( simulateur )

    Merci d'avance

  2. #2
    ALT
    ALT est déconnecté
    Membre émérite
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 234
    Points : 2 338
    Points
    2 338
    Par défaut
    Euuuh ...
    C'est du code Motorola, ça, non ?
    « Un peuple qui est prêt à sacrifier un peu de liberté contre un peu de sécurité, ne mérite ni l'une, ni l'autre, et finira par perdre les deux. »
    Attribué indistinctement à :
    Thomas Jefferson
    Benjamin Franklin
    Albert Einstein !

  3. #3
    Membre averti
    Profil pro
    Ingénieur en électronique
    Inscrit en
    Septembre 2004
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur en électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 419
    Points : 333
    Points
    333
    Par défaut
    On a fait ça à l'ecole, donc c'est bien de l'assembleur pour le 68HC11.

  4. #4
    Membre averti
    Profil pro
    Ingénieur en électronique
    Inscrit en
    Septembre 2004
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur en électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 419
    Points : 333
    Points
    333
    Par défaut
    Réussi en cours .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
    **************** CONSTANTES ***********
    PortA	equ	$1000		;Port A 
    PortC 	equ 	$1003 	;Port C
    DDRC 	equ 	$1007 	;configuration du port C
    NT1 	equ 	$80 		;Valeur tempo
    NT2 	equ 	$80		; 
     
    		org	$0000		;A ne pas métre normalement , c'est pour que isis aille plus vite
    		jmp	DEBUT	
     
    ***********programme******************
     
    		ORG 	$F000 	; programme en EPROM
    DEBUT	Lds 	#$00FF 	;Pile à la fin de la RAM
    		LDAA	#$003F
    		STAA 	DDRC	;envoi de la config du portc
     
     
    ************************Programme de selection du sous programme  ********************
     
    DEBUT2	LDAA	PortA			;charger le contenu du port A dans l'acu A ( PORTA >> ACU A)
    		ANDA	#%00000011		;on concerve les bits de poid faible 
    		CMPA	#%00000001		;comparaison du portA avec la valeur $01
    		BEQ	JOUR			;Si portA == $01 aller a jour
    		CMPA	#%00000010		;comparaison du portA avec la valeur $02
    		BEQ	NUIT			;Si portA == $02 aller a nuit
    		CMPA	#%00000011		;comparaison du portA avec la valeur $03
    		BEQ	PASAPAS		;Si portA == $03 aller a pasapas
    		BRA	DEBUT2		;Aller a debut2
     
    ************************ programme jour **********************
     
    JOUR 	LDX 	#SEQ1		;Métre la valeur de la sequance1 dans l'acuX 
    		LDAA	,X		;Charger la valeur du poid fort de X et le placer dans l'acu A
    		SEI			;Desactive les interuption (IRQ) pour que l'interuption soit desactivée 
    		BRA	FEU		;Aller a feu
     
    *************************Programme nuit **********************
     
    NUIT	LDX 	#SEQ2		;Métre la valeur de la sequance2 dans l'acuX
    		LDAA	,X		;Charger la valeur du poid fort de X et le placer dans l'acu A
    		SEI			;Desactive les interuption (IRQ) pour que l'interuption soit desactivée
    		BRA	FEU		;Aller a feu
     
    **********************Programme manuel*********************
     
    PASAPAS	CLI			;Active les interuption (IRQ)
    		LDX	$0003		;Placer la valeur contenu dans la mémoire a l'addresse $0003 dans l'acu X
    		BRA	DEBUT2
     
    ************************Pogramme d'interuption*******************
     
    IRQ	SEI			;Desactive les interuption (IRQ) , pour que on ne puisse pas relancer d'interuption 
    		LDAA	,X		
    		BNE	FIN
    		LDX	#SEQ1
    		LDAA	,X
    FIN	STAA	PortC
    		LDAB	#$01
    		PSHX
    		JSR	TEMPO		;peandant 1 segonde le cycle TEMP0 est en cours 
    		PULX
    		INX			;on incrémante 2 fois la valeur de X car ,dans la Eprom , on a : 1 case mémoire pour les led allumés et la seconde le temps 
    		INX
    		STX	$0003
    		RTI
     
    ******************Le programme des feux *********************************
     
    FEU 	STAA	PortC	 	;Entre la valeur de l'acu A dans le port c 
    		INX			;incrémante de 1 X
    		LDAB	,X		;LECTURE DE LA DUREE N2
    		PSHX 			;sauvegarde de X car utilisé dans TEMPO
    		JSR 	TEMPO		;lancer le sousprogramme temp0
    		PULX			;rappel du pointeur de donnée X
    		INX			;incrémante de 1 X
    		LDAA 	$0,X		;Charger la valeur du poid faible de X et le placer dans l'acu A
    		BNE 	FEU		;FIN DE SEQUENCE SI OCTET NUL
    		BRA	DEBUT2
     
    *********************Cycle machine pour que le temps soit de 1 segonde*************************
     
    TEMPO 	LDX 	#NT1 		;TEMPO DE DUREE (B = N2 secondes)
    Bouc1 	LDY 	#NT2
    Bouc2 	DEY
    		CPY 	#$0000
    		BNE	Bouc2
    		DEX
    		CPX 	#$0000
    		BNE 	Bouc1
    		DECB
    		BNE 	TEMPO
    		RTS
     
    ;***********************Valeur pour les séquence de jours et de nuit .************************************
    ;********** $XXYY XX exprime les leds allumer sur le port c , le YY le temps en segonde ******************
     
    SEQ1 	fdb 	$2402 		;SEQUENCE DE JOUR
    		fdb 	$0C20
    		fdb	$1403
    		fdb	$2402
    		fdb	$2120
    		fdb 	$2203
    		fcb	$0000
    SEQ2	fdb	$0210			;SEQUENCE DE NUIT
    		fdb	$1010
    		fcb	$0000
     
    ;****************** vecteurs interruptions **************
    RESET	ORG	$FFFE		;Quand on as un reset 
    		FDB	DEBUT		;Aller a debut 
     
    		ORG	$FFF2		;Quand on as un front décendant , a irq , et que on demande la prise en compte de IRQ 
    		FDB	IRQ		;Aller a IRQ
    		end

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. question sur une boucle et un break
    Par isidore dans le forum C
    Réponses: 10
    Dernier message: 22/11/2006, 20h26
  2. [VBA-E]PB sur une boucle for each next
    Par rond24 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/07/2006, 15h47
  3. Réponses: 11
    Dernier message: 19/06/2006, 16h54
  4. blocage sur une méthode synchronized
    Par rockelite dans le forum Général Java
    Réponses: 3
    Dernier message: 03/05/2006, 22h28
  5. Problème sur une boucle
    Par Mateache dans le forum ASP
    Réponses: 6
    Dernier message: 31/01/2006, 09h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo