Microcontrolador ms51(8051)

Microcontrolador ms51(8051)

 

5.MS-51 (8051)

 

5.1- AT 89S8252 características:8051

- sistema  programável  por este guia

 - 8k protectable downloadable flash

 - 2k de EEPROM

 - 256 Bytes de RAM

 - 32 linhas I/O

 - 3 contadores de 16 bit

 - tem 6 níveis de arquitetura de interrupção, 9 sources de interrupção

 - interface serial  “full duplex”  

 

 

 

 

 

 

 

5.2-COMANDOS  + IMPORTANTES :

  "MOV"    MOVER  DADOS .

  "SETB"   LIGAR BIT  .

  "CLR"    APAGAR BIT .

  "DJNZ"   SUBITRAIR 1 E PULA, SE O ENDEREÇO DIFERENTE DE ZERO.

  "JMP"    PULA DIRETO

  "CALL"   CHAMA SUB-FUNÇÃO.

  "NOP"    NÃO FAZ  NADA.

 

5.3-TIPOS DE ENDEREÇAMENTO:

 

  " #  "  INDICA VALORES

  "@ "  ENDEREÇAMENTO INDIRETO

  "R0" REGISTRADOR, TAMBEM É REGISTRADOR , QUALQUER VALOR QUE NÃO TENHA "#" OU "@"

 

OBS: PROGRAMAS EM "ASM", USAM HEXA-DECIMAL, POR ISSO TODOS OS VALORES TEM "H" NO FINAL. 

 

5.4-*PORTAS & (ENDEREÇOS):

 

Em  micro-controladores Portas são o conjunto  de bit(s) ou seja pinos, que formam uma palavra. cujo o tamanho  e definido pela capacidade do micro-controlador. 

 

 

 

Na  família 8051 SÃO 4 PORTAS , P0 ; P1 ; P2 ; P3  .CADA UMA COM 8 PINOS (micro-controlador  de 8 bits) CAPACIDADE  TOTAL DE 32 DISPOSITIVOS.

 

P0 = 80H

P1 = 90H

P2 = 0A0H

P3 = 0B0H

 

 

 

 

 

 

-----EXEMPLO DE MOVIMENTAÇÃO DE DADOS  DIRETO PELA PORTA----

 

mov 80,#00h   =>P0

mov 90,#00h   =>P1       ; JOGA VALOR “0” PARA AS PORTAS, (zera as portas)

mov 0A0,#00h =>P2

mov 0B0,#00h =>P3

 

-------------------------------------------------------------------------------------------------------

 

mov 80,#FFh    =>P0

mov 90,#FFh    =>P1     ; JOGA VALOR “FFh” PARA AS PORTAS, (LIGA as portas)

mov 0A0,#FFh =>P2

mov 0B0,#FFh =>P3

 

 

 

LEMBRANDO QUE OS VALORES ESTÃO EM HEXA-DECIMAL E O ZERO EM

HEXA É ZERO TAMBEM EM DECIMAL E A NENHUM BIT LIGADO E “FF” CORRESPONDE A TODOS OS BITS LIGADOS OU 256 EM DECIMAL. 

 

5.5-COMANDOS PINO A PINO

 

OS ENDEREÇOS DE CADA PINO INDIVIDUAL, SÃO TIRADOS DOS ENDEREÇOS DAS PORTAS.

 

POR EXEMPLO A PORTA “P0”ENDEREÇO “80H”:

 

PRIMEIRO  BIT  = 80H    => P0.0

SEGUNDO  BIT  = 81H    => P0.1

TERCEIRO BIT  = 82H    => P0.2

QUARTO    BIT  = 83H    => P0.3

QUINTO     BIT  = 84H    => P0.4

SEXTO       BIT  = 85H     => P0.5

SÉTIMO     BIT  = 86H     => P0.6

OITAVO     BIT  = 87H    => P0.7

 

LEMBRANDO QUE SEMPRE COMEÇA NO ZERO E TERMINA NO SETE.

(NO CASO DE UM MICRO-CONTROLADOR DE OITO BIS)

AS OUTRAS PORTAS SEGUEM O MESMO PRINCÍPIO.

 

;**SETB LIGA PINO**.

 

setb P0.0                           ;acende os TRES  PRIMEIROS leds da “P0” UM A UM

setb P0.1

setb P0.2  …

 

DEPENDENDO DO COMPILADOR ESSE COMANDO NÃO VAI SER RECONHECIDO SE ESCRITO DESSA FORMA, SENDO MELHOR RECONHECIDO PELO ENDEREÇO !!!!!

EX

 

setb   80H                           ; acende os TRES  PRIMEIROS leds da “P0” UM A UM

setb   81H

setb   82H  …

;--------------------------------------------------------------

;**CLR APAGA PINO**.

 

CLR   P0.0                          

CLR   P0.1                           ;APAGA os leds da P0

CLR   P0.2

CLR   P0.3

CLR   P0.4

CLR   P0.5

 

DEPENDENDO DO COMPILADOR ESSE COMANDO NÃO VAI SER RECONHECIDO SE ESCRITO DESSA FORMA, SENDO MELHOR RECONHECIDO PELO ENDEREÇO !!!!!

 

CLR  80H                           ;APAGA os leds da P0

CLR  81H

CLR  82H

CLR  83H

CLR  84H

 

;**********************************************************************

 

5.6-**ROTINA DE TEMPO**

 

 

TEMPO:

                 mov r6,#0ffh

 

delay_a:   mov r7,#09h

 

delay_B:   djnz r7,delay_B

 

                 djnz r6,delay_a

 

                 ret

 

;--------------------------

 

 JOGA VALOR "FFh"NO REGISTRADOR 6 (256 EM DECIMAL)

 

 JOGA VALOR "09h"NO REGISTRADOR 7 (NOVE EM DECIMAL)

 

SE VALOR NO REGISTRADOR 7 DIFERENTE DE ZERO, SUBITRAIR UM E CONFERIR DENOVO.

 

SE VALOR NO REGISTRADOR 6 DIFERENTE DE ZERO, SUBITRAIR UM E VOLTAR PARA O INICIO.

 

*ESSA ROTINA SERVE PARA CONTROLAR O TEMPO DE UM PROGRAMA.  

 

 

 

;*********************************************************************

 

 

5.7-MODULO MINIMO

 MODULO MINIMO É O MINIMO NECESSÁRIO PARA O FUNCIONAMENTO DO MICRO-CONTROLADOR .

 

 

 modulo

 

 

 

OBS: O PINO 31 NESSE MICRO CONTROLADOR,  CORRESPONDE A OPCAO DE MEMORIA INTERNA OU EXTERNA SENDO NIVEL LOGICO 1 PARA MEMORIA INTERNA E 0 PARA MEMORIA EXTERNA 

 

 

 

 

 

 

 

 

 

 

5.8-ALIMENTACAO

PRIMEIRA PARTE  ALIMENTAÇÃO:  NO CASO DA FAMILIA 8051 A VOLTAGEM DE ALIMENTAÇÃO É 5V, QUE DEVERÁ SER LIGADO AO PINO 20 E AO PINO 40   : (40 POSITIVO (+) E  PINO 20 NEGATIVO (-) ), O PINO 31 REFERE-SE A MEMORIA INTERNA OU EXTERNA,  VOCE DEVERÁ  LIGAR TAMBEM NO POSITIVO DA PLACA. 

 

PARA CONTROLAR A VOLTAGEM EM 5V RECOMENDO UTILIZAR  UM REGULADOR DE TENSÃO (7805) QUE REGULA A TENSÃO PARA 5V.

 a

 

 

SEGUNDA PARTE: VOCE TAMBEM DEVERÁ  FAZER O CIRCUITO REFERENTE A FREQUENCIA DE FUNCIONAMENTO  DO MICROCONTROLADOR,  ELE CONSISTE EM DOIS CAPACITORES CERAMICOS  IGUAIS  ELES PODEM SER DE (20 pF ATÉ  40 pf)  , E UM CRISTAL OSCILADOR DE 10.000HZ. LIGADOS AOS PINOS 18 E 19  do MICROCONTROLADOR  E AO TERRA (NEGATIVO DA PLACA).

 d

 

 

 

5.9-RESET

TERCEIRA PARTE: AGORA FALTA A ESTRUTURA DO RESET (PINO 9),

 UM PULSO MOMENTANEO NO PINO 9 FAZ O 8051 FUNCIONAR , PARA FAZER ISSO SE UTILICA UM CAPACITOR ELETROLITICO 10uF E UM RESISTOR DE 10K .

 

                             / +5V

                              |

                              |

                             --- +

                  10uF  ---  Capacitor

                              |

                              |

   PC (D4) ---> --[1k]-----o----------> AT89S8252 Pin:9 (Reset)

                              |

                              |

                              -

                   10k   | |  Resistor

                              - 

                              |

                              |

                             --- GND

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5.10-PROGRAMACAO PARALELA

 

LIGAÇÃO COM O PC :

 

   PORTA DE IMPRESSORA                   ATMEL  8051

   Pin:6  (D4)                                           Pin:9  (RESET)

   Pin:7  (D5)                                           Pin:6  (MOSI)p1.5

   Pin:8  (D6)                                           Pin:8  (SCK) p1.7

   Pin:10 (ACK)                                        Pin:7  (MISO)p1.6

   Pin:25 (GND)                                       Pin:20 (GND)

 

A PINAGEM PODE VARIAR , POIS TEM QUE ACOMPANHAR O PROGRAMA E O MODELO DO MICRO CONTROLADOR  ESSA PINAGEM FUNCIONA PARA A SÉRIE “S” DO 8051 NO PROGRAMA

ISP-HB E  AUGUS OUTROS.

EX : AT89S8252 /  AT89S8253

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Bascon(basic)

Dim I As Byte                                                   definição de tipo de variável

Config      Servo1 = P3.5 , Servo2 = P3.7        atribuição de nome a uma variável

---------------------------------------                                          

 

 

Comandos

------------------------------------------

Repetição

 

For Page = 1 To 10

Next

----------------

While A < 10                                                  testa e continua ate condicao ser verdadeira

   Inc A                               

Wend                                                         

----------------

Do

conteudo

Loop         Volta ate o do

---------------------------------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

portas

P2     =  255                                       pode se jogar valores direto para as portas

P3.5  =  1

P2     =  FF HEX

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

Tempo

 

Delay                                                             'rápido

Wait         3                                                   ‘em segundos

Waitms   10                                                   ‘em  millisegundos

 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

texto

Print    "texto"                         e só colocar entre aspas

Key = Inkey()                         recebe dados do teclado e coloca no nome key

 

 Key2 = Waitkey()                      espera receber dados do teclado e coloca no nome key2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

condicional

Select Case I

     Case 1      : Print "1"

    Case 2      : Print "2"  

    Case Else :   Print "nao consta"             ‘caso contrario

  End Select

 

 

If    A = "2" Then                                          

(Instrucao)

  End If

 

 

=====================================================================

Dim I As Byte                                                 

Dim S As String * 5 , Z As String * 5

Do

  Input    , I                     "I e a variavel que recebe valor de 0 a 255 –poderia ser uma porta ou registrador-"

------------------------------------------------------------------------------------------------

  Select Case I

    Case 1 : Print "1"

    Case 2 : Print "2"

    Case 10 To 20 : Print "10-20"

    Case Is >= 30 : Print ">= 30"

---------caso contrario--------------------------------------------------------------------------

    Case Else : Print "Not in Case statement"

  End Select

----------------------------------------------------------------------------------

Loop

End

=======================================================================

 

 

 

 

 

 

==========repeticao+portas==========================================

For Page = 1 To 10

  P2 = 255

  Wait 1

  P2 = 0

  Wait 1

Next

===========================================================

 

 

 

 

--------------------delay-------------------------------------------------------------------------

Print "Starting"

Delay                                                         'lets wait for a very short time

Wait 3                                                        ‘em segundos

Print "Ready"

Waitms 10                                                 ‘em  millisegundos

End

----------------------------------------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

+++++++++++++++++++++++++++++++++++++++++++++++++++++

Dim A As Byte

A = 1                                                         'assign var

While A < 10                                                  'test expression

   Print A                                                    'print var

   Inc A                                'increase by one

Wend                                                          'continue loop

End

+++++++++++++++++++++++++++++++++++++++++++

 

 

 

 

 

-------------------------------------------------------------------------------

Dim  Pulses As Byte ,    Periods As Integer

Pulses = 100 : Periods = 10                                   'set variables

Speaker Alias P1.1                                            'define port pin

Sound Speaker , Pulses , Periods                              'make some noice

'pulses  range from 1-32767

'periods range from 1-255

 

End

++++++++++++++++++++++++++++++++++++++++++++++++++

 

 

 

 

+++++++importante+++++++++++++++++++++++++++++++++++++

= "89c51rd.dat"

Dim I As Byte

'------------------------------------------

 Do

'==================

For I = 1 To 10

  P2 = 255

Waitms 01

  P2 = 0

 Waitms 19

Next

'==================

Print "Hell"

 Loop

'---------------------------------------

End

++++++++++++++++++++++++++++++++++++++++++++++++

 

 

 

 

 

 

======================================================================

Config Servos = 2 , Servo1 = P3.5 , Servo2 = P3.7 , Reload = 100

Dim Key As Byte

Servo1 = 2                                                  

Servo2 = 2                                        

Do

  Print "aperte a tecla"

  Wait 1                                                      'this will take some longer because of the interrupt used

  Key = Inkey()

  If Key = "2" Then                                           'if we press 1

     Servo1 = 4                                               '2= 0.6ms ;4=1ms

  End If

Loop

End

=====================================================================

 

 

 

 

 

 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Config Servos = 2 , Servo1 = P3.5 , Servo2 = P3.7 , Reload = 100

Dim Key As Byte                                        ‘define “key” como de 0 a 255

Servo1 = 2                                                    'comeca do zero

Servo2 = 2                                                    'comeca do zero

Do

  Print "aperte a tecla"

  Wait 4                                                         ‘espera 4 segundos

  Key = Inkey()                                             ‘le teclado     

'------------------------------------------------------------------------------------------------

  Select Case Key                                        ‘serie de condicionais

    Case "3" : Servo1 = 4

    Case "2" : Servo1 = 5

    Case 10 To 20 : Print "10-20"

    Case Is >= 30 : Print ">= 30"

  End Select

'----------------------------------------------------------------------------------

Loop                                                           ‘volta para onde tem o do

End                                                              ‘fim

++++++++++++