acionar motor dc

Software e Hardware para linha x51

Moderadores: 51, guest2003, Renie, gpenga

acionar motor dc

Mensagempor backhar » 24 Dez 2006 00:08

pessoal, como faço pra acionar um motor dc após uma contagem do timer? por exemplo: após 10 segundos, aciono o motor por 5 segundos. obrigado pela ajuda.
backhar
 
Mensagens: 4
Registrado em: 18 Nov 2006 19:33

Mensagempor Maurício » 24 Dez 2006 03:40

Se a base de tempo é segundos, programe um timer pra te sinalizar um flag a cada segundo.
Dentro do programa principal, monitore este flag.
Quando ele for sinalizado, desvie o programa para uma função ou sub-rotina que incremente uma variável para contar os 5 segundos.
Quando atingir os 5 segundos, sinalize um outro flag!
Monitore este flag, e quando ele for sinalizado, então, seu programa toma as decisões necessárias.

[]'s

RETI.
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor pomboeletronic » 03 Jan 2007 11:50

Faça as contas de qual é o valor que vc precisa carregar o timer para atingir o tempo que vc quer...

por exemplo 500 para 5 segundos, e 1000 para 10 segundos

escolha o modo de operaçao do timer...

se vc escolher recarga altomatica...
*************************************

org 0
ljmp inicio

org 000Bh;timer 0
ljmp func_timer0

org 001Bh;timer 1
ljmp func_timer1

**********************
inicio:

: aqui vc deve escolher omodo de operaçao do timer
.supondo que vc saiba fazer isso,caso tenha dificuldade poste aqui...

;faça o que vc quizer...

setb TR0
sjmp $

func_timer0:

clr tr0; desliga o timer 0
setb p1.0 ;liga o motor
setb TR1
reti

func_timer1:

clr tr1; desliga o timer 1
clr p1.0 ;liga o motor
setb TR0
reti



end

Aqui vc encontra o exemplo do livro do Denys E C Nicolosi
*************************************************************
;Aqui voce so' tera um resumo da aplicacao.Com duas palavras de
; controle se comanda os timers.Elas sao TMOD e TCON. Em TMOD eu programo
; como o timer ira' funcionar :modo 0,1,2,ou 3;ainda defino nesta palavra
; TMOD se o timer ira' contar pulsos externos ou contara' da base de tempo
; interna.Defino finalmente nesta,se o timer ficara' sujeito a disparo
; por interrupcao.Sao quatro bits para cada timer de programacao com fim
; a se utilizar dois bits para determinar o modo de operacao(M1,M0);um
; bit de definicao de interrupcao (GATE) e um bit para se definir se o
; timer ira' se basear em base de tempo interna ou contagem de eventos ex-
; ternos(C/T).Como temos dois timers disponiveis ,temos quatro bits para
; cada timer totalizando os oito bits disponiveis na palavra. Em TCON eu
; posso ligar o timer,como tambem verificar se a contagem ja chegou ao ma-
; ximo.Sao dois bits para cada timer para estas duas funcoes(TR=liga,
; TF=chegou ao fim).Os outros quatro bits desta palavra tem outra funcao
; que sera' visto no programa de interrupcao:

; TMOD
; '''''''''''''''''''''''''''''''''''''''''''''''''''''''
; GATE1 C/T1 M1.1 M0.1 GATE0 C/T0 M1.0 M0.0
; --------------------------- ------------------------
; TIMER 1 TIMER 0


; TCON
; '''''''''''''''''''''''''''''''''''''''''''''''''''''''
; TF1 TR1 TF0 TR0 XX XX XX XX
; ------------ ---------- -----------------------
; TIMER1 TIMER0 NAO TEM APLICACAO NO TIMER


; Os modos de contagem sao :
;
; M1 M0

; MODO 0 0 0 ,conta ate' 13 bits

; MODO 1 0 1 ,conta ate' 16 bits

; MODO 2 1 0 ,conta ate' 8 bits com recarga automatica do numero

; MODO 3 1 1 ,conta" evento externo" por "tempo interno",utilizando

; neste caso parte do timer 1 para esta contagem "even-

; tos por tempo", alem de usar o timer 0 todo.




; Para se carregar os valores de contagem se utiliza dos registradores cha-
; mados por TH,"Timer High" e TL,"Timer Low", um par deles para cada timer,
; isto e'. TH1/TL1 e TH0/TL0.E' neles que eu carrego o valor inicial de
; contagem desejada ,onde o contador ira' incrementando seu valor ate' che-
; gar no maximo de contagem,onde ai' o timer nos avisara' fazendo o bit
; TF=1 que fica na palavra TMOD.
; Em resumo: cada timer tem sua programacao em TMOD,seu controle em TCON
; e sua carga inicial de contagem em THigh e TLow, que sao dois registra-
; dores para cada timer ter seu valor inicial de contagem.
; Na contagem da base de tempo interna, o timer pega a frequencia do clock
; do Micro e divide por 12 antes de contar.(Ex clock 12MHz => 1microseg.)
; Cada vez que a contagem chega ao maximo eu tenho que recarregar os valo-
; res de TH eTL de novo.So' no modo 2 e' que eu nao preciso fazer isto,
; pois a recarga e' automatica.


; Ex. Programar timer 0 como contador de 16 bits para contagem de um total
; de 20000 pulsos do clock interno do Micro .O cristal deste Micro roda a
; 12MHz.Isto e', eu vou contar um total de 20 Milisegundos.(Certo?).Neste
; exemplo eu nao uso interrupcao para avisar o Micro que ja' chegou no
; fim de contagem,i.e',eu faco o Micro ficar "esperando" o contador termi-
; nar a contagem,que nao e' a melhor opcao.No segundo ex. vai se interrom-
; per o Micro pelo Timer,que e' o ideal,pois o Micro ficara' livre para
; fazer outras tarefas enquanto o Timer conta.

; Ex1: Timer nao interrompe o Micro.OBS: Como este programa se inicia em
; 000Fh,voce deve forcar o "PC" ir para este ponto de memoria,senao
; nao se conseguira' simular o exercicio.

;label instr operando;comentarios
;***** ***** ******** ***************************************

org 000Fh ;comeco este software depois da interrupcao
;que se vai gerar no segundo ex.(EX2) para nao
;ter conflito de compilacao entre este programa
;e o que vem a seguir, que usa a interr. do
;Timer 0 que esta' em 000Bh.

mov ie,#00000000b ; Sem interrupcao alguma.

mov TMOD,#10h ;programoTMOD,TIMER1,para modo 1
;Isto e',TMOD=0000 0001,ou M1=0,M0=1
;e ainda contagem interna,pois C/T=0

mov TH1,#high(65535-20000) ;Ao inves de fazer as contas na
;mao,deixo o compilador fazer
;para mim.

mov TL1,#low(65535-20000) ;Nestas duas instrucoes eu carreguei
;a parte alta do numero 45535 em THigh
;e a parte baixa em TLow,criando um
;contador de 16 bits que contara' de
;45535 ate' 65535,dando o total de
;20000 contagens

setb TR1 ;Ligo o timer 1.E' um bit da palavra TCON
;que no caso acionei via "Bit" ao inves de
;via "Byte".(Veja a "palavra" acima no texto).

JNB TF1,$ ;Aqui o Micro fica "esperando" a contagem fi-
;nalizar,atraves do teste do Bit TF1, que e'
;o indicador de "Contagem Estourada".

CLR TR1 ;O contador ja' contou,entao desligo-o atraves
;do bit TR1.

CLR TF1 ;Tenho que tomar cuidado par "desligar " o Flag
;de aviso de estouro de contagem,senao na pro-
;xima vez de usa-lo ele ja' estara' setado e fa-
;ra'confusao,pois voce ira' testa-lo se ele foi
;para "1" e ele ja'esta' em "1".




; Ex2: Timer interrompe o Micro .Comece analizando o software pelo
; "org 100h" para poder estuda-lo.(Faca PC=100h)

;label instr operando;comentarios
;***** ***** ******** ***************************************
;__________________________________________
ORG 0BH ;TIMER0 (ET0) -Servico de interrupcao do TIMER0

CLR TR0 ;O contador ja' contou,entao desligo-o atraves
;do bit TR0.Observe que eu nao fiz aqui a rotina
;"Clear TF0",pois a interrupcao automaticamente faz
;isto para mim.(So' no caso de Interrupcao).

reti ;Retorno de Interrupcao
;____________________________________________

org 100h ;comecei o programa em 100h

inicio: mov ie,#10000010B ;TIMER0 (ET0) pode pedir interrupcao.

mov ip,#2 ;TIMER0 max prioridade

mov TMOD,#01h ;programoTMOD,TIMER0,para modo 1
;Isto e',TMOD=0000 0001,ou M1=0,M0=1
;e ainda contagem interna,pois C/T=0

mov TH0,#high(65535-20000) ;Ao inves de fazer as contas na
;mao,deixo o compilador fazer
;para mim.

mov TL0,#low(65535-20000) ;Nestas duas instrucoes eu carreguei
;a parte alta do numero 45535 em THigh
;e a parte baixa em TLow,criando um
;contador de 16 bits que contara' de
;45535 ate' 65535,dando o total de
;20000 contagens

setb TR0 ;Ligo o timer 0.E' um bit da palavra TCON
;que no caso acionei via "Bit" ao inves de
;via "Byte".(Veja a "palavra" acima no texto).

Mov A,#00 ; Zera A

loop: INC A ;Incrementa A enquanto o Timer fica contando.

sjmp loop ;Veja que eu nao estou "esperando" o Timer
; contar eu estou fazendo outra coisa (Incre-
;mentando "A" neste exemplo) ate' que o Timer
;estoure a conta. Ai' eu atendo a sua inter-
;rupcao, e depois, eu retorno da interrupcao
;(RETI),voltando ao meu antigo servico que era
;incrementar" A".

END
"Nós nos transformamos naquilo que praticamos com frequência.
A perfeição,portanto, não é um ato isolado. É um hábito".
Aristóteles
Avatar do usuário
pomboeletronic
Nibble
 
Mensagens: 67
Registrado em: 04 Dez 2006 14:44

Mensagempor backhar » 11 Jan 2007 09:54

Valeu, vou simular aqui...qualquer duvida posto aqui novamente. Obrigado, Haroldo
backhar
 
Mensagens: 4
Registrado em: 18 Nov 2006 19:33

Mensagempor brasilma » 11 Jan 2007 10:20

Depois da aula do Alan só resta dizer: não esqueça de por um transistor de drive no pino de saída!
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra


Voltar para 8051

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x