gravação e leitura na eeprom

6
Programação Microcontrolador PIC 16F877A MICROCONTROLADORES Engenharia de Controle e Automação (Mecatrônica) UNIP Campus Tatuapé 2014

Upload: diego-ferreira-santos

Post on 19-Jan-2016

61 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Gravação e Leitura Na EEPROM

Programação Microcontrolador PIC 16F877A

MICROCONTROLADORES

Engenharia de Controle e Automação (Mecatrônica)

UNIP – Campus Tatuapé

2014

Page 2: Gravação e Leitura Na EEPROM

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.

Page 3: Gravação e Leitura Na EEPROM

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

Page 4: Gravação e Leitura Na EEPROM

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:

Page 5: Gravação e Leitura Na EEPROM

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:

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

Page 6: Gravação e Leitura Na EEPROM

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.