Total de visitas: 5107
Microcontrolador ms51(8051)
5.MS-51 (8051)
5.1- AT 89S8252 características:
- 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 “
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 .
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
PARA CONTROLAR A VOLTAGEM EM 5V RECOMENDO UTILIZAR UM REGULADOR DE TENSÃO (7805) QUE REGULA A TENSÃO PARA 5V.
SEGUNDA PARTE: VOCE TAMBEM DEVERÁ FAZER O CIRCUITO REFERENTE A FREQUENCIA DE FUNCIONAMENTO DO MICROCONTROLADOR, ELE CONSISTE
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
++++++++++++