gravação e leitura na eeprom
TRANSCRIPT
Programação Microcontrolador PIC 16F877A
MICROCONTROLADORES
Engenharia de Controle e Automação (Mecatrônica)
UNIP – Campus Tatuapé
2014
2 6 de maio de 2014
UNIP
Engenharia de Controle e Automação (Mecatrônica)
Nome: Diego Ferreira Santos RA: B142DC - 5
Turma: EA6P33 Data: 06/05/2014
Nome: Karina Yoko Makiyama RA: B058AD - 0
Turma: EA7P33 Data: 06/05/2014
Nome: Reginaldo Argemiro Ferreira dos Santos RA: A824EE - 9
Turma: EA7P33 Data: 06/05/2014
MICROCONTROLADOR PIC 16F877A
São Paulo
2014
Para a matéria Microcontrolador e
Microprocessador do curso de engenharia Mecatrônica 7° Semestre, foi determinada uma folha de exercícios
para a elaboração de um relatório com a programação em linguagem C, a fim de
mostrar praticamente a aplicação de microcontroladores PIC 16F877A nos setores fabris. Este relatório abordará as
programações em linguagem C detalhadas, utilizando-se de softwares
auxiliares na simulação, circuito no Protheus e compilação destes
programas.
3 6 de maio de 2014
*INDICE*
Gravação e Leitura da EEPROM - PIC 16F877A
*Programa Gravação e Leitura em EEPROM em linguagem C* · 4
*Circuito no Protheus do programa Gravação e Leitura em EEPROM* · 6
4 6 de maio de 2014
----------------------------------------------------------------------------------------------------------------------------------------- --
*Programa Gravação e Leitura em EEPROM em linguagem C*
--------------------------------------------------------------------------------------------------------------------------------------- ----
1: #include "16F877A.h"
2: #device adc=10 //Define que usarei a resolução de 10bits
3: #Use Delay (clock=4000000)
4: #Fuses xt,nowdt,put,nowrt,noprotect,nocpd,nolvp,nobrownout
5:
6: #byte porta = 0x05
7: #byte portb = 0x06
8: #byte portc = 0x07
9: #byte portd = 0x08
10: #byte porte = 0x09
11:
12: #bit entrada = portd.0 //Definição de botão para gravar na EEPROM
13: #bit led = portd.1 //Definição de botão para ler a eeprom e mostrar nos 10 led's
14:
15: Void Main ()
16:
17: Int ba=0,au=0,rd=0,rd1=0,ls=0,hs=0;
18: Long int conversao; //Porque a resolução do PIC16F877A é 10bits
19: set_tris_a(0b00000001); //Definição de entrada/saídas do port A para o potenciômetro, pois é
entrada analógica AN0
20: set_tris_b(0b00000000); //Definição de saídas do port B
21: set_tris_c(0b00000000); //Definição de saídas do port C
22: set_tris_d(0b00000011); //Definição de entradas/saídas do port D para gravação e leitura da
EEPROM
23: set_tris_e(0b00000000); //Definição de saídas do port E
24: porta=0x00; //Limpa o port A
25: portb=0x00; //Limpa o port B
26: portc=0x00; //Limpa o port C
27: portd=0x00; //Limpa o port D
28: porte=0x00; //Limpa o port E
29: setup_adc_ports(AN0); //Definição da configuração de entradas analógicas
30: setup_adc(adc_clock_internal); //Definição da velocidade de clock para o conversor A/D
31: set_adc_channel(0); //Especificação do canal que será utilizado quando o comando read_adc() for
executado
32: While(1)
33:
34: If(entrada == 1)
35:
5 6 de maio de 2014
36: au=ba; //Grava em uma variável auxiliar a posição de parada que foi gravado o último endereço da
EEPROM
37: While (entrada == 1) ;
38: conversao = read_adc(); //Lê o canal analógico (AN0) e grava na variável conversao
39: delay_us(25); //Utiliza um delay para a equalização da entrada analógica
40: ls = (conversao+1); //Grava 8 bits menos significativos do sinal analógico e faz uma correção para
1024 devido a resolução e ao arredondamento
41: hs = (conversao >> 8); //Grava 8 bits mais significativos do sinal analógico
42: If (conversao == 0) //Este If é utilizado para a correção do +1 quando a entrada analógica for 0
43:
44: ls=0;
45:
46: write_eeprom(au,ls); //Grava na EEPROM o endereço au o conteúdo da variável ls, pois a memória
consegue armazenar apenas 8bits, por isso foi dividida em 2 endereçamentos
47: au++; //Vai para o próximo endereço da EEPROM
48: write_eeprom(au,hs); //Grava na EEPROM o endereço au o conteúdo da variável hs
49: au++; //Vai para o próximo endereço da EEPROM
50: ba=au;
51:
52: If(led == 1)
53:
54: au=0; //Vai para endereço 0 da EEPROM
55: While(au<256)
56:
57: rd=read_eeprom(au); //Lê a EEPROM e armazena na variável rd o byte menos significativo
58: output_b (rd); //Manda para o port B
59: au++; //Vai para o próximo endereço da EEPROM
60: rd1=read_eeprom(au); //Lê a EEPROM e armazena na variável rd1 o byte mais significativo
61: output_c (rd1); //Manda para o port C
62: au++; //Vai para o próximo endereço da EEPROM
63: delay_ms(1000); //Tempo de delay de um segundo
64:
65:
66: output_b (0x00);
67: output_c (0x00);
68:
69:
-------------------------------------------------------------------------------------------------------------------------- ----------------------
6 6 de maio de 2014
----------------------------------------------------------------------------------------------------------------------------- --------------
*Circuito no Protheus do programa Gravação e Leitura em EEPROM*
----------------------------------------------------------------------------------------------------------------------------- --------------
Componentes
V1 – Voltímetro;
RV1 – Potenciômetro com resistor de 1kΩ;
PE – Ponto de aterramento;
B0 – Botão para gravar na EEPROM (entrada);
B1 – Botão para mostrar nos Led’s o que está na EEPROM (LED);
U1 – Microcontrolador PIC16F877A;
U2 – Conjunto com 10 Led’s.