Escola de Engenharia Elétrica, Mecânica e de Computação Universidade Federal de Goiás Laboratório de Microprocessadores e Microcontroladores Experimento 4: Motor de Passo e Motor de Corrente Contínua Alunos: Matrícula: Prof. Dr. José Wilson Lima Nerys Goiânia, 2º semestre de 2017
Laboratório de Microprocessadores e Microcontroladores 2 SUMÁRIO 1 Motor de Passo... 3 2 Motor de Corrente Contínua... 4 2.1 Conceitos Básicos... 4 2.2 Variação de Velocidade... 5 2.3 Medição Digital de Velocidade... 6 3 Atividades do Experimento 4... 8 3.1 Atividades de Simulação... 8 3.2 Atividades com o Kit Real... 13
Laboratório de Microprocessadores e Microcontroladores 3 1 Motor de Passo O motor de passo consiste de um estator contendo bobinas que são acionadas usando corrente contínua e um rotor de ímã permanente, que gira a cada mudança das bobinas acionadas. Embora nas figuras a seguir as quatro bobinas sejam mostradas como únicas (concentradas), na prática elas são distribuídas ao longo do estator. Assim, pode-se obter um passo bem pequeno entre um pedaço de bobina e outro. O ângulo de passo típico do motor de passo utilizado aqui é 7,5. As figuras abaixo ilustram, de maneira simplificada, o funcionamento de um motor de passo. Observe que, na figura, uma volta completa do motor é alcançada após percorrer todas as bobinas uma vez. Na prática, uma volta completa é conseguida após uma passagem por todas as partes de cada bobina. Se cada passo for de 7,5, uma volta completa é alcançada com 48 passos. Na Fig. 1 também são mostrados os transistores usados no acionamento e as bobinas concentradas. É mostrada também uma tabela com os comandos que devem ser enviados para a porta de saída (na verdade, dados enviados ao periférico motor de passo) de forma que o motor de passo gire de meio em meio passo e com passo completo. Tabela 1: valores para acionamento do motor de passo - passo completo Passo P3 P2 P1 P0 HEX 1 0 0 0 1 01 2 0 0 1 0 02 3 0 1 0 0 04 4 1 0 0 0 08 5 0 0 0 1 01 Fig. 1: Esquema do motor de passo e tabela de acionamento O circuito da Fig. 1 é o circuito típico utilizado no acionamento de motor de passo, entretanto, há pastilhas integradas que são também utilizadas para essa função. Um circuito integrado que pode ser usado para esse fim é o CI ULN2803A, mostrado na Fig. 2. Trata-se de um conjunto de transistores do tipo darlington, com capacidade de corrente de 500 ma. Cada uma das 4 bobinas do motor é ligada a uma das saídas (OUT) e ao terminal comum (COM), que é conectado à fonte de alimentação do motor de passo, que não precisa, necessariamente, ser a mesma do microcontrolador. Fig. 2: Driver para motor de passo - ULN2803A
Laboratório de Microprocessadores e Microcontroladores 4 2 Motor de Corrente Contínua 2.1 Conceitos Básicos A Fig. 3 mostra o circuito básico de um motor CC, onde os enrolamentos de campo e de armadura são alimentados de forma independente. As expressões básicas também são dadas. Ra Rf E k a Va I E If Vf V a a R a V I a a E RaI k a Fig. 3: Motor de Corrente Contínua O motor de corrente contínua consiste de um enrolamento de campo estacionário e um enrolamento de armadura rotativo. O enrolamento de campo pode ser acionado por corrente contínua, ou ainda consistir de um estator de ímã permanente, não sendo necessário alimentação. A armadura é acionada com corrente contínua através de escovas e um anel comutador. A Fig. 4 mostra um circuito para acionamento do motor de corrente em um único sentido de rotação. Um pulso alto na base do transistor BC548 leva o transistor BD139 à saturação, o que aciona o motor. Um pulso baixo leva esse transistor ao corte, quando então a corrente do motor decresce circulando pelo diodo 1N4001. 12 V 1N4001 P1.1 10 k BC548 BD139 Fig. 4: Driver para acionamento do motor CC num único sentido A Fig. 5 mostra uma configuração denominada de Ponte H, que permite o acionamento em ambos os sentidos de rotação. As chaves A, B, C e D são normalmente transistores do tipo MOSFET ou IGBT. Para o acionamento em um dos sentidos as chaves A e B são acionadas; para o acionamento no sentido contrário as chaves C e D são acionadas. A lógica de acionamento dessas chaves não deve permitir o acionamento simultâneo das chaves A e D e das chaves C e B, o que resultaria num curto-circuito da fonte de alimentação. O driver de acionamento em ponte H usado no laboratório (L298N Diagrama na Fig. 6) permite o acionamento de um motor com corrente de até 1,5 A através de dois pinos de comando e segue a lógica da Tabela 2. É importante observar que os diodos são fundamentais para o retorno da corrente, quando qualquer uma das chaves é desligada. No momento de desligamento das chaves, há energia armazenada nas indutâncias do motor; sem os diodos as chaves poderiam ser danificadas por sobretensão.
Laboratório de Microprocessadores e Microcontroladores 5 A C A C D B D B Fig.5: Driver para acionamento do motor CC em ambos os sentidos Tabela 2: Pinos de controle da ponte H In 1 In 2 Efeito 0 0 Motor parado 0 1 Gira no sentido direto 1 0 Gira no sentido reverso 1 1 Motor parado Figura 6: Diagrama de blocos parcial do L298N 2.2 Variação de Velocidade Uma forma de variar a velocidade do motor CC é variando a tensão de armadura. Uma forma de variar a tensão de armadura é usar modulação PWM, que consiste na definição de um período de acionamento fixo e, dentro desse período, estabelecer um período ligado e outro desligado. A Fig. 7 ilustra esse processo. O motor usado é de 12 V e, portanto, a tensão de alimentação deve variar de zero a 12 V para obter-se variação de velocidade de zero até o valor máximo. Isso é feito chaveando-se um transistor a uma frequência alta, por exemplo, 5 khz, que corresponde a um período de 0,2 ms ou 200 s. T V max V a T ON V max T V max V a Fig. 7: Geração do sinal PWM para controle do motor de contrente contínua Pode-se preferir definir o período como 255 s, por exemplo, o que corresponde a uma frequência de chaveamento de 3,92 khz. A variação de velocidade pode então ser obtida variando-se o período ligado (T ON) de 0 a 255 s, ao mesmo tempo em que o período desligado (T OFF) deve variar de 255 s a 0, para manter constante o período total (T). Essa contagem do período ligado e desligado pode ser feita através de um dos temporizadores do 8051, operando no modo 2 (modo de recarga automática). TON TOFF
Laboratório de Microprocessadores e Microcontroladores 6 O microcontrolador 8051 possui dois temporizadores/contadores, que podem operar em 4 modos diferentes: modo de 13 bits (modo 0), modo de 16 bits (modo 1), modo de 8 bits com recarga automática (modo 2) e 2 modos independentes de 8 bits (modo 3). O modo de recarga automática (modo 2) pode ser usado para gerar o sinal PWM para o controle do motor CC. Nesse modo a contagem é feita através de TL (a primeira contagem começa no valor inicial de TL) e o valor de TH é usado para definir o início da próxima contagem. Se o temporizador começa sempre no valor dado em TL e vai até FFh (255), e sendo T ON = T T OFF, e sendo ainda escolhido T = 255, o procedimento usado no programa é: 1. Para o período ligado faz-se TL = T OFF; dessa forma, o temporizador conta de T OFF até 255, o que corresponde ao período ligado; 2. Para o período desligado faz-se TL = T ON; dessa forma, o temporizador conta de T ON até 255, o que corresponde ao período desligado. 3. No início do programa desliga-se o motor (CLR P2.2 e CLR P2.3) e faz-se TL = T ON = 09H, o que faz com que o temporizador, na primeira contagem já conte o período desligado, que começa em T ON e vai até 255. 4. Após fazer TL = T ON, encontra-se o complemento de T ON (CPL A), ou seja, T OFF, e carrega-se em TH. Dessa forma, a próxima contagem começará em T OFF, o que significa que o temporizador contará o período ligado. 5. Cada vez que a subrotina de controle é executada define-se o próximo valor de recarga, TH. 6. Para aumentar a velocidade aumenta-se o período ligado T ON. Para diminuir aumenta-se T OFF. 2.3 Medição Digital de Velocidade Estão disponíveis no laboratório dois tipos de fotosensores: um com nível lógico normalmente alto e outro com nível lógico normalmente baixo. Os dois modelos são mostrados na Fig. 6. O primeiro tipo foi montado com um circuito auxiliar modulador que diminui a influência da luz ambiente sobre o fotosensor. Esse circuito emite uma luz de cerca de 1 khz, que ao ser refletida satura o fototransistor. É utilizado o decodificador de frequência NE567. O segundo modelo não usa circuito modulador. (a) (b) Fig. 6: Sensor de presença (a) com circuito auxiliar modulador e (b) sem circuito modulador A diferença básica entre os sensores usados, além do circuito de modulação, está no encapsulamento. Em um deles (Fig. 7a) o encapsulamento faz com que o fototransistor fique normalmente cortado (sem presença de luz); ele entra em saturação quando a luz do LED é refletida em um obstáculo. Assim, o sinal de saída V o passa de nível lógico alto para baixo, na presença de um obstáculo. No outro tipo de encapsulamento (Fig. 7b) a luz do LED incide diretamente sobre o fototransistor, fazendo com que ele fique normalmente saturado, ou seja, o sinal de saída V o fica inicialmente em nível lógico baixo; na presença de um obstáculo entre os dois componentes o fototransistor é levado ao corte e o sinal de saída vai para o nível lógico alto.
Laboratório de Microprocessadores e Microcontroladores 7 (a) (b) Fig, 7: (a) fototransistor normalmente cortado e (b) fototransistor normalmente saturado Pode-se fazer uso do fotosensor da Fig. 7(b) para medir a velocidade de um motor de forma digital, associando-se ao fotosensor uma roda com 60 furos (Fig. 8). O sinal resultante do fotosensor, com a rotação da roda de 60 furos, é uma onda quadrada (Fig. 9). Esse sinal pode ser conectado a um dos dois pinos de interrupção. A interrupção deve ser configurada para atuar por transição (na passagem de nível lógico 1 para 0). A cada interrupção o registrador com o número atualizado de pulsos é incrementado em 1.. Fig. 8: conjunto fotosensor/roda de 60 furos Fig. 9: Sinal de saída do sensor de velocidade A medição de velocidade é feita estabelecendo-se um tempo de amostragem, ou seja, um tempo fixo em que o registro de pulsos é lido. Mostra-se a seguir que o fato de ter 60 furos na roda faz com que o número de pulsos registrados por segundo (frequência) seja correspondente à velocidade em rotações por minuto (rpm). 1 rotação/segundo 60 furos/segundo 1 rotação/segundo 60 rotações/minuto 60 rpm 60 furos/s X rpm X furos/s ω (rpm) f (Hz) Um tempo de amostragem menor que 1 segundo pode ser adotado, e é aconselhável em muitas aplicações. Sendo assim, deve-se fazer a devida transformação de número de furos lidos no tempo de amostragem para rotações por minuto.
Laboratório de Microprocessadores e Microcontroladores 8 3 Atividades do Experimento 4 As atividades deste experimento estão divididas em duas categorias: Atividades de Simulação e Atividades no Kit Didático. 3.1 Atividades de Simulação Os programas das tarefas a seguir devem ser digitados e compilados no simulador MCU8051 e executados no simulador do kit didático do microcontrolador 8051. 3.1.1 Operação do Motor de Passo com Inversão de Sentido Complete o programa da Tabela 3 com a subrotina de acionamento do motor de passo no sentido reverso, a partir da subrotina para acionamento no sentido direto. A interrupção externa 1 é usada para definir o sentido de rotação do motor de passo, pela complementação da flag F0. Tabela 3: Inversão do sentido de rotação de motor de passo usando interrupção Rótulo Instrução Rótulo Instrução Rótulo Instrução ORG 00H ESCOLHA: JB F0,REVERSO ATRASO: MOV R0, #200 LJMP INICIO V2: MOV R1, #200 DIO: MOV P2,A DJNZ R1, $ ORG 13H LCALL ATRASO DJNZ R0, V2 CPL F0 RL A LCALL ATRASO SJMP ESCOLHA END CLR IE1 I REVERSO: INICIO: ORG 30H MOV SP,#2FH MOV IE,#84H MOV TCON,#04H MOV A,#11H SJMP ESCOLHA Como funciona o programa da Tabela 3? Qual a finalidade da instrução JB F0,REVERSO? Qual a finalidade da instrução CPL F0?
Laboratório de Microprocessadores e Microcontroladores 9 3.1.2 Motor de Passo Operando com Temporizador O programa dado na Tabela 4 aciona o motor de passo com o temporizador zero no modo 1. O temporizador é usado para contar 1 s. Inicialmente o programa entra em um laço infinito, aguardando o pino P3.2 (há uma chave conectada a esse pino) mudar do nível alto para o nível baixo. Após a chave em P3.2 ser pressionada, o motor gira em um sentido por 10 s; para por 5 s; gira no sentido contrário por 10 s e volta para o laço de espera. Tabela 4: acionamento do motor de passo com temporização Rótulo Mnemônicos Comentários ORG 00H LJMP INICIO ORG 0BH LJMP TEMPO_R7s ; Chama subrotina que conta os tempos de 10 s e 5 s ORG 30H INICIO: MOV SP,#2FH ; Apontador de pilha SP = 2FH MOV IE,#82H ; Habilita interrupção do TEMP0 MOV TMOD,#01H ; Temporizador 0 no modo 1 MOV TH0,#HIGH(19455) ; Contagem de 19455 a 65535 MOV TL0,#LOW(19455) ; 46080 x 1,085 µs = 50 ms MOV R0,#20 ; Contador para fazer 20 x 50 ms = 1 s LIGA: JB P3.2,$ ; Enquanto P3.2=1, aguarda com motor parado CLR TR0 ; Desliga temporizador CLR F0 ; Limpa flag que indica fim de contagem de 10s ou 5s MOV R7,#10 ; Contador para contar 10 s (10 x 1 s) SETB TR0 ; Liga temporizador 0 MOV A,#11H ; Valor inicial do acumulador DIO: MOV P2,A ; P2 recebe o conteúdo de A Motor girando LCALL ATRASO ; Chama subrotina de atraso no sentido RL A ; Rotaciona conteúdo de A para a esquerda direto 10 s JNB F0,DIO ; Se F0 = 0, volta para DIO ; se F0 = 1 (após 10s), próxima linha Motor parado por 5 s CLR TR0 ; Desliga temporizador CLR F0 ; Limpa flag que indica fim de contagem de 10 s ou 5 s MOV R7,#5 ; Contador para contar 5 s (5 x 1 s) SETB TR0 ; Liga temporizador 0 JNB F0,$ ; Espera durante 5 s. Após 5 s, F0 = 1; então vai para próxima linha CLR TR0 ; Desliga temporizador CLR F0 ; Limpa flag que indica fim de contagem de 10s ou 5s MOV R7,#10 ; Contador para contar 10 s (10 x 1 s) SETB TR0 ; Liga temporizador 0 REVERSO: MOV P2,A ; P2 recebe o conteúdo de A Motor girando LCALL ATRASO ; Chama subrotina de atraso no sentido RR A ; Rotaciona conteúdo de A para a direita reverso (10 s) JNB F0,REVERSO ; Se F0 = 0, volta para REVERSO ; se F0 = 1 (10 s), próxima linha SJMP LIGA ; Desvia para o início do programa, para aguardar novo acionamento ATRASO: MOV R6,#150 ; Subrotina de atraso usada no acionamento do motor de passo V1: MOV R5,#250 ; R6 = 150 e R5 = 250 DJNZ R5,$ DJNZ R6,V1
Laboratório de Microprocessadores e Microcontroladores 10 TEMPO_R7s: DJNZ R0,SAI ; Subrotina que conta 5 s e 10 s (definido através de R7) MOV R0,#20 ; Recarrega R0 com valor 20 DJNZ R7,SAI ; Verifica se R7 = 0; Caso não seja, apenas recarrega e sai SETB F0 ; Seta a flag F0 quando chegar ao final da contagem de 5 s ou 10 s SAI: MOV TH0,#HIGH(19455) ; Recarga do temporizador zero para contagem de 46.080 pulsos MOV TL0,#LOW(19455) ; 46080 x 1,085 µs = 50 ms I END Explique como funciona a subrotina TEMPO_R7s e a função do registrador R7 nessa subrotina. Qual a função da flag F0 nesse programa? 3.1.3 Acionamento de Motor de Corrente Contínua O programa dado na Tabela 5 aciona um motor de corrente contínua através da porta P2. O pushbutton no pino P3.3 é usado para inverter o sentido de rotação do motor. Tabela 5: Acionamento de um motor de corrente contínua através da porta P1 Rótulo Mnemônicos Comentários IN1 EQU P2.0 ; Associa entrada IN1 ao pino P2.2 IN2 EQU P2.1 ; Associa entrada IN2 ao pino P2.3 ORG 00H LJMP INICIO INICIO: ORG 30H MOV SP,#2FH Parte 1 Parte 2 SENTIDO: JB P3.3,REVERSO ; Se P3.3 = 1, desvia para REVERSO SETB IN1 ; Se P3.3 = 0, aciona motor no sentido DIO fazendo CLR IN2 SJMP SENTIDO ;IN1=1 e IN2 = 0 REVERSO: CLR IN1 ; Se P3.3 = 1, aciona motor no sentido REVERSO fazendo SETB IN2 ;IN1=0 e IN2 = 1 SJMP SENTIDO END Explique o funcionamento das Partes 1 e 2.
Laboratório de Microprocessadores e Microcontroladores 11 3.1.4 Controle de Velocidade de um Motor CC O programa dado na Tabela 6 permite aumentar a velocidade através da interrupção zero e diminuir através da interrupção 1. O temporizador zero é usado no modo 2 (recarga automática) para gerar um sinal PWM, cujo ciclo alto/baixo é alterado pelas interrupções externas. O driver L298 é utilizado no acionamento do motor. O motor é acionado através dos pinos P2.0 (Saida0) e P2.1 (Saida1). Tabela 6: Controle de velocidade de um motor de corrente contínua Rótulo Mnemônicos Comentários Saida0 EQU P2.0 ; Bit 2 de P2 Para acionar o motor Saida1 EQU P2.1 ; Bit 3 de P2 Para acionar o motor TON EQU 10H ; Armazena período ligado TOFF EQU 11H ; Armazena período desligado ORG 00H LJMP INICIO ORG 03H LJMP AUM_VELOC ORG 0BH LJMP PWM ORG 13H LJMP DIM_VELOC ; Interrupção INT0 Aumenta velocidade ; Interrupção TEMP0 Controla velocidade ; Interrupção INT1 Diminui velocidade INICIO: ORG 30H MOV SP,#2FH MOV IE,#87H ; Habilita interrupções INT0, INT1 e TEMP0 MOV TCON,#05H ; Int0 e int1 são por transição MOV IP,#02H ; Faz TEMP0 com prioridade 1 MOV TMOD,#02H ; TEMP0 no modo 2 com recarga MOV TON, #0FH MOV TL0,TON MOV A,TON CPL A MOV TOFF,A ; Periodo ligado TON = 0FH ; TL0 = periodo ligado ; Faz A = periodo ligado ; Acha periodo desligado ; TOFF = complement do periodo ligado MOV TH0,A CLR F0 CLR Saida0 ; Limpa pino P2.2 CLR Saida1 ; Limpa pino P2.3 ; TH0 recebe o valor do periodo desligado ; Limpa flag que indica ligado/desligado (F0 = 1 ==> Ligado) SETB TR0 ; Liga o temporizador 0 SJMP $ ; Loop infinito aguarda uma das três interrupções habilitadas Subrotina de geração de sinal PWM PWM: JB F0, DESLIGA ; Se chave estiver ligada desliga SETB Saida0 ; Saída em nível lógico alto --> período alto do PWM CLR Saida1 ; Mantém pino P2.3 = 0 (rotação em um único sentido) SETB F0 ; Seta flag F0 para indicar que PWM está no período alto MOV TH0,TON ; Faz TH0 = período ligado. Recarga para o ciclo desligado I ; Retorna da interrupção do temporizador DESLIGA: CLR Saida0 ; Saida em nível lógico zero --> período baixo do PWM CLR Saida1 ; Mantém pino P2.3 = 0 (rotação em um único sentido) CLR F0 ; Limpa flag F0 para indicar que PWM está no período baixo MOV TH0, TOFF ; Faz TH0 = período desligado. Recarga para o ciclo ligado I ; Retorna da interrupção do temporizador AUM_VELOC: CLR EX0 ; Desabilitar interrupção externa zero CLR CY ; Limpa flag de carry MOV A, TON ; Faz A = período ligado ADD A,#0AH ; Faz A = A + 10
Laboratório de Microprocessadores e Microcontroladores 12 MOV B,A ; Guarda em B o valor de TON incrementado SUBB A,#0F0H ; Verifica se A > F0H (limite de TON). JC V1 ; Se CY = 1, então A < F0H. Limite ainda não alcançado MOV B,#0F0H ; Se CY = 0, B assume valor limite de TON, ou seja, B = F0H V1: MOV A,B ; A recebe valor de B (novo valor de TON) MOV TON,A ; TON recebe novo valor do período ligado CPL A ; Encontra período desligado MOV TOFF, A ; Carrega em TOFF período desligado SETB EX0 ; Reabilita interrupção zero I ; Retorna da interrupção externa 0 DIM_VELOC: CLR EX1 ; Desabilitar interrupção externa 1 CLR CY ; Limpa flag de carry MOV A, TOFF ; Faz A = período desligado ADD A,#0AH ; Faz A = A + 10 MOV B,A ; Guarda em B o valor de TOFF incrementado SUBB A,#0F0H ; Verifica se A > F0H (limite de TOFF). JC V2 ; Se CY = 1, então A < F0H. Limite ainda não alcançado MOV B,#0F0H ; Se CY = 0, B assume valor limite de TOFF, ou seja, B = F0H V2: MOV A,B ; A recebe valor de B (TOFF) MOV TOFF,A ; TOFF recebe novo valor do período desligado CPL A ; Encontra período ligado MOV TON, A ; Carrega em TON período ligado SETB EX1 ; Reabilita interrupção externa 1 I ; Retorna da interrupção externa 1 END Explique o funcionamento da subrotina de geração de sinal PWM. Mostre a onda resultante no pino Saida0 em um determinado instante do funcionamento. Explique o funcionamento das subrotinas AUM_VELOC e DIM_VELOC.
Laboratório de Microprocessadores e Microcontroladores 13 3.2 Atividades com o Kit Real Os programas das tarefas a seguir devem ser executados no kit didático real do microcontrolador 8051. 3.2.1 Motor de Passo com Inversão de Sentido e Mensagem no LCD Edite, compile e grave o programa da Tabela 7 em um microcontrolador 8051. Tabela 7: Inversão do sentido de rotação de motor de passo usando interrupção Rótulo Instrução Rótulo Instrução RS EQU P3.5 INSTR_WR: SETB EN RW EQU P3.6 CLR RW EN EQU P3.7 CLR RS LCD EQU P0 MOV LCD, A CLR EN ORG 00H LCALL ATRASO_LCD LJMP INICIO ORG 13H TEXTO_WR: SETB EN CPL F0 CLR RW LCALL ATRASO SETB RS CLR IE1 MOV LCD, A I CLR EN LCALL ATRASO_LCD ORG 30H INICIO: MOV SP,#2FH MOV IE,#84H LINHA1: MOV A,R7 MOV TCON,#04H MOV DPTR,#MSG1 MOV R6,#11H MOVC A,@A+DPTR MOV R7,#00H CJNE A,#0FFH,V1 LCALL INICIA MOV R7,#00H LCALL LINHA1 V1: LCALL TEXTO_WR ESCOLHA: JB F0,REVERSO INC R7 DIO: MOV DPTR,#MSG2 SJMP LINHA1 LCALL LINHA2 MOV A,R6 LINHA2: MOV A,#192 MOV P2,A LCALL_INSTR_WR LCALL ATRASO V4: MOV A,R7 RL A MOVC A,@A+DPTR MOV R6,A CJNE A,#0FFH,V2 SJMP ESCOLHA MOV R7,#00H REVERSO: MOV DPTR,#MSG3 V2: LCALL TEXTO_WR LCALL LINHA2 INC R7 MOV A,R6 SJMP V4 MOV P2,A LCALL ATRASO ATRASO_LCD: MOV R4,#10 RR A V6: MOV R5,#80 INICIA: MOV R6,A SJMP ESCOLHA DJNZ R5,$ DJNZ R4,V6 MOV A,#38H LCALL INSTR_WR ATRASO: MOV R0, #200 MOV A,#38H V3: MOV R1, #200 LCALL INSTR_WR DJNZ R1, $ MOV A,#0EH DJNZ R0, V3 LCALL INSTR_WR MOV A,#06H LCALL INSTR_WR MSG1: DB MOTOR DE PASSO', 0FFH MOV A,#01H MSG2: DB SENTIDO DIO, 0FFH LCALL INSTR_WR MSG3: DB SENTIDO REVERSO', 0FFH END
Laboratório de Microprocessadores e Microcontroladores 14 Por que o registrador R6 é utilizado nas rotinas DIO e REVERSO? Por que a sub-rotina LINHA2 começa com as instruções MOV A,#192 e LCALL INSTR_WR? 3.2.2 Motor de Corrente Contínua com Mensagem no LCD Edite, compile e grave o programa da Tabela 8 em um microcontrolador 8051. Tabela 8: Motor de Corrente Contínua com Mensagem no LCD Rótulo Instrução Rótulo Instrução RS EQU P3.5 INSTR_WR: SETB EN RW EQU P3.6 CLR RW EN EQU P3.7 CLR RS LCD EQU P0 MOV LCD, A CLR EN ORG 00H LCALL ATRASO_LCD LJMP INICIO ORG 13H TEXTO_WR: SETB EN CPL F0 CLR RW LCALL ATRASO_LCD SETB RS CLR IE1 MOV LCD, A I CLR EN LCALL ATRASO_LCD ORG 30H INICIO: MOV SP,#2FH MOV IE,#84H LINHA1: MOV A,R7 MOV TCON,#04H MOV DPTR,#MSG1 MOV R6,#11H MOVC A,@A+DPTR MOV R7,#00H CJNE A,#0FFH,V1 LCALL INICIA MOV R7,#00H LCALL LINHA1 V1: LCALL TEXTO_WR ESCOLHA: JB F0,REVERSO INC R7 DIO: MOV DPTR,#MSG2 SJMP LINHA1 LCALL LINHA2 SETB P2.0 LINHA2: MOV A,#192 CLR P2.1 LCALL_INSTR_WR JNB F0,$ V4: MOV A,R7 SJMP ESCOLHA MOVC A,@A+DPTR CJNE A,#0FFH,V2 REVERSO: MOV DPTR,#MSG3 MOV R7,#00H LCALL LINHA2 CLR P2.0 V2: LCALL TEXTO_WR SETB P2.1 INC R7 JB F0,$ SJMP V4 SJMP ESCOLHA ATRASO_LCD: MOV R4,#10
Laboratório de Microprocessadores e Microcontroladores 15 INICIA: MOV A,#38H V6: MOV R5,#80 LCALL INSTR_WR DJNZ R5,$ MOV A,#38H DJNZ R4,V6 LCALL INSTR_WR MOV A,#0EH LCALL INSTR_WR MSG1: DB MOTOR CC, 0FFH MOV A,#06H MSG2: DB SENTIDO DIO, 0FFH LCALL INSTR_WR MSG3: DB SENTIDO REVERSO', 0FFH MOV A,#01H END LCALL INSTR_WR Por que é utilizada a instrução JNB F0,$ ao final da rotina DIO? Por que é utilizada a instrução JB F0,$ ao final da rotina REVERSO?