Post on 28-Jun-2015
description
Cartilha 80C51 – Pedro R. C. Vasconcelos Página 1
Uma Introdução às práticas mais comuns com microControlador
IFCE CARTILHA DE PROGRAMAS PARA
MICROCONTROLADOR 80C51
Pedro R. C. Vasconcelos
2012
Cartilha de Programas para Microcontrolador 80C51
Cartilha 80C51 – Pedro R. C. Vasconcelos Página 2
Pedro Raphael Carneiro Vasconcelos pedrorcv@gmail.com
Cartilha de Programas para
Microcontrolador 80C51
Ano: 2012
Edição: 1ª
Cartilha de Programas para Microcontrolador 80C51
Cartilha 80C51 – Pedro R. C. Vasconcelos Página 3
Oferecimento
Ofereço essa cartilha a todos os amigos e amigas que junto comigo trilharam os
caminhos da programação em busca do desenvolvimento e melhoria dos nossos
conhecimentos e a todos os amigos do curso de mecatrônica Industrial do Instituto Federal de
Educação Ciência e Tecnologia do Ceará.
Revisão:
Cartilha de Programas para Microcontrolador 80C51
Cartilha 80C51 – Pedro R. C. Vasconcelos Página 4
Sumário
Introdução .......................................................................................................................................................... 5
Piscar LED ......................................................................................................................................................... 6
Contador 0 a 9 usando Display de 7 seguimentos ............................................................................................. 6
Controlando LED por interrupção ..................................................................................................................... 6
Multiplexação – 2 Displays 7 seguimentos ....................................................................................................... 7
Extra – Jogo de Auditorio .................................................................................................................................. 7
Teclado – Barramento de LED .......................................................................................................................... 8
Motor de Passo ................................................................................................................................................... 9
Display - LCD .................................................................................................................................................. 10
PWM – Motor CC ............................................................................................................................................ 11
Cartilha de Programas para Microcontrolador 80C51
Cartilha 80C51 – Pedro R. C. Vasconcelos Página 5
Introdução
Esta cartilha compreende programas simples que são considerados básicos para o
aprendizado da programação de microcontroladores da família 8051 utilizando a linguagem
ASSEMBLY. Juntamente com os códigos será possível visualizar a imagem dos programas
simulados no software de simulação de circuitos eletrônicos, PROTEUS. A linguagem
assembly faz uso do programa assembler, que quer dizer montador. Sua maior vantagem
está no tempo de execução das linhas de instruções, além de serem menores em tamanho.
A programação em microcontroladores é uma prática muito comum na automação de
máquinas e equipamentos simplificando processos e operações. Podem ser usados em
máquinas diversas como em terminais de bancos, luzes de natal, impressoras, relógios,
encoders, etc.
Os microcontroladores da família 8051 possuem versões que contam com ROM e
EPROM interna ou sem ROM interna. Suas principais características são: operações com
controle de bits, CPU otimizada para aplicações de controle de 8 bits e controle minucioso
de tempo. Características como essas fizeram desses microcontroladores serem os mais
utilizados durante muitos anos. Atualmente outros equipamentos dominam o mercado,
porém não fizeram com que a família 8051 fosse esquecida.
Cartilha 80C51 – Pedro R. C. Vasconcelos Página 6
Piscar LED
LED EQU P1.0
INICIO: CLR LED
ACALL TEMPO
SETB LED
ACALL TEMPO
AJMP INICIO
;***********************
TEMPO: MOV R0,#255
VOLTA: MOV R1,#255
AQUI: DJNZ R1,AQUI
DJNZ R0,VOLTA
RET
;**********************
END
Contador 0 a 9 usando Display de 7
seguimentos
INI: MOV DPTR, #TABELA
INICIO: MOV A, #00H
MOVC A,@A + DPTR
JZ INI
MOV P0,A
ACALL TEMPO
ACALL TEMPO
ACALL TEMPO
ACALL TEMPO
ACALL TEMPO
INC DPTR
AJMP INICIO
TEMPO: MOV R2,#255
VOLTA: MOV R3,#255
AQUI: DJNZ R3,AQUI
DJNZ R2,VOLTA
RET
;***************************************
TABELA: DB 0C0H, 0F9H, 0A4H, 0B0H, 99H,
DB 92H, 83H, 0F8H, 080H, 98H,00H
;***************************************
END
Controlando LED por interrupção
ORG 00H ; endereço do reset
AJMP INICIO
ORG 03H ;endereço da externa 0
AJMP LED
INICIO: SETB P1.0
MOV IE, #81H
MOV IP, #01H
SETB IT0
AQUI: AJMP AQUI
LED: CPL P1.0
RETI
Cartilha de Programas para Microcontrolador 80C51
Cartilha 80C51 – Pedro R. C. Vasconcelos Página 7
END
Multiplexação – 2 Displays 7
seguimentos
ORG 00H
AJMP INICIO
ORG 0BH
AJMP TIM_0
F_DISP EQU 00H
INICIO: MOV IP, #2FH
MOV IE, #82H
MOV TMOD,#01H
MOV TH0,#HIGH (65535-10000)
MOV TL0,#LOW (65535-10000)
SETB TR0
MOV R0,#0
MOV R1,#0
MOV R2,#100
MOV DPTR,#TABELA
AQUI: AJMP AQUI
TIM_0: DJNZ R2, MUX
MOV R2, #100
INC R0
CJNE R0, #10, FIM
MOV R0, #0
INC R1
CJNE R1, #06, FIM
MOV R1, #0
MUX: CPL F_DISP
JB F_DISP, D_DEZ
D_UNI: MOV A, R0
MOVC A, @A + DPTR
MOV P0, A
CLR P2.0
SETB P2.1
ACALL TEMPO
AJMP FIM
D_DEZ: MOV A, R1
MOVC A, @A+DPTR
MOV P0, A
SETB P2.0
CLR P2.1
ACALL TEMPO
FIM: MOV TH0, #0B8H
MOV TL0, #0F0H
RETI
TEMPO: MOV R7,#100
AQUI2: DJNZ R7,AQUI2
RET
TABELA: DB 0C0H, 0F9H, 0A4H, 0B0H,
99H, 92H, 83H, 0F8H, 080H, 098H,00H
END
Extra – Jogo de Auditorio
LED3 EQU P1.0
LED2 EQU P1.1
LED1 EQU P1.2
CH0 EQU P2.0
Cartilha de Programas para Microcontrolador 80C51
Cartilha 80C51 – Pedro R. C. Vasconcelos Página 8
CH1 EQU P2.1
CH2 EQU P2.2
INICIO: SETB LED1
SETB LED2
SETB LED3
LE_CH0: JB CH0, LE_CH1
CLR LED1
ACALL TEMPO
SETB LED1
LE_CH1: JB CH1, LE_CH2
CLR LED2
ACALL TEMPO
SETB LED2
LE_CH2: JB CH2, LE_CH0
CLR LED3
ACALL TEMPO
SETB LED3
AJMP LE_CH0
TEMPO: MOV R0, #32
VOLTA: MOV R1, #255
PROX:MOV R2, #255
AQUI: DJNZ R2, AQUI
DJNZ R1, PROX
DJNZ R0, VOLTA
RET
END
Teclado – Barramento de LED
ORG 00H
AJMP INICIO
ORG 03H
AJMP EXT_0
ORG 0BH
AJMP TIM_0
;****************************************
F_TECEQU 00H
;****************************************
INICIO: MOV SP,#2FH
MOV IP,#01H
MOV IE,#83H
MOV TMOD,#01H
MOV TH0,#HIGH (65535-10000)
MOV TL0,#LOW (65535-10000)
SETB TR0
MOV R2,#0
;****************************************
AQUI: JNB F_TEC,AQUI
CLR F_TEC
MOV DPTR,#TAB_1
MOV A,R3
MOVC A,@A+DPTR ;ler tabela
display
MOV P1,A
AJMP AQUI
;****************************************
TIM_0: INC R2
CJNE R2,#1,T_2
CLR P2.0
SETB P2.1
SETB P2.2
AJMP FIM_T0
T_2: CJNE R2,#2,T_3
SETB P2.0
Nesse programa o número digitado no teclado
ascende a quantidade de LEDs correspondente
no barramento
Cartilha de Programas para Microcontrolador 80C51
Cartilha 80C51 – Pedro R. C. Vasconcelos Página 9
CLR P2.1
SETB P2.2
AJMP FIM_T0
T_3: CJNE R2,#3,FIM_T0
SETB P2.0
SETB P2.1
CLR P2.2
MOV R2,#0
FIM_T0: MOV TH0,#HIGH (65535-10000)
MOV TL0,#LOW (65535-10000)
RETI
EXT_0: MOV A, P2
SETB P0.0
SETB P0.1
CJNE A, #0BBH, T2
MOV R3, #1
SETB F_TEC
RETI
T2: CJNE A, #0BDH, T3
MOV R3, #2
SETB F_TEC
RETI
T3: CJNE A, #0BEH, T4
MOV R3, #3
SETB F_TEC
RETI
T4: CJNE A, #0DBH, T5
MOV R3, #4
SETB F_TEC
RETI
T5: CJNE A, #0DDH, T6
MOV R3, #5
SETB F_TEC
RETI
T6: CJNE A, #0DEH, T7
MOV R3, #6
SETB F_TEC
RETI
T7: CJNE A, #0EBH, T8
MOV R3, #7
SETB F_TEC
RETI
T8: CJNE A, #0EDH, T9
MOV R3, #8
CLR P0.0
SETB F_TEC
RETI
T9: CJNE A, #0EEH, T00
MOV R3, #9
CLR P0.0
CLR P0.1
;MOV P0, 11111100B
SETB F_TEC
RETI
T00: CJNE A, #0F5H,FIM_E0
MOV R3, #0
SETB P0.0
SETB P0.1
SETB F_TEC
RETI
;T89: CJNE R3,#8,CP1
; MOV P0, 11111110B
;CP1: CJNE R3,#9,FIM_E0
; MOV P0, 11111100B
FIM_E0: RETI
TAB_1: DB 0FFH, 0FEH, 0FCH, 0F8H,
0F0H, 0E0H, 0C0H, 080H, 080H, 080H
END
Motor de Passo
Cartilha de Programas para Microcontrolador 80C51
Cartilha 80C51 – Pedro R. C. Vasconcelos Página 10
ORG 00H
AJMP INICIO
ORG 03H
AJMP INIMOT
INICIO: SETB P1.0
CLR P1.1
MOV IE, #81H
MOV IP, #01H
SETB IT0
AQUI1: AJMP AQUI
VELOC1: SETB P0.0
ACALL TEMPO
ACALL TEMPO
CLR P0.0
SETB P0.1
ACALL TEMPO
ACALL TEMPO
CLR P0.1
SETB P0.2
ACALL TEMPO
ACALL TEMPO
CLR P0.2
SETB P0.3
ACALL TEMPO
ACALL TEMPO
CLR P0.3
RETI
;*****************
INIMOT: CLR P1.0
SETB P1.1
SETB P0.0
ACALL TEMPO
CLR P0.0
SETB P0.1
ACALL TEMPO
CLR P0.1
SETB P0.2
ACALL TEMPO
CLR P0.2
SETB P0.3
ACALL TEMPO
CLR P0.3
AJMP INIMOT
RETI
TEMPO: MOV R1, #255
VOLTA: MOV R2, #255
AQUI: DJNZ R2, AQUI
DJNZ R1, VOLTA
RET
END
Display - LCD
ORG 00H
AJMP INICIO
RS EQU P3.7
E EQU P3.6
INICIO: ACALL CONF
MOV A, #01B
ACALL INST
MOV DPTR,#TAB1
ACALL MSG
ACALL T_1S
MOV A,#0C0H
ACALL INST
MOV DPTR,#TAB2
ACALL MSG
ACALL T_1S
ACALL T_1S
Cartilha de Programas para Microcontrolador 80C51
Cartilha 80C51 – Pedro R. C. Vasconcelos Página 11
MOV A, #01B
ACALL INST
MOV DPTR, #TAB3
ACALL MSG
MOV A,#0C0H
ACALL INST
MOV DPTR, #TAB4
ACALL MSG
ACALL T_1S
MOV A, #01B
ACALL INST
AQUI: ACALL T_1S
AJMP INICIO
;------------MENSSAGENS-----------------
MSG: MOV R4,#00H
VOLTA1: MOV A,R4
MOVC A,@A+DPTR
JZ FIM1
ACALL DADO
INC R4
AJMP VOLTA1
FIM1: RET
;----------------------------------------
;-------------INSTRUÇÃO------------------
INST: MOV P1,A
CLR RS
SETB E
ACALL TEMPO
CLR E
RET
;--------------DADO---------------------
DADO: MOV P1,A
SETB RS
SETB E
ACALL TEMPOT
CLR E
RET
;----------CONFIG LCD-------------------
CONF:MOV A,#38H
ACALL INST
ACALL INST
ACALL INST
MOV A,#06H
ACALL INST
MOV A,#0FH
ACALL INST
MOV A,#01H
ACALL INST
RET
;------------TEMPO1----------------------
TEMPO: MOV R0,#255
DJNZ R0,$
RET
;----------TEMPO2------------------------
TEMPOT: MOV R1, #250
VOLTA: MOV R2, #200
DJNZ R2, $
DJNZ R1, VOLTA
RET
T_1S: MOV R3, #10
MAIS: ACALL TEMPOT
DJNZ R3, MAIS
RET
;-----------TABELA-----------------------
TAB1: DB ' Cartilha',0
TAB2: DB ' para ',0
TAB3: DB ' mControlador', 0
TAB4: DB ' 80c51', 0
END
PWM – Motor CC
ORG 00H
Cartilha de Programas para Microcontrolador 80C51
Cartilha 80C51 – Pedro R. C. Vasconcelos Página 12
AJMP INICIO
ORG 03H
AJMP EXT_0 ;tempo alto do PWM
ORG 13H
AJMP EXT_1 ;tempo baixo do PWM
;****************************************
SAIDA EQU P2.0
DISP EQU P1
BOTAO EQU P3.1
;****************************************
INICIO: MOV SP, #2FH
MOV IE, #85H
SETB IT0
SETB IT1
MOV R0, #0
MOV A,R0
MOV R1,A
MOV R2, #15
MOV A,R2
MOV R3,A
DENOVO:
ACALL ENVIA_ALTO
ACALL ENVIA_BAIXO
JNB BOTAO, VAI_LED
AJMP DENOVO
;****************************************
TEMPO: MOV R5, #25
VOLTA: MOV R4, #10
DJNZ R4, $
DJNZ R5, VOLTA
RET
;****************************************
TEMPO2: MOV R5, #255
VOLTA4: MOV R4, #255
DJNZ R4, $
DJNZ R5, VOLTA4
RET
;****************************************
ENVIA_ALTO:
MOV A,R0
MOV R1,A
CJNE R1,#0,AQUI
AJMP RETORNA1
AQUI: SETB SAIDA
ALI: ACALL TEMPO
DJNZ R1,ALI
RETORNA1: RET
;****************************************
ENVIA_BAIXO:
MOV A,R2
MOV R3,A
CJNE R3,#0,AQUI2
AJMP RETORNA3
AQUI2: CLR SAIDA
ALI2: ACALL TEMPO
DJNZ R3,ALI2
RETORNA3: RET
;****************************************
EXT_0:
CJNE R2,#0,INCR1
AJMP RET_EXT0
INCR1: INC R0
DEC R2
RET_EXT0: RETI
;****************************************
EXT_1:
CJNE R0,#0,INCR2
AJMP RET_EXT1
INCR2: INC R2
DEC R0
RET_EXT1: RETI
;****************************************
VAI_LED: MOV DISP, #0FEH
ACALL TEMPO2
MOV R6,#7H
RETORNA: MOV A,DISP
RL A
MOV DISP,A
ACALL TEMPO2
DJNZ R6,RETORNA
MOV R6,#7H
RETORNA2: MOV A,DISP;
RR A
MOV DISP,A
ACALL TEMPO2
DJNZ R6,RETORNA2
MOV DISP,#0FFH
AJMP DENOVO
END