Salut,
je cherche à faire fonctionner un pic 18f2680, j'ai fait un programme(sous MikroBasic) mais je l'ai modifié pour qu'il ne fasse que passer le portB de l'état haut à l'état bas toutes les secondes.
Le prog asm :
Code:_main: ;carte_ack.mbas,21 :: main: ;carte_ack.mbas,23 :: PORTA = 0x00 CLRF PORTA+0 ;carte_ack.mbas,24 :: TRISA = 0xFF MOVLW 255 MOVWF TRISA+0 ;carte_ack.mbas,25 :: LATA = 0x00 CLRF LATA+0 ;carte_ack.mbas,27 :: PORTB = 0xFF MOVLW 255 MOVWF PORTB+0 ;carte_ack.mbas,28 :: TRISB = 0x00 CLRF TRISB+0 ;carte_ack.mbas,29 :: LATB = 0x00 CLRF LATB+0 ;carte_ack.mbas,30 :: Delay_ms(1000) MOVLW 51 MOVWF 11, 0 MOVLW 187 MOVWF 12, 0 MOVLW 223 MOVWF 13, 0 L__main1: DECFSZ 13, 1, 0 BRA L__main1 DECFSZ 12, 1, 0 BRA L__main1 DECFSZ 11, 1, 0 BRA L__main1 NOP NOP ;carte_ack.mbas,31 :: while 1'ADCON0.GO_DONE L__main3: ;carte_ack.mbas,32 :: PORTB = 0xFF MOVLW 255 MOVWF PORTB+0 ;carte_ack.mbas,33 :: Delay_ms(1000) MOVLW 51 MOVWF 11, 0 MOVLW 187 MOVWF 12, 0 MOVLW 223 MOVWF 13, 0 L__main7: DECFSZ 13, 1, 0 BRA L__main7 DECFSZ 12, 1, 0 BRA L__main7 DECFSZ 11, 1, 0 BRA L__main7 NOP NOP ;carte_ack.mbas,34 :: PORTB = 0x00 CLRF PORTB+0 ;carte_ack.mbas,35 :: Delay_ms(1000) MOVLW 51 MOVWF 11, 0 MOVLW 187 MOVWF 12, 0 MOVLW 223 MOVWF 13, 0 L__main8: DECFSZ 13, 1, 0 BRA L__main8 DECFSZ 12, 1, 0 BRA L__main8 DECFSZ 11, 1, 0 BRA L__main8 NOP NOP GOTO L__main3 ;carte_ack.mbas,42 :: Delay_ms(100) ' Wait for UART module to stabilize L__main9: DECFSZ 13, 1, 0 BRA L__main9 DECFSZ 12, 1, 0 BRA L__main9 DECFSZ 11, 1, 0 BRA L__main9 NOP NOP ;carte_ack.mbas,63 :: Delay_ms(10) L__main30: DECFSZ 13, 1, 0 BRA L__main30 DECFSZ 12, 1, 0 BRA L__main30 NOP NOP ;carte_ack.mbas,64 :: PORTB.0 = 0 BCF PORTB+0, 0 ;carte_ack.mbas,65 :: Delay_ms(10) MOVLW 130 MOVWF 12, 0 MOVLW 221 MOVWF 13, 0 L__main31: DECFSZ 13, 1, 0 BRA L__main31 DECFSZ 12, 1, 0 BRA L__main31 NOP NOP GOTO L__main26 ;carte_ack.mbas,70 :: Delay_ms(30) L__main32: DECFSZ 13, 1, 0 BRA L__main32 DECFSZ 12, 1, 0 BRA L__main32 DECFSZ 11, 1, 0 BRA L__main32 ;carte_ack.mbas,71 :: PORTB.0 = 0 BCF PORTB+0, 0 ;carte_ack.mbas,72 :: Delay_ms(30) MOVLW 2 MOVWF 11, 0 MOVLW 134 MOVWF 12, 0 MOVLW 153 MOVWF 13, 0 L__main33: DECFSZ 13, 1, 0 BRA L__main33 DECFSZ 12, 1, 0 BRA L__main33 DECFSZ 11, 1, 0 BRA L__main33 ;carte_ack.mbas,74 :: for it = 7 to 0 step -1 MOVLW 7 MOVWF _it+0 ;carte_ack.mbas,76 :: Delay_ms(90) L__main39: DECFSZ 13, 1, 0 BRA L__main39 DECFSZ 12, 1, 0 BRA L__main39 DECFSZ 11, 1, 0 BRA L__main39 NOP NOP ;carte_ack.mbas,77 :: next it MOVF _it+0, 0 XORLW 0 BTFSC STATUS+0, 2 GOTO L__main37 ;carte_ack.mbas,80 :: Delay_ms(90) L__main45: DECFSZ 13, 1, 0 BRA L__main45 DECFSZ 12, 1, 0 BRA L__main45 DECFSZ 11, 1, 0 BRA L__main45 NOP NOP ;carte_ack.mbas,81 :: next it MOVF _it+0, 0 XORLW 0 BTFSC STATUS+0, 2 GOTO L__main43 ;carte_ack.mbas,83 :: wend GOTO $+0 ; end of _main
Le code original en mikrobasic :
Une fois le PIC programmé, je vérifie l'état de la mémoire programme à chaque fois avant de tester. Puis je l'alimente avec VDD = 5V et les deux pins VSS à la masse, je relève la tension sur les pins du portB et je remarque ... qu'il ne se passe rien. Pourtant la simulation montre bien le changement d'état du portB, avez-vous une idée de la provenance du problème ?Code:' * ' * Project name: ' Carte_acquisition ' * Description: ' Permet de relever la tension sur AN0:AN3 et de transmettre leurs valeurs ' numÈriques sur RB0:RB3 en liaison UART ' * Test configuration: ' MCU: PIC18F2680 ' Oscillator: 40.0000 MHz ' Ext. Modules: - ' SW: mikroBasic PRO for PIC ' * NOTES: ' - RX and TX UART switches on EasyPIC5 should be turned On. ' * program carte_ack 'byte = octet dim pin as byte dim it as byte main: 'initialisation des ports I/O PORTA = 0x00 TRISA = 0xFF LATA = 0x00 PORTB = 0xFF TRISB = 0x00 LATB = 0x00 Delay_ms(1000) while 1'ADCON0.GO_DONE PORTB = 0xFF Delay_ms(1000) PORTB = 0x00 Delay_ms(1000) wend 'initialisation des registres de conversion analogique ADCON0 = 0x01 ADCON1 = 0x0B ADCON2 = 0xBE Delay_ms(100) ' Wait for UART module to stabilize while(1) 'boucle analysant chaque port analogique for pin = 0 to 3 'choix de la pin dans le registre ADCON0 if (pin >1) then ADCON0.CHS1 = 1 else ADCON0.CHS1 = 0 end if if (pin - 2*ADCON0.CHS1 = 1) then ADCON0.CHS0 = 1 else ADCON0.CHS0 = 0 end if 'mise en marche du convertisseur A/D ADCON0.GO_DONE = 1 'tant que la conversion n'est pas achevÈe while 1'ADCON0.GO_DONE PORTB.0 = 1 Delay_ms(10) PORTB.0 = 0 Delay_ms(10) wend 'envoyer le rÈsultat numÈrique en sÈrie sur RB0 PORTB.0 = 1 Delay_ms(30) PORTB.0 = 0 Delay_ms(30) for it = 7 to 0 step -1 PORTB.0 = ADRESH.it Delay_ms(90) next it for it = 7 to 0 PORTB.0 = ADRESL.it Delay_ms(90) next it next pin wend end.
Je ne sais vraiment pas si c'est la partie logicielle, hardware ou bien si c'est mon PIC18F2680 qui est bloqué sur un mode "reset"...
Merci d'avance.
-----