Escolar Documentos
Profissional Documentos
Cultura Documentos
Centro de Tecnologia
Departamento de Engenharia Elétrica
Disciplina de Microcontroladores
Semestre 2020.2
Prática 04
Fortaleza, 24/01/2021
Conteúdo
1. Para esta questão, foi habilitada a comunicação serial no registrador RCSTA, e o
registrador TXSTA responsável pelas configurações de transmissão, foi configurado para,
9600 de baud rate, 8 bits, sem paridade, 1 bit de start e 1 bit de parada. Logo em
seguida, foi criado uma sub-rotina de atraso de 10 milissegundos, dentro de um loop
infinito, que tem como função atrasar o envio do caractere "A"por 10 milissegundos, com
isto, a função do programa é enviar o caractere "A"(equivalente binário é: 01000001), a
cada 10 milissegundos pela transmissão serial.
1
2. O caso da segunda questão, é apenas fazer uma alteração do código desenvolvido
da primeira questão, onde é inserido um botão, que foi escolhido pra ser inserido no
PORTB, pino 0, e dependendo do estado desse botão, troca o envio do caractere "A"para
o caractere "X", de forma detalhada, quando o estado do botão for 0, continua enviando
o caractere "A"a cada 10 milissegundos, quando o estado do botão for 1, envia o caractere
"X"a cada 10 milissegundos.
2
Figura 2: Sinal no osciloscópio mostrando o envio serial do caractere A
3
4
3. Inicialmente apenas configuramos os registradores para habilitar a interrupção serial
e o programa principal fica em loop, enquanto todo o processamento é realizado na inter-
rupção da recepção serial. Utilizamos os valores dados pelo datasheet para configurar o
baud rate da comunicação serial.
ORG 0X0000
GOTO START
ORG 0X0004
GOTO INT_USART
START
BANKSEL TRISB
MOVLW B’00111111’
MOVWF TRISB
MOVLW B’00100010’ ;LOW SPEED MODE
MOVWF TXSTA
MOVLW B’00100000’; APENAS INT RX
MOVWF PIE1
MOVLW D’15’
MOVWF SPBRG ; BAUD RATE 9600
BANKSEL INTCON
MOVLW B’11000000’
MOVWF INTCON
MOVLW B’10010000’
MOVWF RCSTA
LOOP
GOTO LOOP
INT_USART
5
BCF PIR1,RCIF
MOVFW RCREG
MOVWF RXR
MOVLW ’A’
SUBWF RXR, W
BTFSC STATUS, Z
BSF LD1 ;ACENDE LED1
MOVLW ’Z’
SUBWF RXR, W
BTFSC STATUS, Z
BCF LD1; APAGA LED1
MOVLW ’S’
SUBWF RXR, W
BTFSC STATUS, Z
BSF LD2; ACENDE LED2
MOVLW ’X’
SUBWF RXR, W
BTFSC STATUS, Z
BCF LD2 ;APAGA LED2
RETFIE
END
6
ORG 0X0000
GOTO START
ORG 0X0004
GOTO INT_USART
START
BANKSEL TRISB
MOVLW B’00111111’
MOVWF TRISB
MOVLW B’00100010’ ;LOW SPEED MODE
MOVWF TXSTA
MOVLW B’00100000’; APENAS INT RX
MOVWF PIE1
MOVLW D’15’
MOVWF SPBRG ; BAUD RATE 9600
BANKSEL INTCON
MOVLW B’11000000’
MOVWF INTCON
MOVLW B’10010000’
MOVWF RCSTA
LOOP
GOTO LOOP
INT_USART
BCF PIR1,RCIF
MOVFW RCREG
MOVWF RXR
MOVLW ’A’
SUBWF RXR, W
BTFSC STATUS, Z
BSF LD1 ;ACENDE LED1
MOVLW ’Z’
SUBWF RXR, W
BTFSC STATUS, Z
BCF LD1; APAGA LED1
MOVLW ’S’
SUBWF RXR, W
BTFSC STATUS, Z
BSF LD2; ACENDE LED2
MOVLW ’X’
SUBWF RXR, W
BTFSC STATUS, Z
BCF LD2 ;APAGA LED2
MOVLW ’K’
SUBWF RXR, W
7
BTFSC STATUS, Z
GOTO PRINT_LUAN_HERYSSON
END_INT
RETFIE
PRINT_LUAN_HERYSSON
MOVLW STRING
CALL PRINT
RETFIE
;========================================================
GET_CHAR
MOVFW POC
MOVWF PRT
MOVFW PTB ; PONTEIRO DA POSIÇÃO DA STRING
ADDWF PRT, F
MOVFW PRT
MOVWF PCL
END_TABLE
MOVWF PAV
8
INCF PAV, F
DECF PAV, F
BTFSC STATUS, Z
BSF FET ;END TABLE
RETURN
WAIT_TX
BTFSS PIR1, TXIF
GOTO WAIT_TX
BCF PIR1, TXIF
RETURN
;========================================================
STRING
RETLW LF
RETLW CR
RETLW ’L’
RETLW ’U’
RETLW ’A’
RETLW ’N’
RETLW ’’
RETLW ’’
RETLW ’’
RETLW ’H’
RETLW ’E’
RETLW ’R’
RETLW ’Y’
RETLW ’S’
RETLW ’S’
RETLW ’O’
RETLW ’N’
RETLW ’ !’
RETLW ’ !’
RETLW ’’
RETLW ’:’
RETLW ’)’
RETLW ’0’
RETLW LF
RETLW CR
RETLW 0
END