Página Anterior/Próxima Página
3 de 4 - Exemplos:
Será apresentado um programa de um relógio de horas, minutos, segundos e centésimos de segundos.
Programa:
hora equ 0h
min equ 1h
seg equ 2h
cent equ 3h
;
ajmp INICIO
org 11
call relogio
org 30
INICIO: MOV IE,#82h
MOV TMOD,#1h
MOV TH0,#FCh
MOV TL0,#17h
SETB TR0
relogio: clr c
mov a,cent
inc a
da a
mov cent,a
jc inc_seg
jmp fim
inc_seg: clr c
mov a,seg
inc a
da a
mov seg,a
cjne a,#60h,fim
mov seg,#0
mov a,min
inc a
da a
mov min,a
cjne a,#60h,fim
mov min,#0
mov a,hora
inc a
da a
mov hora,a
cjne a,#24h,fim
mov hora,#0
fim: reti
Pode-se perceber a função equ no começo do programa que serve para atribuir um nome a um determinado registrador, os endereços que são usados no exemplo são dos registradores RX, para se fazer a simulação se age da mesma forma do que no exemplo anterior. O programa foi criado para contar com a velocidade de 1 ms que é o tempo de 1 centésimo de segundo, o microcontrolador na freqüência de 12 MHz demora 1 us para cada contagem, então se ajusta um de seus temporizadores pra contar 1000 vezes e atualizar a contagem do relógio, no caso o temporizador 0 é configurado para modo 1 que é a forma de 16 bits, se coloca o valor inicial dele de FC17h.
Se for observado a memória Sfr se tem algo semelhante a isso:
Pode se reconhecer o nome de cada valor através do endereço como os registradores IE, TMOD, TH0, TL0 e outros. Existe mais um recurso no simulador, indo no menu em View e clicando-se em Hardware se encontra as seguintes opções:
Será explicado mais detalhes a seu respeito, no momento escolhe-se a opção Timer 0, isso fará aparecer uma janela referente ao Timer 0 que mostra sua configuração, o valor corrente de contagem seu estado atual e valor de registradores relacionados a ele, Timer 1 funciona de maneira idêntica.
Na linha inferior do programa aparece a contagem de tempo de Execução de programa, para se checar se a duração da contagem do programa esta correto se roda as instruções até o momento que tr0 que é o bit de habilitação do timer é setado, então vai no menu em Debug e tecla-se em Reset Timer, ele será zerado, então se roda o programa até o fim da interrupção, a visualização do tempo é um pouco inconveniente pois ele some quando se coloca o cursor sobre a teclas de controle mas isso é facilmente contornado usando a tecla F8 em vez delas.
Página Anterior/Próxima Página