Fórum Eletrônica2002 (Brasil)
Seja bem vindo ao fórum Eletrônica2002.

Para ter acesso a todo o conteúdo do fórum você precisa estar cadastrado e fazer o login!

Se não é cadastrado no fórum: aproveite e faça.

Para criar um tópico, você precisa se cadastrar e estar conectado.
Ao criar um tópico, vc deve colocar a marca/modelo/e defeito do aparelho no título do tópico. Isto é regra neste fórum!
https://eletronica2002.forumeiros.com/forum-de-reparacao-de-aparelhos-eletronicos-f1/regras-do-forum-t19731.htm

Falar com o administrador?
Mande um e-mail: valdeni@eletronica2002.com.br

Participe do fórum, é rápido e fácil

Fórum Eletrônica2002 (Brasil)
Seja bem vindo ao fórum Eletrônica2002.

Para ter acesso a todo o conteúdo do fórum você precisa estar cadastrado e fazer o login!

Se não é cadastrado no fórum: aproveite e faça.

Para criar um tópico, você precisa se cadastrar e estar conectado.
Ao criar um tópico, vc deve colocar a marca/modelo/e defeito do aparelho no título do tópico. Isto é regra neste fórum!
https://eletronica2002.forumeiros.com/forum-de-reparacao-de-aparelhos-eletronicos-f1/regras-do-forum-t19731.htm

Falar com o administrador?
Mande um e-mail: valdeni@eletronica2002.com.br
Fórum Eletrônica2002 (Brasil)
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
.

Menu de navegação


Clique nas imagens abaixo para acessar os fóruns desejados.

Fóruns:






---------------------------

PARCEIROS

E PATROCINADORES

DO FÓRUM 2002:

================



================

Quer ser um patrocinador do fórum?

Mande um e-mail para:

Valdeni@eletronica2002.com.br


_________________
Últimos assuntos
» tv semp toshiba 2085 U1 tela azul sem imagem sem caracteris
Adicionar botão a PIC16F84 EmptyHoje à(s) 13:32 por jaireletronica

» Prolongar a vida util das lampadas led.
Adicionar botão a PIC16F84 EmptyHoje à(s) 13:22 por eduardoscooby

» Estou precisando do esquema da caixa de som JBL, modelo,DJ Xpear J2515.
Adicionar botão a PIC16F84 EmptyHoje à(s) 13:08 por jailton da silva santos

»  [Resolvido ] TV SONY KDLR 305B ACENDE OS LED E APAGA PISCA 5 VEZES
Adicionar botão a PIC16F84 EmptyHoje à(s) 09:03 por Paranista

» Tv Sansumg UN65AU7700GXZD Led piscando duas vezes
Adicionar botão a PIC16F84 EmptyOntem à(s) 21:11 por verino Andrade de Sá

» Esquema módulo Buster BB-1600GL
Adicionar botão a PIC16F84 EmptyOntem à(s) 18:11 por Claudinho@10

» Vamos expor aqui nossas experiências em retirada e reposição de DISPLAYS.
Adicionar botão a PIC16F84 EmptyOntem à(s) 16:04 por jailton da silva santos

» Fonte JFA turbo 1000x código do diodo zener
Adicionar botão a PIC16F84 EmptyOntem à(s) 15:49 por juliocddc

» Esquema TV LG 50PH4700-SD
Adicionar botão a PIC16F84 EmptyOntem à(s) 13:33 por alexandre cruzinha

» Positivo All In One 520 TV - 71r-c14cu6-t810 onde está a bios?
Adicionar botão a PIC16F84 EmptyOntem à(s) 13:15 por nagkiller

» Tv LG 29ln300b sem áudio
Adicionar botão a PIC16F84 EmptyOntem à(s) 07:50 por marcossreiss

» Tv TCL . modelo 50P635. Redução de tensão dos leds.
Adicionar botão a PIC16F84 EmptyOntem à(s) 00:05 por jailton da silva santos

» Som gradiente mcz140c não lê cd
Adicionar botão a PIC16F84 EmptyTer 26 Mar 2024, 17:12 por Gustavo machado costa

» tv panasonic tc 49d400b led vermelho piscando
Adicionar botão a PIC16F84 EmptyTer 26 Mar 2024, 13:52 por jaireletronica

» tv lcd panasonic tc-l42g11b liga acende o led verde depois fica vermelho piscando.
Adicionar botão a PIC16F84 EmptyTer 26 Mar 2024, 13:05 por joaquimrosadesouza

» Rádio Zenith transoceanic royal D7000Y não sintoniza nada
Adicionar botão a PIC16F84 EmptySeg 25 Mar 2024, 19:45 por WALTER JANSEN

» TV LG 32LM3400 defeito na fonte os 3,5v oscilando
Adicionar botão a PIC16F84 EmptyDom 24 Mar 2024, 18:16 por Rafael2

» TV Buster HBTV 40D02FD
Adicionar botão a PIC16F84 EmptySáb 23 Mar 2024, 23:13 por edv4ld0

» CIRCUITO INTEGRADO USADO NO GRDIENTE PRO1200
Adicionar botão a PIC16F84 EmptySáb 23 Mar 2024, 20:01 por calbano8

» Tv JVC modelo LT32N750U looping infinito RGB
Adicionar botão a PIC16F84 EmptySáb 23 Mar 2024, 18:15 por Kafs

» Tv toshiba Chassi U13 sem imagem e com som
Adicionar botão a PIC16F84 EmptySex 22 Mar 2024, 20:39 por MARIO Y. SEGAWA

» esquema da tv aoc 32s5195/78g
Adicionar botão a PIC16F84 EmptyQui 21 Mar 2024, 12:03 por Paranista

» Som cce modelo md3280 parou de funcionar nem o stanby acende
Adicionar botão a PIC16F84 EmptyQua 20 Mar 2024, 16:13 por eduardoscooby

» Não consigo opinar no tópico sobre display.
Adicionar botão a PIC16F84 EmptyQua 20 Mar 2024, 15:27 por CACÁ

» fonte ps4 adr 240r explodiu diodo smd e resistor
Adicionar botão a PIC16F84 EmptyQua 20 Mar 2024, 12:58 por Paranista

» Polyvox CP-850D - Múltiplos Defeitos (resolvido)
Adicionar botão a PIC16F84 EmptyQua 20 Mar 2024, 06:46 por eduardoscooby

» Esquema do minisystem cce modelo md3280
Adicionar botão a PIC16F84 EmptyTer 19 Mar 2024, 22:27 por Rafael2

» PORFAVOR! ESQUEMA CAIXA DE SOM PHILCO MOD. PCX20000
Adicionar botão a PIC16F84 EmptySeg 18 Mar 2024, 14:17 por elisondeus2024

» TV AOC 32s5195/78g precisso esquema fonte
Adicionar botão a PIC16F84 EmptySeg 18 Mar 2024, 11:02 por everardes

» Pq alguns projetos nao funciona na pratica ?
Adicionar botão a PIC16F84 EmptySex 15 Mar 2024, 16:40 por nagkiller

Quem está conectado?
549 usuários online :: 7 registrados, 0 invisíveis e 542 visitantes :: 2 motores de busca

banyero, CACÁ, mr panda, nagkiller, sugeda, Tome2106, veludinho

O recorde de usuários online foi de 1034 em Sex 24 Jul 2015, 10:41
Anuncios

    Nenhum anúncio


    Adicionar botão a PIC16F84

    2 participantes

    Ir para baixo

    Adicionar botão a PIC16F84 Empty Adicionar botão a PIC16F84

    Mensagem por andref Qua 18 Fev 2015, 21:25

    Boas pessoal,
    Estou a fazer um protejo com um PIC16F84, e estou programando em assembly.
    Fiz o programa a mostrar varias informações num ecrã, mas mostra cada informação num certo período de tempo, depois muda para a outra. Gostava de inserir na programação em assembly um botão que alterna-se as informações mostradas, ou seja quando ligasse o PIC mostrava por ex.: a temperatura ambiente, depois ao carregar no botão mostrava a data, carregando outra vez mostrava a temperatura máxima atingida, voltando a carregar voltava a temperatura ambiente, sempre assim neste ciclo.
    Alguem me sabe dizer o que devo de adicionar, ou alguem tem algum exemplo identico?
    A programação das tarefas (informação a mostrar) já esta concluida, basta so adicionar o botão a programação.
    Obrigado.
    andref
    andref
    NOVATO
    NOVATO

    DESCRIÇÃO: : Técnico em Eletrônica e informática
    TEMPO DE EXPERIÊNCIA : 3 anos
    Sexo : Masculino
    Número de Mensagens : 2
    Idade : 30
    Cidade/Estado: : Lisboa
    Data de inscrição : 18/02/2015

    Ir para o topo Ir para baixo

    Adicionar botão a PIC16F84 Empty Re: Adicionar botão a PIC16F84

    Mensagem por nagkiller Sáb 21 Fev 2015, 09:49

    Poste todo o seu projeto para que possamos analisar...

    Quer fazer isso com apenas 1 botão??? E esta tarefa de mostrar automaticamente, ainda quer quer aconteça, ou quer a substitui-la pelo botão???

    Uma maneira simples é criar uma variável e ir adicionando valor cada vez que este botão é pressionado, chegando ao limite de sua conta, inicie novamente a contagem...
    E conforme a contagem, o display mostrará a mensagem desejada.

    Flw...

    _________________
    No mundo só existem 10 tipos de pessoas: as que conhecem binário e as que não conhecem!!!
    nagkiller
    nagkiller
    Moderador do fórum
    Moderador do fórum

    DESCRIÇÃO: : Técnico em Eletrônica e informática
    TEMPO DE EXPERIÊNCIA : Desde 1990
    Sexo : Masculino
    Número de Mensagens : 2824
    Idade : 43
    Cidade/Estado: : Garça - São Paulo
    Humor : Depende
    Data de inscrição : 23/11/2011

    Ir para o topo Ir para baixo

    Adicionar botão a PIC16F84 Empty Re: Adicionar botão a PIC16F84

    Mensagem por andref Sáb 21 Fev 2015, 12:25

    nagkiller escreveu:Poste todo o seu projeto para que possamos analisar...

    Quer fazer isso com apenas 1 botão??? E esta tarefa de mostrar automaticamente, ainda quer quer aconteça, ou quer a substitui-la pelo botão???

    Uma maneira simples é criar uma variável e ir adicionando valor cada vez que este botão é pressionado, chegando ao limite de sua conta, inicie novamente a contagem...
    E conforme a contagem, o display mostrará a mensagem desejada.

    Flw...
    sim quero fazer isto com apenas um botão e excluir a tarefa de mostrar automaticamente
    aqui esta o excerto do codigo que faz mostra automaticamente
    Código:

            ; show speed 30 times (~1.5 minutes)
       movlw   0x1e
       movwf   mainTemp
    mainloop1
       call   showSpeed
       call   delay_1_sec
       call   delay_1_sec
       decfsz   mainTemp
       goto   mainloop1
       ; show top speed for 10 seconds
       call   showTopSpeed
       call   delay_10_sec
       ; show speed 30 times (~1.5 minutes)
       movlw   0x1e
       movwf   mainTemp
       goto   mainloop1
       return
    e aqui esta o codigo completo
    Código:

    ; Ports

    #define      DIS   PORTB,1      ; Display on
    #define      SDA   PORTB,2      ; SDA TID
    #define      SCL   PORTB,3      ; SCL TID
    #define      MRQ   PORTB,4      ; MRQ TID

    ; Programm memory
    CounterA   EQU   0eh
    CounterB   EQU   0fh
    CounterC   EQU   10h
    CounterD   EQU   11h
    W1      EQU   12h
    W2      EQU   13h
    W3      EQU   14h
    I2CBYTE      EQU   15h
    AREG      EQU   16h
    BREG      EQU   17h
    CREG      EQU   18h
    DREG      EQU   19h
    TID1      EQU   1ah
    TID2      EQU   2bh
    TID3      EQU   2ch
    TID4      EQU   2dh
    TID5      EQU   2eh
    TID6      EQU   2fh
    TID7      EQU   20h
    TID8      EQU   21h
    TIDtemp      EQU   22h
    TIDtextNr   EQU   23h
    speed1      EQU   24h
    speed10      EQU   25h
    speed100   EQU   26h
    currentSpeed   EQU   27h
    temp      EQU   28h
    mainTemp   EQU   29h

    ; Internal EEPROM
    eepTID      EQU   01h   ; address of TID message number
    eepSpeed   EQU   00h   ; address of maximum speed value


    ; Configuration
       list p=16f84,f=inhx8m
       Title "tid.asm"

       include p16f84.inc
       
       __CONFIG   _PWRTE_ON & _WDT_OFF & _XT_OSC

    ; init EEPROM
    org H'2100'   ; init EEPROM      ; virtual address of EEPROM
    DE   D'0'         ; unused
    DE   D'0'         ; message position
    DE   D'159'         ; top speed (set to 0 or your own value)


       org   00h
    start
    ; Port B is output
       bsf     STATUS,RP0
       clrf    TRISB
       bcf     STATUS,RP0
       clrf   PORTB
    ; Port A is output, only iSDAin and RA4 are input
       bsf     STATUS,RP0
       movlw   B'00011000'   ; PortA all output excluding SDAin and RA4 (speed)
       movwf   TRISA
       bcf     STATUS,RP0
       clrf   PORTA
    ; set counter settings
       bsf     STATUS,RP0
       bsf   OPTION_REG,T0CS   ; Counter on RA4
       bsf   OPTION_REG,PSA   ; use no prescaler
       bcf     STATUS,RP0


    ; start with TID text 0
       movlw   0x00
       movwf   TIDtextNr

    ; welcome message
       call   TIDon

       movlw   0x41
       call   addCharTID   ; "A"

       movlw   0x4E
       call   addCharTID   ; "N"

       movlw   0x44
       call   addCharTID   ; "D"

       movlw   0x52
       call   addCharTID   ; "R"

       movlw   0x45
       call   addCharTID   ; "E"

       movlw   0x20
       call   addCharTID   ; " "

       movlw   0x46
       call   addCharTID   ; "F"

       movlw   0x49
       call   addCharTID   ; "I"

       movlw   0x55
       call   addCharTID   ; "U"

       movlw   0x5A
       call   addCharTID   ; "Z"

       movlw   0x41
       call   addCharTID   ; "A"

       call   TIDoff

    mainloop
       call   delay_10_sec   ; esperar 10 segundos
       call   TIDon
       ; show speed init message
       movlw   0x43
       call   addCharTID   ; "C"
       movlw   0x4F
       call   addCharTID   ; "O"
       movlw   0x52
       call   addCharTID   ; "R"
       movlw   0x53
       call   addCharTID   ; "S"
       movlw   0x41
       call   addCharTID   ; "A"
       movlw   0x20
       call   addCharTID   ; " "
       movlw   0x54
       call   addCharTID   ; "T"
       movlw   0x44
       call   addCharTID   ; "D"
       movlw   0x20
       call   addCharTID   ; " "
       movlw   0x20
       call   addCharTID   ; " "
       movlw   0x20
       call   addCharTID   ; " "
       movlw   0x20
       call   addCharTID   ; " "
       movlw   0x20
       call   addCharTID   ; " "
       movlw   0x20
       call   addCharTID   ; " "
       movlw   0x20
       call   addCharTID   ; " "
       movlw   0x20
       call   addCharTID   ; " "

       ; show speed 30 times (~1.5 minutes)
       movlw   0x1e
       movwf   mainTemp
    mainloop1
       call   showSpeed
       call   delay_1_sec
       call   delay_1_sec
       decfsz   mainTemp
       goto   mainloop1
       ; show top speed for 10 seconds
       call   showTopSpeed
       call   delay_10_sec
       ; show speed 30 times (~1.5 minutes)
       movlw   0x1e
       movwf   mainTemp
       goto   mainloop1
       return   ;adicionado verificar repeticao


    ;-------------------
    ; Message displaying
    ;-------------------

    ; show top speed
    showTopSpeed
       ; read top speed to w
       movlw   eepSpeed   ; address of top speed
       movwf   EEADR
       bsf   STATUS,RP0   ; Bank 1
       bsf   EECON1,RD   ; read
       bcf   STATUS,RP0   ; Bank 1
       movf   EEDATA,0   ; read from EEPROM
       call   convertSpeed   ; make ASCII values
       ; display top speed
       movlw   0x56       ; "V"
       movwf   TID1
       movlw   0x4d      ; "M"
       movwf   TID2
       movlw   0x41      ; "A"
       movwf   TID3
       movlw   0x58      ; "X"
       movwf   TID4
       movlw   D'32'      ; space
       movwf   TID5
       movf   speed100,w   ; 100
       movwf   TID6
       movf   speed10,w   ; 10
       movwf   TID7
       movf   speed1,w   ; 1
       movwf   TID8
       call   sendTIDText   ; display on TID
       return

    ;----------------
    ; TID subroutines
    ;----------------

    ; TID scrolling
    ; shift text one char to right and add new char from W
    ; then send to TID
    addCharTID
       movwf   TIDtemp
       movf   TID2,0
       movwf   TID1
       movf   TID3,0
       movwf   TID2
       movf   TID4,0
       movwf   TID3
       movf   TID5,0
       movwf   TID4
       movf   TID6,0
       movwf   TID5
       movf   TID7,0
       movwf   TID6
       movf   TID8,0
       movwf   TID7
       movf   TIDtemp,0
       movwf   TID8
       call   delay_0.2_sec
       call   sendTIDText
       return

    ; Sends 8 chars to TID
    sendTIDText
       call   startTID
       movf   TID1,0
       call   sendTID
       movf   TID2,0
       call   sendTID
       movf   TID3,0
       call   sendTID
       movf   TID4,0
       call   sendTID
       movf   TID5,0
       call   sendTID
       movf   TID6,0
       call   sendTID
       movf   TID7,0
       call   sendTID
       movf   TID8,0
       call   sendTID
       call   stopTID
       return

    ; Display on; init TID
    TIDon
       ; init TID text (all spaces)
       movlw    0x20
       movwf    TID1
       movwf    TID2
       movwf    TID3
       movwf    TID4
       movwf    TID5
       movwf    TID6
       movwf    TID7
       movwf    TID8
       bsf   DIS      ; Display on
       call   wait01s
       ; send empty text 5 times
       movlw   0x05
       movwf   DREG
    TIDon1   call   sendTIDText
       call   wait01s
       decfsz   DREG
       goto   TIDon1
       movlw   0x2a
       call   addCharTID   ; "*"
       movlw   0x2a
       call   addCharTID   ; "*"
       movlw   0x2a
       call   addCharTID   ; "*"
       movlw   0x20
       call   addCharTID   ; " "
       return

    ; Display off
    ; scroll out text
    TIDoff
       movlw   0x20
       call   addCharTID   ; " "
       movlw   0x2a
       call   addCharTID   ; "*"
       movlw   0x2a
       call   addCharTID   ; "*"
       movlw   0x2a
       call   addCharTID   ; "*"
       movlw   0x20
       call   addCharTID   ; " "
       movlw   0x20
       call   addCharTID   ; " "
       movlw   0x20
       call   addCharTID   ; " "
       movlw   0x20
       call   addCharTID   ; " "
       movlw   0x20
       call   addCharTID   ; " "
       movlw   0x20
       call   addCharTID   ; " "
       movlw   0x20
       call   addCharTID   ; " "
       movlw   0x20
       call   addCharTID   ; " "
       bcf   DIS      ; Display off (show date)
       return


    ; Start condition for TID
    startTID
       bcf   MRQ
       bcf   SDA      ; All high
       bcf   SCL   ;
       ; communication begins
       bsf   MRQ   ;
       call   wait1ms      ; MRQ neg. imp.
       bcf   MRQ   ;

       call   wait1ms
       ; I2C-start
       bsf   SDA      ; START:
       call   wait1ms      ; SCL=1, SDA=falling
       bsf   SCL      ;

       ; address
       movlw   0x4a      ; Addres
       call   sendTID

       bsf   MRQ      ; After the addres MRQ=0

       clrw
       call   sendTID      ; All lamp off
       clrw
       call   sendTID
       return

    ; Stop condition for TID
    stopTID
       call   wait1ms
       bcf   MRQ      ; MRQ=1

       bsf   SDA
       call   wait1ms
       bcf   SCL      ; Stop:
       call   wait1ms
       bcf   SDA      ; SCL=1, SDA=raising
       call   wait1ms

       bcf   MRQ
       bcf   SDA      ; End: all high
       bcf   SCL
       return

    ; Send W to TID
    ; Calculate the parity
    sendTID
       movwf   BREG      ; Send byte (W)
       movwf   I2CBYTE      ; Send byte (W)
       clrf   CREG      ; The number of 1
       movlw   0x07
       movwf   AREG      ; cycle value

    send0   rrf   BREG      ; rotate the byte,
       btfsc   STATUS,C   ; and count the number of 1
       incf   CREG      ; (but only the low 7 bit)
       decfsz   AREG,1
       goto   send0

       rlf   I2CBYTE,1   ; Rotate, and behind the parity
       bcf   I2CBYTE,0
       btfss   CREG,0      ; if CREG odd, then clear parity
       bsf   I2CBYTE,0   ;

       ; send byte
       movlw   8      ;
       movwf   CREG      ; Cycle 8x

    send1
       bsf   SCL      ; Clock=0
       call   wait025ms

       btfsc   I2CBYTE,7   ; byte <7> bit 0 or 1
       goto   send3
       bsf   SDA      ; 0
       goto   send4
    send3
       bcf   SDA      ; 1
    send4
       call   wait025ms
       bcf   SCL      ; Clock=1, valid data
       call   wait025ms

       rlf   I2CBYTE,1   ; rotate

       decfsz   CREG,1      ; Cycle
       goto   send1

       bsf   SCL      ; Clock = 0
       call   wait025ms

       ; ACK
       bcf   SDA      ; Output=1
       call   wait025ms
       bcf   SCL      ; Clock=1=> ACK
       
       call   wait025ms   ; ignore ACK

       bsf   SCL      ; Clock=0
       call   wait025ms
       bsf   SDA      ; data=0
       return


    ;-------------------------
    ; Speed messuring functions
    ;-------------------------

    ; Displays current speed on TID
    showSpeed
       call   getSpeed   ; measure speed
       movwf   currentSpeed   ; save speed
       call   checkTopSpeed   ; check if we have a new top speed
       movf   currentSpeed,w   ; restore speed value
       call   convertSpeed   ; make ASCII values
       ; display speed
       movf   speed100,w   ; 100
       movwf   TID1
       movf   speed10,w   ; 10
       movwf   TID2
       movf   speed1,w   ; 1
       movwf   TID3
       movlw   D'32'      ; " "
       movwf   TID4
       movlw   0x4b
       movwf   TID5       ; "K"
       movlw   0x4d
       movwf   TID6      ; "M"
       movlw   0x2f
       movwf   TID7      ; "/"
       movlw   0x48
       movwf   TID8      ; "H"
       call   sendTIDText   ; display on TID
       return

    ; measures the speed and writes value to w
    getSpeed
       clrf   TMR0      ; clear counter
       call   delay_speed   ; wait
       movf   TMR0,w      ; read speed from counter and write to w
       return

    ; converts speed in w to ASCII values speed1/10/100
    convertSpeed
       ; split speed to decimal values
       clrf   speed100   ; clear digit
       decf   speed100, f
    convertSpeed100
       incf   speed100, f
       movwf   temp      ; subtract 100
       movlw   D'100'      ; subtract 100
       subwf   temp,w      ; subtract 100
       btfsc   STATUS, C   ; overflow?
       goto   convertSpeed100   ; if no, once more
       addlw   D'100'      ; get state before last subtraction
       clrf   speed10      ; clear digit
       decf   speed10, f
    convertSpeed10
       incf   speed10, f
       movwf   temp      ; subtract 10
       movlw   D'10'      ; subtract 10
       subwf   temp,w      ; subtract 10
       btfsc   STATUS, C   ; overflow?
       goto   convertSpeed10   ; if no, once more
       addlw   D'10'      ; get state before last subtraction
       movwf   speed1      ; digit for 1 is the rest
       ; make ASCII values
       movf   speed100,f   ; test for 0
       btfss   STATUS, Z   ; zero?
       goto   convertSpeed10next   ; if not zero, do not touch speed100 and speed10
       movlw   D'240'      ; if zero, make space
       movwf   speed100   ; set to 240, will become space later
       movf   speed10,f   ; test for 0
       btfss   STATUS, Z   ; zero?
       goto   convertSpeed10next
       movlw   D'240'      ; if zero, make space
       movwf   speed10      ; set to 240, will become space later
    convertSpeed10next
       ; int -> ASCII
       movf   speed100,w   ; load to w
       addlw   D'48'      ; make ASCII value
       movwf   speed100
       movf   speed10,w   ; load to w
       addlw   D'48'      ; make ASCII value
       movwf   speed10
       movf   speed1,w   ; load to w
       addlw   D'48'      ; make ASCII value
       movwf   speed1
       return

    ; check if there is a new top speed
    checkTopSpeed
       movwf   temp      ; save speed
       movlw   eepSpeed   ; address of top speed
       movwf   EEADR
       bsf   STATUS,RP0   ; Bank 1
       bsf   EECON1,RD   ; read
       bcf   STATUS,RP0   ; Bank 1
       movf   EEDATA,0   ; read from EEPROM
       subwf   temp,w      ; subtract top speed
       btfss   STATUS, C   ; overflow?
       return         ; if no, return
       ; new top speed, save to EEPROM
       movf   temp,w      ; restore speed
       movwf   EEDATA
       movlw   eepSpeed   ; address of top speed
       movwf   EEADR
       bsf   STATUS,RP0   ; Bank 1
       bcf   INTCON,GIE   ; disable interupts
       bsf   EECON1,WREN   ; write enable
       movlw   0x55
       movwf   EECON2      ; write 55h
       movlw   0xaa
       movwf   EECON2      ; write AAh
       bsf   EECON1,WR   ; begin write
    checkTopSpeed_write
       btfsc   EECON1, WR
       goto   checkTopSpeed_write
       bcf   EECON1,WREN   ; write disable
       bsf   INTCON,GIE   ; reenable interupts
       bcf   STATUS,RP0   ; Bank 0
       return

    ; speed delay time = 32 / (3.6 * 1.80)

    ; Delay code generated by PiKloops (So 2005-Apr-10 12:34:45)
    ; Time Delay = 0.202387500s  with  Osc = 4.00000000MHz
    delay_speed         ; for 1.791m wheel circumference
       movlw    D'2'
       movwf    CounterC
       movlw    D'7'
       movwf    CounterB
       movlw    D'167'
       movwf    CounterA
    delay_0.2023875_sec_loop
       decfsz    CounterA,1
       goto    delay_0.2023875_sec_loop
       decfsz    CounterB,1
       goto    delay_0.2023875_sec_loop
       decfsz    CounterC,1
       goto    delay_0.2023875_sec_loop
       return


    ;-------------------
    ; Timing subroutines
    ;-------------------

    ; Delay code generated by PiKloops (Mo 2005-Mär-14 20:56:41)
    ; Time Delay = 0.00025000s  with  Osc = 4.00000000MHz
    wait025ms
       movlw    D'83'
       movwf    CounterA
    delay_0.00025_sec_loop
       decfsz    CounterA,1
        goto    delay_0.00025_sec_loop
       return

    ; Delay code generated by PiKloops (Mo 2005-Mär-14 20:55:35)
    ; Time Delay = 0.00100000s  with  Osc = 4.00000000MHz
    wait1ms
       movlw    D'2'
       movwf    CounterB
       movlw    D'75'
       movwf    CounterA
    delay_0.001_sec_loop
       decfsz    CounterA,1
        goto    delay_0.001_sec_loop
       decfsz    CounterB,1
        goto    delay_0.001_sec_loop
       return

    ; Delay code generated by PiKloops (Mo 2005-Mär-14 20:54:18)
    ; Time Delay = 0.09999500s  with  Osc = 4.00000000MHz
    wait01s
       movlw    D'130'
       movwf    CounterB
       movlw    D'220'
       movwf    CounterA
    delay_0.1_sec_loop
       decfsz    CounterA,1
        goto    delay_0.1_sec_loop
       decfsz    CounterB,1
        goto    delay_0.1_sec_loop
       return

    ; Delay code generated by PiKloops (Sa 2005-Mär-19 14:17:32)
    ; Time Delay = 0.19999300s  with  Osc = 4.00000000MHz
    delay_0.2_sec
       movlw    D'2'
       movwf    CounterC
       movlw    D'5'
       movwf    CounterB
       movlw    D'183'
       movwf    CounterA
    delay_0.2_sec_loop
       decfsz    CounterA,1
        goto    delay_0.2_sec_loop
       decfsz    CounterB,1
        goto    delay_0.2_sec_loop
       decfsz    CounterC,1
        goto    delay_0.2_sec_loop
       return

    ; Delay code generated by PiKloops (Mo 2005-Feb-28 20:42:10)
    ; Time Delay = 0.99999800s  with  Osc = 4.00000000MHz
    delay_1_sec
       movlw    D'6'
       movwf    CounterC
       movlw    D'24'
       movwf    CounterB
       movlw    D'168'
       movwf    CounterA
    delay_1_sec_loop
       decfsz    CounterA,1
       goto    delay_1_sec_loop
       decfsz    CounterB,1
       goto    delay_1_sec_loop
       decfsz    CounterC,1
       goto    delay_1_sec_loop
       return

    ; Delay code generated by PiKloops (Mo 2005-Mär-14 21:15:22)
    ; Time Delay = 9.99999800s  with  Osc = 4.00000000MHz
    delay_10_sec
       movlw    D'51'
       movwf    CounterC
       movlw    D'237'
       movwf    CounterB
       movlw    D'173'
       movwf    CounterA
    delay_10_sec_loop
       decfsz    CounterA,1
       goto    delay_10_sec_loop
       decfsz    CounterB,1
       goto    delay_10_sec_loop
       decfsz    CounterC,1
       goto    delay_10_sec_loop
       return

    ; Delay code generated by PiKloops (Mo 2005-Apr-11 13:45:23)
    ; Time Delay = 60.00000000s  with  Osc = 4.00000000MHz
    delay_60_sec
       movlw    D'2'
       movwf    CounterD
       movlw    D'51'
       movwf    CounterC
       movlw    D'146'
       movwf    CounterB
       movlw    D'19'
       movwf    CounterA
    delay_60_sec_loop
       decfsz    CounterA,1
       goto    delay_60_sec_loop
       decfsz    CounterB,1
       goto    delay_60_sec_loop
       decfsz    CounterC,1
       goto    delay_60_sec_loop
       decfsz    CounterD,1
       goto    delay_60_sec_loop
       return

    end

    andref
    andref
    NOVATO
    NOVATO

    DESCRIÇÃO: : Técnico em Eletrônica e informática
    TEMPO DE EXPERIÊNCIA : 3 anos
    Sexo : Masculino
    Número de Mensagens : 2
    Idade : 30
    Cidade/Estado: : Lisboa
    Data de inscrição : 18/02/2015

    Ir para o topo Ir para baixo

    Adicionar botão a PIC16F84 Empty Re: Adicionar botão a PIC16F84

    Mensagem por nagkiller Sáb 21 Fev 2015, 22:16

    Pode adaptar esta função em seu código:

    http://www.pcbheaven.com/picpages/A_Clever_Button/

    Flw...

    _________________
    No mundo só existem 10 tipos de pessoas: as que conhecem binário e as que não conhecem!!!
    nagkiller
    nagkiller
    Moderador do fórum
    Moderador do fórum

    DESCRIÇÃO: : Técnico em Eletrônica e informática
    TEMPO DE EXPERIÊNCIA : Desde 1990
    Sexo : Masculino
    Número de Mensagens : 2824
    Idade : 43
    Cidade/Estado: : Garça - São Paulo
    Humor : Depende
    Data de inscrição : 23/11/2011

    Ir para o topo Ir para baixo

    Adicionar botão a PIC16F84 Empty Re: Adicionar botão a PIC16F84

    Mensagem por Conteúdo patrocinado


    Conteúdo patrocinado


    Ir para o topo Ir para baixo

    Ir para o topo

    - Tópicos semelhantes

     
    Permissões neste sub-fórum
    Não podes responder a tópicos