Laboratório pic16f628a
3.1. (1,0 ponto) Crie um programa que verifique se a posição de memória 25H possui um valor diferente de 0. Se isso for verdade, some o conteúdo dessa posição com a constante 37 e salve o resultado na posição 26H.
#INCLUDE
ORG 00H GOTO INICIO
INICIO
CLRW MOVF 25H,F BTFSS STATUS,Z GOTO DIF_ZERO
DIF_ZERO: MOVF 25H,W ADDLW .37 MOVWF 26H
END
3.2. (1,5 pontos) Elabore um programa que verifique se a posição de memória 30H possui o valor 1EH. Se isso for verdade, some o conteúdo dessa posição com o conteúdo da posição 31H e salve o resultado na posição 32H. Caso contrário, zere a posição 32H.
#INCLUDE
ORG 00H GOTO INICIO
INICIO
CLRW MOVLW 1EH XORWF 30H,W BTFSS STATUS,Z GOTO DIFERENTE GOTO IGUAL
IGUAL: MOVWF 30H ADDWF 31H,W MOVWF 32H
DIFERENTE: CLRF 32H
END
3.3. (4,5 pontos) Escreva um código que avalie o seguinte polinômio: Y(X) = 11X + K, com K sendo os dois últimos dígitos de sua matrícula (em decimal). Antes efetuar o cálculo, garanta que o resultado está na faixa de valores possíveis (considere X maior ou igual a 0). Teste (simule) seu programa com os valores 10 e 32 para X.
#INCLUDE
X EQU 20 Y EQU 21
ORG 00H GOTO INICIO
INICIO
CLRW MOVF X,W SUBLW .20
BTFSS STATUS,C GOTO FIM BCF STATUS,C RLF X,F RLF X,W RLF X,W ADDWF X,W ADDLW 30 MOVWF Y
FIM:
GOTO FIM
END
3.4. (3,0 pontos) Dado um valor contido na posição de memória DADO e uma posição chamada FLAGS, na qual o bit 7 indica a paridade ímpar de DADO, faça um