Mudanças entre as edições de "Microcontroladores"
Linha 507: | Linha 507: | ||
*Procurar um simulador para arduíno | *Procurar um simulador para arduíno | ||
*Tentar implementar o contador com display led em C | *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 |
Edição das 21h54min de 23 de junho de 2013
Bibliografia sobre Microcontroladores
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