Cartilha Micro-Controlador 80c51 - Assembly

12
Uma Introdução às práticas mais comuns com microControlador IFCE CARTILHA DE PROGRAMAS PARA MICROCONTROLADOR 80C51 Pedro R. C. Vasconcelos 2012

description

Programas em assembly com visualizador da simulação no Proteus!

Transcript of Cartilha Micro-Controlador 80c51 - Assembly

Page 1: Cartilha Micro-Controlador 80c51 - Assembly

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

Page 2: Cartilha Micro-Controlador 80c51 - Assembly

Cartilha de Programas para Microcontrolador 80C51

Cartilha 80C51 – Pedro R. C. Vasconcelos Página 2

Pedro Raphael Carneiro Vasconcelos [email protected]

Cartilha de Programas para

Microcontrolador 80C51

Ano: 2012

Edição: 1ª

Page 3: Cartilha Micro-Controlador 80c51 - Assembly

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:

Page 4: Cartilha Micro-Controlador 80c51 - Assembly

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

Page 5: Cartilha Micro-Controlador 80c51 - Assembly

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.

Page 6: Cartilha Micro-Controlador 80c51 - Assembly

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

Page 7: Cartilha Micro-Controlador 80c51 - Assembly

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

Page 8: Cartilha Micro-Controlador 80c51 - Assembly

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

Page 9: Cartilha Micro-Controlador 80c51 - Assembly

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

Page 10: Cartilha Micro-Controlador 80c51 - Assembly

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

Page 11: Cartilha Micro-Controlador 80c51 - Assembly

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

Page 12: Cartilha Micro-Controlador 80c51 - Assembly

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