Microcontroladores

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Bibliografia sobre Microcontroladores

http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CC0QFjAA&url=http%3A%2F%2Flegacy.afonsomiguel.com%2FGraduacao%2FMPI%2F8051%2Ftut8051_lima.doc&ei=yah5UeqBKIj00gGc0oGoAQ&usg=AFQjCNFjjus7muNRVJSAl1K-skadJnJxHQ&sig2=TlWqezc05h6dnihwwDwfOQ&bvm=bv.45645796,d.dmQ

http://www.ebah.com.br/content/ABAAAA8T8AK/microcontrolador-8051

Implementações em Assembly no MIC 8051

Zerando área de memória de 50h até 7Fh

mov A,50h
loop: 
    mov R0,A
    mov @R0,#00
    inc A
    cjne R0,7Fh,loop
    loop2:
          jmp loop2


Contador em display LED, apenas um dígito e sem utilizar o ponto

Faltam os temporizadores ainda não entendi como funcionam, estou trabalhando nisso
Portas e bits correspondentes a cada LED.
A=P0.1
B=P1.2
C=P2.2
D=P3.2
E=P3.1
F=P2.1
G=P1.1

loop:
     setb P1.1
     CLR P2.1
     CLR P3.1
     CLR P0.1
     CLR P1.2
     CLR P2.2
     CLR P3.2
     setb P0.1
     setb P2.1
     setb P3.1
     setb P3.2
     setb P2.2
     CLR P0.1
     CLR P1.1
     CLR P3.1
     CLR P3.2
     setb P3.1
     CLR P2.2
     setb P0.1
     setb P3.2
     CLR P2.1
     setb P1.2
     CLR P0.1
     CLR P3.2
     CLR P3.1 
     setb P1.1
     setb P2.1
     setb P3.1
     setb P3.2
     CLR P1.2
     CLR P1.1
     CLR P2.1
     CLR P3.1
     CLR P3.2
     setb P3.1
     jmp loop

</syntaxhighlight>

Pilhas - Exercício 1

Neste exercício observei as intruções push(insere item no início da pilha) e pop(remove intem do início da pilha)

loop: mov A,#65H mov B,#87H push ACC push B mov A,#00H mov B,#00H pop B pop ACC sjmp loop END </syntaxhighlight>

Pilhas - Exercício 2

Neste Exercício observei o contador de programa(PC) e o apontador de pilha(Stack Pointer)

ORG 000h main: ljmp ponto1 ORG 1E5H

ponto1: mov R0,#55H mov R1,#5 acall setar_mem mov R0,#77H mov R1,#10 acall setar_mem loop: sjmp loop

ORG 315h

setar_mem: mov @R0,#0FFh inc R0 djnz R1,setar_mem ret END </syntaxhighlight>

Contador de um dígito com interrupção PORT EQU P1 org 0000h jmp main org 001Bh jmp INT_TIMER1

org 0100h ; entry address for main main:

         mov R1,#09h
         mov A,R1
         mov DPTR,#num
         mov TMOD, #00010000b ; timer 1 em modo 1
         mov TH1, #0FEh 
         mov TL1, #0FDh 
         mov IE, #10001000b ; habilita interrupcao
         setb TR1

loop: ljmp loop

INT_TIMER1:

         clr TR1 ; para o timer
         mov TH1, #0FEh ; recarrega valores no timer
         mov TL1, #0FFh
         LCALL envia_num ; aciona uma saida
         setb TR1 ; religa o timer
         reti


envia_num: mov A,R1 movc A,@A+DPTR mov PORT,A mov A,R1 JZ reset dec R1 ret

reset:

       mov R1,#09h
       ret

org 0200h num: DB 021h, 01h, 0F1h, 05h, 25h, 33h, 61h, 49h, 0F3h, 81h END </syntaxhighlight>

Contador de um dígito com delay por software


loop: mov P1,#81h lcall delay_1ms mov P1,#0F3h lcall delay_1ms mov P1,#49h lcall delay_1ms mov P1,#61h lcall delay_1ms mov P1,#33h lcall delay_1ms mov P1,#25h lcall delay_1ms mov P1,#05h lcall delay_1ms mov P1,#0F1h lcall delay_1ms mov P1,#01h lcall delay_1ms mov P1,#21h lcall delay_1ms ljmp loop delay_1ms: push 7 mov R7,#50 loop1: nop ; 1 ciclo de maquina nop ; 1 ciclo de maquina djnz R7,loop1 ; 2 ciclo de maquina fim_delay_1ms: nop nop nop pop 7 ret

</syntaxhighlight>

Contador com 4 dígitos e delay por software fazendo varredura das portas

Postas e bits correspontndes
P0=P2.0
P1=P2.1
P2=P2.2
P3=P2.3
A=P1.1
B=P1.2
C=P1.3
D=P1.4
E=P1.5
F=P1.6
G=P1.7
PONTO=P1.0

org 0000h S1 EQU P2.0 S2 EQU P2.1 S3 EQU P2.2 S4 EQU P2.3 PORT EQU P1

main: mov DPTR,#num mov R0,#00 mov R1,#00 mov R2,#00 mov R3,#00 mov R7,#00 loop: setb S4 mov A,R0 ACALL envia_num clr S1

setb S1 mov A,R1 ACALL envia_num clr S2

setb S2 mov A,R2 ACALL envia_num clr S3

setb S3 mov A,R3 ACALL envia_num clr S4

inc R7 cjne R7,#01h,loop ACALL contadores ljmp loop

envia_num: movc A,@A+DPTR mov PORT,A clr A ret

contadores: mov R7,#00 inc R0 cjne R3,#0Ah,03Fh mov R3,#00h

cjne R0,#0Ah,045h inc R1 mov R0,#00

cjne R1,#0Ah,04Bh inc R2 mov R1,#00

cjne R2,#0Ah,051h inc R3 mov R2,#00 ret


org 0300h

num: DB 81h, 0F3h, 49h, 61h, 33h, 25h, 05h, 0F1h, 01h, 021h

    END

</syntaxhighlight>

Contador 4 dígitos com interrupção e varredura das portas

Postas e bits correspontndes
P0=P2.0
P1=P2.1
P2=P2.2
P3=P2.3
A=P1.1
B=P1.2
C=P1.3
D=P1.4
E=P1.5
F=P1.6
G=P1.7
PONTO=P1.0

org 0000h S1 EQU P2.0 S2 EQU P2.1 S3 EQU P2.2 S4 EQU P2.3 PORT EQU P1

main: mov DPTR,#num mov R0,#00 mov R1,#00 mov R2,#00 mov R3,#00 mov R7,#00 loop: setb S4 mov A,R0 ACALL envia_num clr S1

setb S1 mov A,R1 ACALL envia_num clr S2

setb S2 mov A,R2 ACALL envia_num clr S3

setb S3 mov A,R3 ACALL envia_num clr S4

inc R7 cjne R7,#05h,loop ACALL contadores ljmp loop

envia_num: movc A,@A+DPTR mov PORT,A clr A ret

contadores: mov R7,#00 inc R0 cjne R3,#0Ah,03Fh mov R3,#00h

cjne R0,#0Ah,045h inc R1 mov R0,#00

cjne R1,#0Ah,04Bh inc R2 mov R1,#00

cjne R2,#0Ah,051h inc R3 mov R2,#00 ret

org 0300h num: DB 81h, 0F3h, 49h, 61h, 33h, 25h, 05h, 0F1h, 01h, 021h

    END

</syntaxhighlight>

Implementaçao do contador com 4 dígitos e display led sete segmentos em C

#include <8051.h>

static long miliSegundos;
volatile unsigned char UmSeg;
int num[10];
int i=0;
int j=0;
int k=0;
int l=0;

void init_contadores(){
num[0]=0x81;
num[1]=0xF3;
num[2]=0x49;
num[3]=0x61;
num[4]=0x33;
num[5]=0x25;
num[6]=0x05;
num[7]=0xF1;
num[8]=0x01;
num[9]=0x21;
}

void varredura(){
P1=0xff;
P2_0=0x0;
P1=num[i];
P2_0=0x1;
P1=0xff;
P2_1=0x0;
P1=num[j];
P2_1=0x1;
P1=0xff;
P2_2=0x0;
P1=num[k];
P2_2=0x1;
P1=0xff;
P2_3=0x0;
P1=num[l];
P2_3=0x1;
P1=0xff;
i++;
if(i==10){
	i=0;
	j++;
	}
if(j==10){
	j=0;
	k++;
	}
if(k==10){
	k=0;
	l++;
	}
if(l==10)
	l=0;
return;
}

void delay(){
ET0=0x0;
miliSegundos=0;
UmSeg=0;
ET0=0x1;
while (UmSeg==0);
return;
}

void ClockIrqHandler (void) interrupt 1 using 3 {
TL0 = 0xFE;
TH0 = 0xFE;
miliSegundos++;
if (miliSegundos==2) 
UmSeg = 1;
}

void init_timer() {
TR0=0;
TH0=0xFE;
TL0=0xFE;
TR0=0x1;
ET0=1;
EA=1;
return;
}

void main(){
init_timer();
init_contadores();
for (;;){
	varredura();
	delay();
	}
}

Tarefas da semana 13/05/2013

  • Temporizador por software
  • Estudar pilha
  • Temporizador por hardware (sem interrupção)
  • Temporizador por hardware (com interrupção)

Tarefas da semana 03/06/2013

  • Separar as lógicas de contagem e varedura no contador com display led
  • Procurar um simulador para arduíno
  • Tentar implementar o contador com display led em C

Tarefas da semana 17/06/2013

  • Iniciar estudos sobre alguns microcontroladores, quais as principais diferenças e vantagens de cada um
  • Exportar o código implementado em C do contador de 4 dígitos para um simulador Arduíno
  • Procurar simuladores para Arduíno

Tarefas da semana 27/06/2013

  • Criar uma tabelas com informações sobre alguns microcontroladores
  • Estudar Motor de passo
  • Estudar Arduino