1. Faa um programa onde uma chave do tipo push-button, conectando o pino P1.7 ao terra, usada para definir o sentido de rotao de 8 LEDs conectados porta P2. Com a chave desligada os LEDs so rotacionados para a esquerda; com a chave ligada os LEDs so rotacionados para a direita.
ORG 00H LJMP INICIO ORG 30H INICIO: ESQ: MOV A,#04H MOV P2,A RL A JB P1.7, ESQ SJMP DIR DIR: MOV P2,A RR A JNB P1.7, DIR SJMP ESQ END ;Carrega o acumulador com o valor 04h (poderia ser outro valor) ;Transfere o conteudo do acumulador para a porta P2 ;Rotaciona A para a esquerda ;Desvia para a subrotina ESQ caso o bit P1.7 esteja setado ;desvia para a subrotina DIR ;Transfere o conteudo do acumulador para a porta P2 ;Rotaciona A para a direita ;Desvia para a subrotina ESQ caso o bit P1.7 esteja zerado ;desvia para a subrotina ESQ ;Termina o programa ;Indica que a proxima instruo ser alocada no endereo 00h ;Desvia para o incio do programa
2. Faa um programa onde uma chave do tipo push-button, conectando o pino P1.7 ao terra, usada para iniciar/parar a rotao de 8 LEDs conectados porta P2. Outra chave conectando o pino P1.6 ao terra usada para definir o sentido de rotao. Com a chave P1.6 desligada os LEDs so rotacionados para a esquerda; com a chave ligada os LEDs so rotacionados para a direita.
ORG 00H LJMP INICIO ORG 30H MOV A,#04H ;Indica que a proxima instruo ser alocada no endereo 00h ;Desvia para o incio do programa
INICIO: GIRA:
JB P1.6, ESQ JNB P1.6, DIR ESQ: MOV P2,A RL A JNB P1.7, PARA JB P1.6, ESQ SJMP DIR MOV P2,A RR A JNB P1.7, PARA JNB P1.6, DIR SJMP ESQ JNB P1.7, $ SJMP GIRA
;Desvia para a subrotina ESQ caso o bit P1.6 esteja setado ;Desvia para a subrotina DIR caso o bit P1.6 esteja zerado ;Transfere o conteudo do acumulador para a porta P2 ;Rotaciona A para a esquerda ;Desvia para a subrotina PARA caso o bit P1.7 esteja zerado ;Desvia para a subrotina ESQ caso o bit P1.6 esteja setado ;desvia para a subrotina DIR ;Transfere o conteudo do acumulador para a porta P2 ;Rotaciona A para a DIREITA ;Desvia para a subrotina PARA caso o bit P1.7 esteja zerado ;Desvia para a subrotina ESQ caso o bit P1.6 esteja setado ;desvia para a subrotina ESQ ;Loop infinito (para de rotacionar) ;desvia para a subrotina GIRA ;Termina o programa
DIR:
PARA:
END
V2:
INICIO:
ORG 30H ;define que a proxima instruo est no endereo 30h MOV SP,#2FH ;define o endereo inicial da pilha como 2Fh MOV DPTR,#LISTA ;carrega DPTR com o endereo inicial da LISTA (#100h neste caso) MOV A,#0FFH INC A PUSH ACC MOVC A,@A+DPTR MOV P1,A POP ACC CJNE A,#03H,V1 SJMP V2 ORG 100H ;carrega o acumulador com o valor FFh ;incrementa o valor de A ;guarda o valor de A na pilha ;carrega o acumulador com o valor da posio A+DPTR ;transfere o valor de A para a porta P1 ;retira o valor de A da pilha ;compara A com o valor 03h. Se falso, pula para V1. Se verdadeiro, continua o programa ;desvia para a subrotina V2
V2: V1:
LISTA:
END ;Este programa rotaciona para a esquerda um bit alto entre os pinos p1.0 e p1.3.
5. Nas instrues a seguir, identifique a interrupo habilitada e o tipo de disparo (nvel ou transio).
MOV IE,#81H MOV TCON,#01H SETB EA SETB EX1 SETB EX0 MOV TCON,#04H Interrupo externa 1. Disparo por transio Interrupo externa 0 por nvel e externa 1 por transio
Quando a interrupo externa 0 solicitada, o programa complementa o pino P1.0. Quando a interrupo externa 1 solicitada, o programa complementa o contedo do acumulador e o transfere para a porta P1.
7. Faa um programa onde a interrupo externa 1, por transio, usada para rotacionar os LEDs da porta P2 para a esquerda. So executadas 10 rotaes para a esquerda antes do processamento retornar para um loop infinito.
ORG 00H LJMP INICIO ORG 13H LJMP GIRA INICIO: MOV SP, #2FH MOV IE, #84H MOV TCON, #04H MOV A, #01H MOV R7, #10 SJMP $ MOV P2, A RL A LCALL ATRASO CJNE A, #80H, GIRA DJNZ R7,GIRA MOV P2, A MOV A, #01H MOV R7, #10 RETI
GIRA:
ATRASO: MOV R0, #100 REPETE: MOV R1, #250 DJNZ R1, $ DJNZ R0, REPETE RET END
8. Faa um programa onde a interrupo externa 0, por transio, usada para rotacionar os LEDs da porta P2 para a esquerda e a interrupo externa 1, por transio, usada para rotacionar os LEDs para a direita. So executadas 10 rotaes antes de o processamento retornar para um loop infinito. A interrupo externa 1 tem prioridade alta.
ORG 00H LJMP INICIO ORG 03H LJMP ESQ ORG 13H LJMP DIR INICIO: MOV SP, #2FH MOV IE, #85H MOV TCON, #05H SETB PX1 SJMP $ MOV A, #01H MOV R7, #2 MOV P2, A RL A LCALL ATRASO CJNE A, #80H, V1 DJNZ R7,V1 MOV P2, A RETI MOV A, #80H MOV R6, #2 MOV P2, A RR A LCALL ATRASO CJNE A, #01H, V2 DJNZ R6,V2 MOV P2, A RETI
ESQ:
V1:
DIR:
V2:
ATRASO: MOV R0, #100 REPETE: MOV R1, #250 DJNZ R1, $ DJNZ R0, REPETE RET END
A cada trmino da contagem do temporizador 0, o pino P2.0 complementado. Da mesma forma que a cada trmino da contagem do temporizador 1, o pino P2.7 complementado. O programa faz os niveis lgicos dos pinos P2.0 e P2.7 alternarem entre 0 e 1, sendo que a frequncia de oscilao do pino 0 muito menor que a do pino 7, uma vez que a contagem do temporizador 0 leva muito mais tempo para ser terminada.
10. Faa um programa onde o temporizador 0 usado para contar 20.000 pulsos de forma ininterrupta. A cada pedido da interrupo externa zero, por transio, o temporizador para/reinicia e o valor atual da contagem mostrado nas portas P2 (contedo de TH0) e P0 (contedo de TL0).
ORG 00H LJMP INICIO ORG 03H CPL TR0 MOV P2, TH0 MOV P0, TL0 RETI ORG 30H INICIO: MOV SP, #2FH MOV IE, #81H MOV TCON, #01H MOV TMOD, #01H SETB TR0 MOV TH0, #0B1H MOV TL0, #0DFH JNB TF0, $ CLR TF0 SJMP CARREGA END
CARREGA:
11. Faa um programa onde o microcontrolador 8051 transmite uma contagem crescente via serial. O mdulo serial deve ser configurado para operar no modo 1 (assncrono de 8 bits) com taxa de transferncia (baud rate) de 2400 bps. A frequncia de clock 11,0592 MHz.
ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#2FH MOV TMOD, #20H MOV TH1, #0F4H MOV TL1, #0F4H MOV SCON, #40H MOV A, #00H SETB TR1 V1: MOV SBUF, A INC A LCALL ATRASO SJMP V1 MOV R4, #100 MOV R5, #250 DJNZ R5, $ DJNZ R4, V2 RET
ATRASO: V2:
END
12. Faa um programa onde o microcontrolador 8051 recebe dados de um computador, via porta serial, e os envia para a porta P2, usando interrupo. O mdulo serial deve ser configurado para operar no modo 1 (assncrono de 8 bits) com baud rate de 4800 bps. A frequncia de clock 11,0592 MHz.
ORG 00H LJMP INICIO ORG 23H CLR RI MOV P2, SBUF RETI ORG 30H INICIO: MOV SP, #2FH MOV IE, #90H MOV SCON, #40H MOV TMOD, #20H MOV TH1, #0FAH MOV TL1, #0FAH CLR RI MOV P2, #00H SETB REN SETB TR1 SJMP $ END
13. Faa um programa onde o microcontrolador 8051 recebe dados de um computador, via porta serial (modo 1), e os envia para a memria EEPROM externa, a partir do endereo 1000H (A memria EEPROM de 8K, com endereo inicial 0000H). A taxa de comunicao (baud rate) de 9600 bps. A frequncia de clock 11,0592 MHz.
ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP, #2FH MOV SCON, #40H MOV TMOD, #20H MOV TH1, #0FDH MOV TL1, #0FDH MOV DPTR, #1000H MOV A, #00H CLR RI SETB REN SETB TR1 JNB RI, $ MOV A, SBUF CLR RI MOVX @DPTR, A INC DPTR SJMP ESPERA END
ESPERA:
14. Faa um programa onde o microcontrolador 8051 recebe dados de um computador, via porta serial (modo 1), a uma taxa de comunicao (baud rate) de 4800 bps. Se o dado recebido for a letra A os LEDs, acessados atravs do endereo 2000H, so rotacionados para a esquerda; se o dado recebido for a letra B os LEDs so rotacionados para a direita. Qualquer outro caractere recebido ignorado. A frequncia de clock 11,0592 MHz. No mapeamento de memria os LEDs esto localizados na regio que comea no endereo 2000 e vai at o endereo 3FFFH.
ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP, #2FH MOV TMOD, #20H MOV TH1, #0FAH MOV TL1, #0FAH MOV SCON, #40H MOV DPTR, #2000H SETB REN SETB TR1 CLR RI ESPERA: JNB RI, $ MOV A, SBUF CLR RI V2: CJNE A, #41H, V3 MOV A, #01H SJMP ESQUERDA CJNE A, #42H, ESPERA MOV A, #80H SJMP DIREITA
V3:
ESQUERDA: MOVX @DPTR, A RL A LCALL ATRASO CJNE A, #01H, ESQUERDA LJMP ESPERA DIREITA: MOVX @DPTR, A RR A LCALL ATRASO CJNE A, #80H, DIREITA LJMP ESPERA ATRASO: V1: MOV R0,#100 MOV R1,#250 DJNZ R1, $ DJNZ R0, V1 RET
END