Bacharel Ciencia Da Computação
Artigo: Bacharel Ciencia Da Computação. Pesquise 861.000+ trabalhos acadêmicosPor: isabelatres • 3/10/2013 • 2.108 Palavras (9 Páginas) • 441 Visualizações
DECLARAÇÃO DE VARIÁVEIS
; *************************
CBLOCK 0X20 ;0X20 É O INÍCIO DA MEMÓRIA RAM
T1 ;T1 NO ENDEREÇO 0X20
T2 ;T2 NO ENDEREÇO 0X21
VAR_7SEG
VAR_ASCII
VAR_NUM
ENDC
DECLARAÇÃO DE constantes
; *************************
#DEFINE BTN1 PORTA,0 ;DEFINE QUE BTN1 = PORTA,0
#DEFINE LIGA BSF PORTA, 6
#DEFINE DESL BCF PORTA, 6
#DEFINE B_SINC PORTA, 0
#DEFINE MON PORTB, 7
#DEFINE ERRO PORTB, 5
; ROTINAS GERAIS.
; ******************************************************************************
1 PRINCIPAL (inicio da rotina)
2 BTFSS PIR1,RCIF ;Verifica (DIGA-SE TESTA) se foi digitado alguma coisa (ele fica em loop caso não digitado, porque se nada for digitado, ele vai pra rotina de baixo, no caso volta para a principal) ATENÇÃO, SUPONHAMOS QUE DIGITAMOS VALOR 5 foi digitado? SIM, O VALOR 5, ENTÃO SE FOR DIGITADO, PULE UMA LINHA, ENTÃO ELE VAI PULAR A GOTO PRINCIPAL, MUITA ATENÇÃO, GUARDE ESTE VALOR (5, CINCO, FIVE) LEMBRE-SE DELE
3 GOTO PRINCIPAL ;pula este caso acima for digitado.
4 CALL RX_SERIAL ;Chama a rotina RX_SERIAL (linha 12) ; OBS: a função call, é diferente de GOTO, o CALL chama a rotina, e pode retornar um valor, e retonar exatamente no ponto que parou, no caso na linha 4 .
5 CALL TX_SERIAL ; retornou aqui da rotina RX_SERIAL, AGORA CHAMA A TX_SERIAL
6 CALL ARMAZENA ; Retornou aqui da rotina TX_serial, agora chama a rotina ARMAZENA
7 CALL ASCII_NUM ;Retornou de armazena, agora vai transformar o valor para numero VAI PARA ROTINA ASCII_NUM
8 CALL NUM_7SEG ;Retorna da ascii_num e irá setar agora qual o valor digitado, vai para a rotina NUM_7SEG
9 MOVWF VAR_7SEG ;Ele retonar da rotina NUM_7SEG com o valor ja atribuido à W lembram? ("RETLW") e atribui esse valor à F
10 CALL DISPLAY ; Chama a rotina display
11 GOTO PRINCIPAL
12 RX_SERIAL (rotina RX_SERIAL) esta rotina utiliza uma porta serial para receber um valor, ela não sera transmitida ainda, será feita na rotina TX_SERIAL
13 MOVF RCREG,W ;MOVE O VALOR DIGITADO para o acumulador W
14 MOVWF VAR_ASCII ;Move do acumulador para uma variavel criada laaaaa em cima em "DECLARAÇÃO DE VARIÁVEIS E CONSTANTES, VOU DEIXAR COM A COR AZUL"
15 RETURN ;RETORNA DO PONTO QUE PAROU NA ROTINA PRINCIPAL, COM O VALOR DIGITADO E GUARDADO NA MEMORIA. RETORNA LINHA 4
16 TX_SERIAL (rotina TX_SERIAL) esta rotina transmite da serial para outro lugar selecionado no caso na linha 18 iremos verificar
17 MOVF VAR_ASCII,W ;move o valor da variavel VAR_ASCII (digitado anteriormente na rotina principal, depois para rx_serial, agora estamos aqui =P) para o acumulador W
18 MOVWF TXREG ;Move o valor do acumulador W para TXREG (registrador de transmissão)
19 BTFSS PIR1,TXIF ;Verifica se foi transmitido, se sim ele pula a linha de baixo
20 GOTO $-1 ;se não foi transmitido, retorna para a função acima, no caso a linha 19
21 RETURN ;Retorna no ponto em que parou na rotina principal, linha 5
22 ARMAZENA ( ROTINA ARMAZENA), serve para armazenar o valor digitado antes de enviar para o display
23 MOVF VAR_ASCII,W ;Move o valor da variavel VAR_ASCII para o acumulador W
24 MOVWF INDF ;Move o valor do acumulador W para o registrador INDF, o INDF não é um registrador fisico, ele "segura" vamos dizer assim o valor que for mandado em FSR, no endereço correspondente
25 INCF FSR,F ;INCrementa o valor do registrador FSR,F
26 MOVLW 0X61 ; move o valor 0x61 para o acumulador W
27 XORWF FSR,W ; Esta instrução efectua o OR exclusivo (XOR) entre o valor contido no acumulador W e o valor contido no registo endereçado pelo parâmetro
28 BTFSS STATUS,Z ;pula 1 se o valor de status,z for 1, neste caso ele esta testando se existe um valor de endereço no registrador. se tiver ele vai para a return (linha 29) senão ele vai setar um endereço padrão, linha 30
29 RETURN ;retorna para a rotina principal caso não for ele pula para a debaixo.
30 MOVLW 0X30 ;seleciona o endereço 0x30 e envia para o acumulador
31 MOVWF FSR ;adiciona o 0x30 como endereço primario
32 RETURN ;retorna para a rotina principal
33 ASCII_NUM ;transforma o valor digitado em ASCII
34 MOVLW .48 ;Move o valor decimal .48 para o acumulador W
35 SUBWF VAR_ASCII,W ;Esta instrução subtrai o valor contido no registo W do valor contido no registo endereçado pelo parâmentro f.
36 MOVWF VAR_NUM ;move do acumulador para a variável
...