Ir ao conteúdo
  • Cadastre-se

Pic16f628A, iniciante em projetos com LED


fcobarcellos

Posts recomendados

ola!amigos

to precisando de uma orientação

to fazendo um projeto de pisca led, fazer um led piscar em intervalos utilizando o picF628A.

eu tenho o ASM, mas o que consegui foi pro 16F84, mas eu somente tenho o 16F628A.

como eu poderia ta fazendo pra trocar o ASM configurado pra F84 para o F628A?

abaixo ta o ASM eu tenho:

;#####################   TITULO DO SEU CODIGO FONTE   #######################
;# #
;# Rotina de delay (atraso) de 1s utilizando apenas instrucoes #
;# usado para um circuito de pisca led #
;############################################################################

;-----------------------DIRETIVAS AO COMPILADOR------------------------------

LIST P=16F84A
RADIX DEC
INCLUDE <P16F84A.INC>
__CONFIG _XT_OSC & _CP_OFF & _WDT_OFF & _PWRTE_ON


;-------------------VARIAVEIS E EQUIVALENCIAS---------------------------------


x equ 0ch ;variavel auxiliar no delay
milisegundo equ 0dh ;variavel auxiliar no delay
seg equ 0é ;variavel auxiliar no delay

;--------------------INICIALIZAÇÃO DO PROGRAMA---------------------------------

clrf portb ; Faz todos os bits de portb = zer0
bsf status,rp0 ; vai para o banco 1 da RAM
clrf trisb ; Faz portb todo saida
bcf status,rp0 ; volta ao banco 0 da RAM

;--------------------PROGRAMA PRINCIPAL-----------------------------------------

repete
bsf portb,7 ; Faz bit 7 do portb=1 (apaga o LED)
call s1 ; Chama a subrotina s1 (nosso delay de 1s)
bcf portb,7 ; Faz bit 7 do portb=0 ( acende o Led}
call s1 ; Chama a subrotina s1 (nosso delay de 1s)
goto repete ; Vai para o label repete

;-------------------------------- SUB ROTINAS ---------------------------------

;----- inicio da rotina de 1 segundo

s1
movlw 10
movwf seg ; Até aqui incluindo o call gastaram-se 4 us.

ms100
movlw 100 ; 1 us Carrega milisegundo com 100
movwf milisegundo ; 1 us

ms1
movlw 249 ; carrega x com o valor 249 (decimal)
movwf x ; 2 us ( 1 do movlw e 1 do movwf )
ms2
nop ; + 1 us
decfsz x ; + 1 us (no último é 2 e pula p/ decfsz seg)
goto ms2 ; + 2 us, total 4us.(no último não passa aqui)
; (4 us x 249)-1 totaliza 995 us
decfsz milisegundo ; +1 us (na última pasagem 2 us)
goto ms1 ; +2 us (na última passagem pula)
; total ms1 (1000 x 100)-1 = 99999
decfsz seg ; + 1 us (no último é 2 e pula p/ return)
goto ms100 ; +2 us (na última passagem pula)

; Total antes do return: 4us (inicio) +10 X 100004
; {(1 do movlw100 + 1 do movwf milisegundo + 99999 da
; rotina ms1 + 1 do decfsz seg + 2 do goto)}- 1 da
; última passagem Total = 1000043 us
return ; + 2 us retorna da sub-rotina apos 1.000.045 us
; aproximadamente 1 segundo
;-----fim da rotina de 1 segundo

;----------------------------- fim do programa ----------------------------------
end

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

muito obrigado desde ja

francisco

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois...
  • 3 meses depois...

OLÁ MEU AMIGO , NOTE QUE EU MUDEI O CABEÇALHO P/ CONFIGURAÇÃO DE

DIRETIVAS DO PIC16F84A P/ O PIC16F628 TENTA GRAVAR ESTE PROGRAMA MODIFICADO, ESPERO QUE DE CERTO valeu.

;#####################   TITULO DO SEU CODIGO FONTE   #######################
;# #
;# Rotina de delay (atraso) de 1s utilizando apenas instrucoes #
;# usado para um circuito de pisca led #
;############################################################################

;-----------------------DIRETIVAS AO COMPILADOR------------------------------


RADIX DEC
INCLUDE <P16F628.INC>
__CONFIG _BODEN_ON & _XT_OSC & _CP_OFF & _WDT_OFF & _PWRTE_ON & _PWRTE_ON & _LVP_OFF & _MCLR_ON



;-------------------VARIAVEIS E EQUIVALENCIAS---------------------------------


x equ 0ch ;variavel auxiliar no delay
milisegundo equ 0dh ;variavel auxiliar no delay
seg equ 0é ;variavel auxiliar no delay

;--------------------INICIALIZAÇÃO DO PROGRAMA---------------------------------

clrf portb ; Faz todos os bits de portb = zer0
bsf status,rp0 ; vai para o banco 1 da RAM
clrf trisb ; Faz portb todo saida
bcf status,rp0 ; volta ao banco 0 da RAM

;--------------------PROGRAMA PRINCIPAL-----------------------------------------

repete
bsf portb,7 ; Faz bit 7 do portb=1 (apaga o LED)
call s1 ; Chama a subrotina s1 (nosso delay de 1s)
bcf portb,7 ; Faz bit 7 do portb=0 ( acende o Led}
call s1 ; Chama a subrotina s1 (nosso delay de 1s)
goto repete ; Vai para o label repete

;-------------------------------- SUB ROTINAS ---------------------------------

;----- inicio da rotina de 1 segundo

s1
movlw 10
movwf seg ; Até aqui incluindo o call gastaram-se 4 us.

ms100
movlw 100 ; 1 us Carrega milisegundo com 100
movwf milisegundo ; 1 us

ms1
movlw 249 ; carrega x com o valor 249 (decimal)
movwf x ; 2 us ( 1 do movlw e 1 do movwf )
ms2
nop ; + 1 us
decfsz x ; + 1 us (no último é 2 e pula p/ decfsz seg)
goto ms2 ; + 2 us, total 4us.(no último não passa aqui)
; (4 us x 249)-1 totaliza 995 us
decfsz milisegundo ; +1 us (na última pasagem 2 us)
goto ms1 ; +2 us (na última passagem pula)
; total ms1 (1000 x 100)-1 = 99999
decfsz seg ; + 1 us (no último é 2 e pula p/ return)
goto ms100 ; +2 us (na última passagem pula)

; Total antes do return: 4us (inicio) +10 X 100004
; {(1 do movlw100 + 1 do movwf milisegundo + 99999 da
; rotina ms1 + 1 do decfsz seg + 2 do goto)}- 1 da
; última passagem Total = 1000043 us
return ; + 2 us retorna da sub-rotina apos 1.000.045 us
; aproximadamente 1 segundo
;-----fim da rotina de 1 segundo

;----------------------------- fim do programa ----------------------------------
end

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois...
  • 2 meses depois...

velho tenho uma enorme duvida em relação a corrente do PIC16F628A, o seguinte é: estou usando o pic para contar em um display de 0 - 9 em ordem crescente, mas p isso acontecer o pic tem q ativar um relé, me parece que a corrente nao é suficiente. segue a foto do circuito, estou programando o pic com o Mikrobasic, e bem simples....

fico grato se alguem poder me ajudar

http://img262.imageshack.us/img262/9036/imagemdwr.jpg

Link para o comentário
Compartilhar em outros sites

  • mês depois...

Cara to com um problema parecido, quero trocar de pic16f84 para 16f628a, alterei o cabeçalho mas ainda não deu certo,ai vai o codigo orig.

talkingeletronics

Start ORG 0x00 ;This sets up the ports
BSF 03,5
MOVLW 00h
MOVWF 05h
MOVWF 06h
BCF 03,5
GOTO Run1

;Table1 holds the hex values for each column of LEDs

Table1 ADDWF 02h,1 ;Add W to Program Counter
RETLW 00h
RETLW 40h
RETLW 40h
RETLW 7Fh
RETLW 40h
RETLW 40h
RETLW 00h
RETLW 7Fh
RETLW 49h
RETLW 49h
RETLW 41h
RETLW 41h
RETLW 00h
RETLW 3Fh
RETLW 40h
RETLW 3Fh
RETLW 40h
RETLW 3Fh
RETLW 00h
RETLW 3é
RETLW 41h
RETLW 41h
RETLW 41h
RETLW 3é
RETLW 00h
RETLW 70h
RETLW 0é
RETLW 01h
RETLW 0é
RETLW 70h
RETLW 00h
RETLW 7Fh
RETLW 00h
RETLW 7Fh
RETLW 10h
RETLW 0Ch
RETLW 02h
RETLW 7Fh
RETLW 00h
RETLW 3é
RETLW 41h
RETLW 45h
RETLW 45h
RETLW 36h
RETLW 00h
RETLW 32h
RETLW 49h
RETLW 49h
RETLW 49h
RETLW 26h
RETLW 00h
RETLW 7Fh
RETLW 00h
RETLW 3é
RETLW 41h
RETLW 45h
RETLW 45h
RETLW 36h
RETLW 00h
RETLW 7Fh
RETLW 10h
RETLW 0Ch
RETLW 02h
RETLW 7Fh
RETLW 00h
RETLW 00h
RETLW 00h
RETLW 00h
RETLW 0FFh

Run1 CLRF 11h ;Clear the Ghost locations ready for starting
CLRF 12h
CLRF 13h
CLRF 14h
CLRF 15h
MOVLW 00
MOVWF 19h ;File 19h is the jump value for table
Run2 MOVLW 40h
MOVWF 18h ;File 18h counts the number of scans
CALL Shift ; and controls the "run speed"
INCF 19h,1
MOVF 19h,0 ;Put jump value into W
CALL Table1
MOVWF 15h ;W contains table data - put it in 15h
XORLW 0FFh ;If table value is FF,
BTFSC 03,2 ; bit 2 of file 3 will be SET (=1)
GOTO Run1 ;Start Table1 again
Run3 DECFSZ 18h,1 ;Scan the display 40h times
GOTO Run4
GOTO Run2
Run4 CALL Scan
GOTO Run3

Scan BSF 05,1 ;Reset 4017
NOP
BCF 05,1

MOVF 11h,0 ;Output the data at the 5 Ghost
MOVWF 06h ; locations to the display
CALL DelD
MOVF 12h,0
MOVWF 06h
CALL DelD
MOVF 13h,0
MOVWF 06h
CALL DelD
MOVF 14h,0
MOVWF 06h
CALL DelD
MOVF 15h,0
MOVWF 06h
CALL DelD
RETURN
;SHIFT moves the data one place to the left to give the "movement"
; effect on the screen

Shift MOVF 12h,0 ;Move file 12h to W
MOVWF 11h ;Move W to file 11h
MOVF 13h,0 ;Move file 13h to W
MOVWF 12h ;Move W to file 12h
MOVF 14h,0 ;Move file 14h to W
MOVWF 13h ;Move W to file 13h
MOVF 15h,0 ;Move file 15h to W
MOVWF 14h ;Move W to file 14h
RETURN

DelD DECFSZ 1Bh,1 ;Delay for viewing the
GOTO DelD ; column of LEDs
MOVLW 00h
MOVWF 06
Clk BSF 05,0 ;Clock the 4017 to
NOP ; the next output
BCF 05,0
RETURN

END

Link para o comentário
Compartilhar em outros sites

ao amigo devifanta, cada port do pic pode fornecer no máximo 25mA.

ao amigo dmmartins na parte start insira as seguintes linhas

logo após org 0x00

BANKSEL  PORTA
CLRF PORTA
CLRF PORTB
BANKSEL CMCON
MOVLW 07H
MOVWF CMCON

o mesmo vale para os amigos com problemas semelhantes insira essas linhas acima na rotina de configuração do PIC

abs.

Link para o comentário
Compartilhar em outros sites

  • 3 meses depois...
  • 6 meses depois...
  • mês depois...

Cuidado com a diferença entre letra maiúscula/minúscula.

Testei, para corrigir o pequeno erro desse programinha basta escrever alguns comandos em maiúscula.

...

;--------------------INICIALIZAÇÃO DO PROGRAMA---------------------------------

clrf PORTB ; Faz todos os bits de portb = zer0

bsf STATUS,RP0 ; vai para o banco 1 da RAM

clrf TRISB ; Faz portb todo saida

bcf STATUS,RP0 ; volta ao banco 0 da RAM

;--------------------PROGRAMA PRINCIPAL-----------------------------------------

...

Abraço a todos e sucesso.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...