quarta-feira, 17 de outubro de 2012

Lista Material para hardware básico AT89S51

Lista de Material para PCI AT89S52 2010_2_USB
Valor Descrição       QTD              




100nF Capacitor Cerâmico 1 C4
10uF 50V Capacitor Eletrolítico 5 C1
12MHz Cristal 1 X1
1N4004 Diodo 1 D1
33pF /50V Capacitor Cerâmico 2 C1 E C2
7805 TO-220A 1 U1
CI AT89S52 DIP-40 1 IC1
CNC  Fêmea 90º solda placa 1 CN1
Max232  Conversor de Interface 1 IC2
HEADER 6X2 Barra dupla 40 pinos 1 SV1,SV2,SV3,SV4
LED LED 3mm  1 LD1 
Soquete soquete 40 pinos 1 IC1
Soquete soquete 16 pinos 1 IC2
Dissipador Dissipador para TO-220A 1
p4 solda placa CN2

Circuito Básico AT89S51

Ferramentas para Microcontroladores

http://www.4shared.com/file/h1GJ8fV6/KEIL_C51_v816a.html

terça-feira, 2 de outubro de 2012

Programa para LCD


 #include <REGX52.H>

#define LCD_data P2
#define LCD_rs P1_0
#define LCD_rw P1_1
#define LCD_en P1_2


void LCD_busy(void);
void LCD_poweron(void);
void LCD_command(unsigned char var);
void LCD_senddata(unsigned char var);
void LCD_sendstring(unsigned char *var);
void LCD_init(void);

void main(void)
{
        unsigned char msg[] ="Escola America";
        LCD_poweron();    // tempo de 15ms
                LCD_init();
                LCD_command (0x80);     // Seta endereço de comando no CGRAM do LCD
       LCD_sendstring(msg);
                while(1);
}

void LCD_busy()
{
    unsigned char i,j;
        for(i=0;i<50;i++)
                for(j=0;j<255;j++); //tempos para escrever no display
}
void LCD_poweron()
{
unsigned int i;
for (i=0;i<22500; i++); //tempo  que define velocidade da mensagem
}
void LCD_command(unsigned char var)
{
     LCD_data  = var;      //Function set: define par o lcd duas linhas, 8-bit, e tamanho do caracter 5x8 dots
     LCD_rs   = 0;        //Seleta comando RS comand register
     LCD_rw   = 0;        //instruçao de registro de leitura e escrita
     LCD_en   = 1;        //habilita em 1 desabilita em 0 Enable H->L
     LCD_en   = 0;
     LCD_busy();          //espera o lcd  processar suas informaçoes
}

void LCD_sendstring(unsigned char *var)
{
     while(*var)              //espera fim da string - till string ends
       LCD_senddata(*var++);  //envia os caracteres uma vez - send characters one by one
}

void LCD_senddata(unsigned char var)
{
     P2  = var;      //Coloca os dados 0 a7 na P2 - Function set: 2 Line, 8-bit, 5x7 dots
     LCD_rs   = 1;        //Seleciona o registro de dados - Selected data register
     LCD_rw   = 0;        //Seleciona LCD para escrever - We are writing
     LCD_en   = 1;        //habilita LCD - Enable H->L
     LCD_en   = 0;
     LCD_busy();          //Espera o lcd processar seus dados - Wait for LCD to process the command
}

void LCD_init(void)
{
     LCD_data = 0x38;     //Function set: 2 Line, 8-bit, 5x8 dots
     LCD_rs   = 0;        //Selected command register
     LCD_rw   = 0;        //We are writing in data register
     LCD_en   = 1;        //Enable H->L
     LCD_en   = 0;
     LCD_busy();          //Wait for LCD to process the command
     LCD_data  = 0x0F;     //Display ligado e cursor piscando - Display on, Curson blinking command
     LCD_rs   = 0;        //Selected command register
     LCD_rw   = 0;        //We are writing in data register
     LCD_en   = 1;        //Enable H->L
     LCD_en   = 0;
     LCD_busy();          //Wait for LCD to process the command
     LCD_data  = 0x01;     //limpa lcd - Clear LCD
     LCD_rs   = 0;        //Selected command register
     LCD_rw   = 0;        //We are writing in data register
     LCD_en   = 1;        //Enable H->L
     LCD_en   = 0;
     LCD_busy();          //Wait for LCD to process the command
     LCD_data  = 0x06;     //Entra no modo deslocamento dos caracterres - Entry mode, auto increment with no shift
     LCD_rs   = 0;        //Selected command register
     LCD_rw   = 0;        //We are writing in data register
     LCD_en   = 1;        //Enable H->L
         LCD_en   = 0;        //Enable H->L
     LCD_busy();
}