Página 1 de 3

Pic 16F877A não executa programa.

MensagemEnviado: 09 Mar 2011 12:21
por aparecido
Oi pessoal, fiz um simples programa de liga/desliga para acionar um buzzer com o Pic 16F877A, o pic é gravado tudo normal, mas o mesmo não aciona o buzzer, a placa esta ok sem curtos ou trilhas rompidas, no Proteus o programa funciona mas no pic não acontece nada, o que eu posso ter feito de errado? estou usando cristal de 20Mhz e os capacitores com ele de 22pF, configurei no MPLab para usar oscilador externo e coloquei a opção indicada aqui no forum, desabilitei o watchdog, coloquei também um capacitor de 100nF entre o VCC e GND.
Segue o código:

;*************************************************************************************************************
;Alarme residencial
;*************************************************************************************************************
#include <P16F877A.inc> ;modelo do PIC
;*************************************************************************************************************
TEMP1 equ 22h ;Variavel temporaria
TEMP2 equ 23h ;Variavel temporaria
TEMP3 equ 24h ;Variavel temporaria
#define BANK0 BCF STATUS, RP0 ;Seta o banco 0 de memória
#define BANK1 BSF STATUS, RP0 ;Seta o banco 1 de memória
#define buzzer PORTC,4

;*************************************************************************************************************
org 00h ;vetor de reset
goto inicio ;vai para o inicio do programa
;*************************************************************************************************************
;Rotina de inicio do programa
;*************************************************************************************************************
inicio

bsf STATUS,RP0 ;muda para banco 1
movlw 06h
movwf ADCON1 ;Usar as portas A e E como I/O e nao como A/D
movlw B'00000000'
clrf TRISA
clrf TRISB
clrf TRISC
clrf TRISD
clrf TRISE
movlw B'00000000'
movwf TRISA
movlw B'00000000'
movwf TRISC
movlw B'00000000'
movwf TRISD
movlw B'00000000'
movwf TRISE
movlw .31
movwf TRISB
clrf OPTION_REG

bcf STATUS,RP0 ;muda para banco 0
clrf PORTA
clrf PORTB
clrf PORTC
clrf PORTD
clrf PORTE

;*************************************************************************************************************
;Rotina principal
;*************************************************************************************************************
principal
bsf buzzer

call Delay
call Delay
call Delay
bcf buzzer

call Delay
call Delay
call Delay
goto principal

;*************************************************************************************************************
; Subrotina de atraso
;*************************************************************************************************************
Delay

movlw 10 ;move 10 para o acumulador
movwf TEMP1 ;move o valor do acumulador para TEMP1

LABEL1

movlw 50 ;move 50 para o acumulador
movwf TEMP2 ;move o valor do acumulador para TEMP2

LABEL2

movlw 50 ;move 50 para o acumulador
movwf TEMP3 ;move o valor do acumulador para TEMP3

LABEL3

decfsz TEMP3,F ;decrementa TEMP3, skip se zero
goto LABEL3 ;vai para o endereço LABEL3
decfsz TEMP2,F ;decrementa TEMP2, skip se zero
goto LABEL2 ;vai para o endereço LABEL2
decfsz TEMP1,F ;decrementa TEMP1, skip se zero
goto LABEL1 ;vai para o endereço LABEL1
return

end ;diretiva de fim do programa


Uma coisa que começou a acontecer hoje, ao tentar abrir o MPLab aparece a mensagem "Acesso Negado" e fecha o MPLab, não consigo mais usar o programa (meu SO é o Windows 7 x64 RC 7600), tentei abrir o MPLab como administrador e acontece a mesma coisa, alguem sabe como resolver isso tambem? obrigado, até mais.

MensagemEnviado: 09 Mar 2011 17:00
por marquim
Não parei pra ler o seu programa inteiro, tampouco vou dar palpites quanto ao "pau" do MPLAB, mas vamos considerar algumas coisas importantes sobre a sua dúvida:

1) Por que você não configura a palavra de configuração ("fusíveis") diretamente no programa? Isso pode ser feito com a diretiva __config, como você pode observar na página 55 do MPASM/MPLINK User's Guide.

2) Não basta configurar o PIC para operação com oscilador externo, pois esse oscilador pode ser do tipo RC, cristal <= 4MHz, cristal >= 4MHz, etc... E diga-se de passagem que o 16F877A nem tem clock interno.

3) Qual gravador você está usando? Já conseguiu gravar algum programa que funcionasse nesse PIC? Observe se o MPLAB está configurado corretamente para o seu microcontrolador.

4) Posta o circuito pra gente. O Proteus às vezes "engole" umas coisas que só funcionam nele, então nos dê mais detalhes.

Abracetas.

MensagemEnviado: 09 Mar 2011 18:34
por vtrx
Sobre o erro do Windows 7 (o erro é no windows e não no compilador),clique com o mouse direito na pasta do MplAb e de todas as permições).
Ve se assim acontece algo.

Código: Selecionar todos
;*************************************************************************************************************
;ALARME RESIDENCIAL
;*************************************************************************************************************
   __CONFIG  _BODEN_OFF & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _CPD_OFF & DEBUG_OFF & _WRT_OFF & _XT_OSC ; (COM CRISTAL)

#INCLUDE <P16F877A.INC> ;MODELO DO PIC
;*************************************************************************************************************
   CBLOCK   0X70
TEMP1     ;VARIAVEL TEMPORARIA
TEMP2    ;VARIAVEL TEMPORARIA
TEMP3    ;VARIAVEL TEMPORARIA
   ENDC

#DEFINE BANK0 BCF STATUS, RP0 ;SETA O BANCO 0 DE MEMÓRIA
#DEFINE BANK1 BSF STATUS, RP0 ;SETA O BANCO 1 DE MEMÓRIA
#DEFINE BUZZER PORTC,4

;*************************************************************************************************************
   ORG 00H ;VETOR DE RESET
   GOTO INICIO ;VAI PARA O INICIO DO PROGRAMA
   ORG   0x04      ;ENDEREÇO INICIAL DA INTERRUPÇÃO
   RETFIE         ;RETORNA DA INTERRUPÇÃO
;*************************************************************************************************************
;ROTINA DE INICIO DO PROGRAMA
;*************************************************************************************************************
INICIO

BSF STATUS,RP0 ;MUDA PARA BANCO 1
MOVLW 06H
MOVWF ADCON1 ;USAR AS PORTAS A E E COMO I/O E NAO COMO A/D
MOVLW B'00000000'
CLRF TRISA
CLRF TRISB
CLRF TRISC
CLRF TRISD
CLRF TRISE
MOVLW B'00000000'
MOVWF TRISA
MOVLW B'00000000'
MOVWF TRISC
MOVLW B'00000000'
MOVWF TRISD
MOVLW B'00000000'
MOVWF TRISE
MOVLW .31
MOVWF TRISB
CLRF OPTION_REG

BCF STATUS,RP0 ;MUDA PARA BANCO 0
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTE

;*************************************************************************************************************
;ROTINA PRINCIPAL
;*************************************************************************************************************
PRINCIPAL
BSF BUZZER

CALL DELAY
CALL DELAY
CALL DELAY
BCF BUZZER

CALL DELAY
CALL DELAY
CALL DELAY
GOTO PRINCIPAL

;*************************************************************************************************************
; SUBROTINA DE ATRASO
;*************************************************************************************************************
DELAY

MOVLW 10 ;MOVE 10 PARA O ACUMULADOR
MOVWF TEMP1 ;MOVE O VALOR DO ACUMULADOR PARA TEMP1

LABEL1

MOVLW 50 ;MOVE 50 PARA O ACUMULADOR
MOVWF TEMP2 ;MOVE O VALOR DO ACUMULADOR PARA TEMP2

LABEL2

MOVLW 50 ;MOVE 50 PARA O ACUMULADOR
MOVWF TEMP3 ;MOVE O VALOR DO ACUMULADOR PARA TEMP3

LABEL3

DECFSZ TEMP3,F ;DECREMENTA TEMP3, SKIP SE ZERO
GOTO LABEL3 ;VAI PARA O ENDEREÇO LABEL3
DECFSZ TEMP2,F ;DECREMENTA TEMP2, SKIP SE ZERO
GOTO LABEL2 ;VAI PARA O ENDEREÇO LABEL2
DECFSZ TEMP1,F ;DECREMENTA TEMP1, SKIP SE ZERO
GOTO LABEL1 ;VAI PARA O ENDEREÇO LABEL1
RETURN

END ;DIRETIVA DE FIM DO PROGRAMA

MensagemEnviado: 09 Mar 2011 19:42
por renatokodaira
Pra cristal de 20MHz, a configuraçao precisa ser HS e nao XT no oscilador.

MensagemEnviado: 09 Mar 2011 19:46
por aparecido
Estou tentando alterar as permissões do Mplab aqui e vou testar o que me sugeriram, dai posto os resultados, obrigado pelas mensagens, abraço.

MensagemEnviado: 09 Mar 2011 20:03
por vtrx
Não ví quera cristal de 20 Mhz.
Mude o final da configuração para _HS_OSC ;

MensagemEnviado: 09 Mar 2011 20:16
por aparecido
vtrx eu alterei aqui as permissões e habilitei todas para a pasta Microchip e as subpastas, ainda aparece a mensagem acesso negado.
O caminho que fiz foi botão direito > propriedades > aba segurança > nomes de grupo/usuario deixei selecionado proprietario criador e cliquei em editar e assinalei todos itens da coluna permitir > cliquei em aplicar e ok nas outras telas.
Deixei passar algum detalhe na alteração de permissões? obrigado.

MensagemEnviado: 09 Mar 2011 21:27
por vtrx
Quando voce click em 'Nome de grupo ou usuario',voce ve em baixo quais a s permissões estão liberadas.
Verifique todas,em 'Usuário (seu nome/etc '),veja se stá com tudo habilitado.

MensagemEnviado: 09 Mar 2011 21:32
por aparecido
Não aparece nem os campos (vazio ou apagado), eu clico pra editar as permissões, habilito todas, dai em seguida clico para editar novamente para ver se habilitou e estão todas apagadas novamente.
Parece que não salva quando habilito todas permissões.

MensagemEnviado: 09 Mar 2011 21:38
por vtrx
Talvez voce não esteja como ADM?
Algun ati-virus online??Desabilite-o.
A inútil 'Central de Segurança' ta rodando?Desative.
Tente tambem,com mouse direito,em cima do executável e selecionar 'Executar como Administrador'.

MensagemEnviado: 09 Mar 2011 21:45
por aparecido
Desabilitei o antivirus (Eset Nod 32) e estou logado como administrador, continua o mesmo problema . :(

MensagemEnviado: 09 Mar 2011 21:46
por vtrx
Tente tambem,com mouse direito,em cima do executável e selecionar 'Executar como Administrador'.

MensagemEnviado: 09 Mar 2011 21:49
por aparecido
Mesmo resultado, executei como administrador e acesso negado.

MensagemEnviado: 09 Mar 2011 21:55
por vtrx
Faz o seguinte,habilite a conta de ADM.
No menu 'executar',digite cmd.
Vai aparecer no menu em cima a palavra 'cmd',clicka com mouse direito nela e escolhe "Executar como administrador" .
Quando abrir a janela do CMD,digite: net user administrador /active:yes.
Da um Reboot no sistema e veja como ta a conta de ADM,e veja se as alterações que fez antes estão funcionando.

MensagemEnviado: 09 Mar 2011 22:03
por vtrx
Aparecido,verifique se voce deu permissão corretamente.
Escolha a pasta 'Arquivos de programas', clique nela com o botão direito e escolha propriedades\Clique na guia Segurança\ agora clique no botão abaixo AVANÇADAS\ Na aba Proprietário clique em editar e selecione agora o usuário atual que você possui no Windows 7 e marque a opção
"SUBSTITUIR O PROPRIETÁRIO EM SUBCONTAINERS E OBJETOS" depois disso clique em ok , ele informará uma mensagem e fará um processo de permissão para as pastas e sub-pastas.
Depois que terminar clique em OK em todas as janelas e tente acesso denovo.