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 Philips 50pug6654/78 sem imagem
Adicionar botão a PIC16F84 EmptyHoje à(s) 16:02 por SEBCICM

» PS2 Slim 90k testar entradas do memory card
Adicionar botão a PIC16F84 EmptyHoje à(s) 11:51 por gamemaniaco

» Procuro a placa lateral do sistema de som Sony MHC-GTX88 e Ci BD3451KS
Adicionar botão a PIC16F84 EmptyHoje à(s) 10:16 por Silas Silva Nogueira

» Caixa de Som Amplificada CSR 4000A Som Distorcido e Pouca Potência!!!
Adicionar botão a PIC16F84 EmptyHoje à(s) 08:18 por jailton da silva santos

» Tv lcd,marca Aoc, modelo- LE 39D0330 -defeito,só liga depois de um tempo(quando aquece)
Adicionar botão a PIC16F84 EmptyHoje à(s) 08:06 por jailton da silva santos

» fonte taramps tef 60 amperes ci estourado
Adicionar botão a PIC16F84 EmptyOntem à(s) 19:27 por antonio carlos bitti

» [Resolvido] TV PLASMA SAMSUNG PL51F4900AG Não liga , led stand by piscando ( RESOLVIDO )
Adicionar botão a PIC16F84 EmptyOntem à(s) 13:28 por Paranista

» TV LG MODELO 42LB5600 ACENDE O LED MAS NÃO LIGA
Adicionar botão a PIC16F84 EmptyQua 20 Nov 2024, 18:27 por Tales g

» TV STI DL3270 A W , sem audio
Adicionar botão a PIC16F84 EmptyQua 20 Nov 2024, 15:02 por valdircp

» Compro placa principal da LG 42lh45ed ou 42lh40ed
Adicionar botão a PIC16F84 EmptySeg 18 Nov 2024, 11:22 por Paulo Costa II

» Som Philips fw c 505 Ajuda entender o esquema
Adicionar botão a PIC16F84 EmptySáb 16 Nov 2024, 10:03 por nagkiller

» (Resolvido) AIWA NSXF959 SEM SOM MÉDIOS AGUDOS
Adicionar botão a PIC16F84 EmptySáb 16 Nov 2024, 00:31 por ZACREAL

» como descartar TRC
Adicionar botão a PIC16F84 EmptySex 15 Nov 2024, 08:32 por jailton da silva santos

» cliente que não busca os aparelhos consertados, o que fazer
Adicionar botão a PIC16F84 EmptySex 15 Nov 2024, 00:59 por MARIO Y. SEGAWA

» compro placa pricipal tv lg 50pb560
Adicionar botão a PIC16F84 EmptyQua 13 Nov 2024, 11:11 por Eletronica Manoel

» Modulo Taramps t800.1 com os resistores r32 e r5 torrados
Adicionar botão a PIC16F84 EmptySeg 11 Nov 2024, 10:41 por prisma eletronica

» Akai AA-A35 Seletor de Tensão
Adicionar botão a PIC16F84 EmptySeg 11 Nov 2024, 08:34 por city2010

» [RESOLVIDO] TV LCD UN50FH5303G Componentes danificados
Adicionar botão a PIC16F84 EmptySeg 11 Nov 2024, 00:54 por nagkiller

» TV PANASONIC TC- 32A400B Imagem travando
Adicionar botão a PIC16F84 EmptyDom 10 Nov 2024, 16:01 por ramon figueiredo

» ATENÇÃO de todos os usuários da 2002! (Nova regra).
Adicionar botão a PIC16F84 EmptyDom 10 Nov 2024, 12:00 por robsonseixas

» Microondas MEF-41 Eletrolux, não acende luz da porta quando abre, e quando fecha não liga
Adicionar botão a PIC16F84 EmptySex 08 Nov 2024, 22:30 por joaquimrosadesouza

» Caixa som Ciclotron mult 500 Preciso do esquema
Adicionar botão a PIC16F84 EmptySex 08 Nov 2024, 21:34 por prisma eletronica

» Pessoal tenho placa barato.
Adicionar botão a PIC16F84 EmptySex 08 Nov 2024, 20:47 por francisco carlos de jesus

» PLACA PWM dos Módulos Roadstar RS-10000D Earthkaque e RS-6800D Agressive SPL
Adicionar botão a PIC16F84 EmptySex 08 Nov 2024, 19:23 por NITRO

»  Projetor LG BS 275 Liga e logo da mensagem de cooler bloqueado
Adicionar botão a PIC16F84 EmptySex 08 Nov 2024, 13:05 por Paranista

» Cd Player Carrossel Sony - Não fecha a gaveta nem gira o carrossel
Adicionar botão a PIC16F84 EmptyQui 07 Nov 2024, 14:15 por Denisson Ventura

»  OU O FÓRUM ACABOU OU NINGUÉM PARTICIPA DO FÓRUM MAIS.
Adicionar botão a PIC16F84 EmptyQui 07 Nov 2024, 12:09 por Paranista

» TV PHILCO TP1452N TELA ESCURA
Adicionar botão a PIC16F84 EmptyQua 06 Nov 2024, 17:36 por jailton da silva santos

» TV LED LE3256(A)w dados da flash Resolvido
Adicionar botão a PIC16F84 EmptyQua 06 Nov 2024, 12:12 por everardes

» Procuro esquema elétrico da fonte TV lg 42lb5800 EAX65423701(2.1)
Adicionar botão a PIC16F84 EmptySeg 04 Nov 2024, 12:22 por joaquimrosadesouza

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

#finofliperama, adamoa1

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 : 31
    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 : 2997
    Idade : 44
    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 : 31
    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 : 2997
    Idade : 44
    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