Para habilitar a verificação de integridade CRC no projeto Assemb, abra o arquivo .asm através do software OS Builder. Remova o caractere de comentário ; das linhas correspondentes à validação. Esta configuração padrão aplica a checksum apenas aos comandos da porta serial 4. Caso a comunicação da porta serial 2 também exija validação, será necessário realizar ajustes adicionais no arquivo de configuração .cfg.
O fluxo de implementação da checksum envolve as seguintes etapas lógicas:
- Definição do passo de execução do programa (Step 4).
- Leitura do bloco de dados para o rgeistrador alvo (com comprimento definido em R5).
- Processamento e validação dos comandos de escrita (0x82).
- Processamento e validação dos comandos de leitura (0x83).
Rotinas Utilitárias em Assembly
1. Navegação de Página via Botão
A rotina abaixo verifica o acionamento de um controle de botão na interface DGUS e executa a transição para uma nova página.
;******************************************************************************
; Função: Verifica o acionamento do botão e altera a página ativa.
; Comando de mudança: 5A A5 07 82 0084 5A01 0001 (Muda para página 0x01)
;******************************************************************************
VerificarBotaoPagina:
LDWR R0, 1004H ; Endereço do controle de retorno do botão na interface DGUS
MOVXR R20, 1, 1 ; Lê o valor do botão
IJNE R20, 0, SairVerificacao
IJNE R21, 1, SairVerificacao
LDWR R20, 5A01H ; Cabeçalho do comando de mudança de página
LDWR R22, 0001H ; ID da página de destino (Página 1)
LDWR R0, 0084H ; Endereço do registrador de controle de página
MOVXR R20, 0, 2 ; Envia o comando para a tela
; Limpa o buffer do botão para evitar acionamentos repetidos
LDWR R0, 1004H
LDWR R20, 0000H
MOVXR R20, 0, 1
SairVerificacao:
RET
2. Rotina de Atraso Curto
Implementação de um ciclo de espera baseado em decremento de registradores para operações que exigem temporização rápida.
;******************************************
; Rotina de Atraso Curto
;********************************************
AtrasoCurto:
LDWR R60, 80 ; Contador externo do loop de atraso
LoopAtraso:
DEC R61, 0, 1 ; Decrementa contador interno
IJNE R61, 0, LoopAtraso
DEC R60, 0, 1 ; Decrementa contador externo
IJNE R60, 0, LoopAtraso
RET
3. Sincronização com Inicialização do Escravo
Garante que o dispositivo periférico (escravo) tenha concluído seu ciclo de inicialização antes de enviar comandos críticos.
;******************************************
; Aguardar Inicialização do Dispositivo Escravo
;********************************************
AguardarEscravo:
; Lógica de espera para garantir que o nó escravo esteja pronto
LDWR R60, 2000 ; Tempo de espera estendido
LoopEspera:
DEC R61, 0, 1
IJNE R61, 0, LoopEspera
DEC R60, 0, 1
IJNE R60, 0, LoopEspera
RET
4. Envio de Protocolo Customizado via Botão
Transmite uma sequência de bytes personalizada pela porta serial quando um botão específico é pressionado na interface HMI.
;******************************************
; Envio de Protocolo Customizado via Botão
;********************************************
EnviarProtocoloCustom:
LDWR R0, 1600H ; Endereço do controle de botão na DGUS (Valor esperado: 0x005A)
MOVXR R30, 1, 1 ; Leitura do estado do botão
IJNE R30, 00H, FimEnvio
IJNE R31, 5AH, FimEnvio
LDWR R32, CCDDH ; Dados do protocolo customizado a serem transmitidos
COMTXI 0, R32, 2 ; Transmite 2 bytes pela porta serial 0
; Zera o registrador do botão após o envio
LDWR R0, 1600H
LDWR R30, 0000H
MOVXR R30, 0, 1
FimEnvio:
NOP
RET
Ao utilizar controles de toque para despachar instruções 0x82 ou 0x83, é obrigatório invocar as rotinas personalizadas (utilizando CALL seguido do nome da função) tanto nos manipuladores dedicados ("Processar instrução 82" / "Processar instrução 83") quanto no loop principal (MAIN). Adicionalmente, se a validação CRC estiver ativa, as novas rotinas de leitura implementadas devem incluir a lógica de verificação de integridade correspondente.