Quantas linhas de programa possui o PIC16F84A?

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Quantas linhas de programa possui o PIC16F84A?

Mensagempor Kleber » 07 Set 2010 11:17

Olá pessoal!

Airton
word é o que expliquei.....
A memoria ou registrador nos pics 24 é de 16 bits, nos pics 16 a momoria ou word é de 14 bits.
A palavra reservada word é exatamente o mesmo que endereçamento de memoria ou registrador..... pense.... se um pic tem 16 k words de memoria, ele tem 16 k de words de 14 bits caso seja um pic 16F por exemplo ou 16 x 1024 x 14 bits.....
A palavra reservada word é para identificar qual endereço de memoria ela aponta....
- trecho retirado da comunidade microcontroladores do Orkut

Bem, olhando o datasheet do PIC16F84A, verifica-se que o mesmo possui uma memória de programa de 1024 words. Assim, eu entendo que o meu programa pode ter 1024 instruções (ou linhas) do tamanho de 14 bits. Mas achei uma apostila na internet que diz o seguinte:

Para saber quantas instruções cabem na memória de programa, devemos conhecer o tamanho da memória de programa. Será? Veremos. Lembre-se que a memória de programa é de 2 elevado a 14. Dois, pois, estamos trabalhando em binário, 0 e 1 e 14, pois este é o tamanho, em bits, de cada posição. Desta forma teremos:

2^14 = 16.384

16.384 ÷ 14 = 1.170

Podemos ter na memória de programa 1.170 instruções. Dá um “programão”.

E aí gente? 1024 ou 1170 linhas?

Desde já, obrigado a todos que postarem respostas!
Kleber
Kleber
Nibble
 
Mensagens: 99
Registrado em: 17 Out 2006 20:41
Localização: São Paulo

Mensagempor renatokodaira » 07 Set 2010 12:15

Voce fez confusao.

O 16F84(A) tem memoria para programa de 1024 posiçoes (words) de 14 bits cada, ou seja voce pode ter um programa de no maximo 1024 instruçoes.

A Microchip ajuda na confusao ao dizer que a memoria de programa tem 1024 x 14 bits = 14336 bits o que "equivaleria" a 14336/8 = 1792 bytes ...

Cada instruçao tem 14 bits de op code (codigo de maquina) que eh alocada em cada posiçao da memoria de programa.

2^14 somente quer dizer que em cada posiçao de memoria temos 16384 combinaçoes possiveis de bits 1 e 0 para gravar naquela unica posiçao.

Na verdade os PICs aproveitam os 14 bits para numa soh posiçao, incluir o codigo da instruçao mais o valor do operando (geralmente de 8 bits). Veja que 6 bits restantes permitem 64 combinaçoes diferentes o que permitiria diferenciar 64 instruçoes diferentes, mas a serie 16F soh tem 35 instruçoes.

Jah na serie 18F, as posiçoes sao de 16 bits (na verdade 2 posiçoes de 8 bits cada).

Entao, 14bits de core ou 16 bits de core, nos PICs significa apenas a largura de cada posiçao da memoria de programa, nada a ver com o comprimento ou quantidade de posiçoes de programa.
renatokodaira
Byte
 
Mensagens: 402
Registrado em: 11 Out 2006 15:15

Mensagempor Kleber » 07 Set 2010 12:59

Renato,

A conta 2^14 não fui eu quem fiz, foi o autor de uma apostila que peguei na internet : http://www.scribd.com/doc/12307141/Apos ... f84-16f628 e o trecho citado é um resumo que se encontra no final do capítulo 4.
Entretanto, também posso estar entendo errado, vejamos a partir da suas afirmações.

O 16F84(A) tem memoria para programa de 1024 posiçoes (words) de 14 bits cada, ou seja voce pode ter um programa de no maximo 1024 instruçoes.
Eu também entendo desta maneira, entretanto eu disse que ele pode ter até 1024 linhas de programa (comandos ou instruções). Cada "linha" possui 14 bits. Estou correto?

A Microchip ajuda na confusao ao dizer que a memoria de programa tem 1024 x 14 bits = 14336 bits o que "equivaleria" a 14336/8 = 1792 bytes ...
Está informação, quantidade de bytes, iria me ajudar no quê? Saber o tamanho máximo do meu arquivo .hex gerado?


Cada instruçao tem 14 bits de op code (codigo de maquina) que eh alocada em cada posiçao da memoria de programa.
OK. 14 bits = 6 instruções + 8 dados (que são os operandos). Assim, 2^6 = 64 instruções poderiam ser utilizadas...mas série 16F = 35 instr.

Resumindo, entendi que esta conta 2^14 da apostila está incorreta, pois mostra somente a quantidade de variações de zeros e uns que posso ter em 14 bits.
Agora, quanto as minhas posições, estou correto?

Obrigado pelas repostas!
Kleber
Kleber
Nibble
 
Mensagens: 99
Registrado em: 17 Out 2006 20:41
Localização: São Paulo

Mensagempor renatokodaira » 07 Set 2010 16:23

Eu também entendo desta maneira, entretanto eu disse que ele pode ter até 1024 linhas de programa (comandos ou instruções). Cada "linha" possui 14 bits. Estou correto?


Voce estah correto em termos, porque num programa assembly nem todas as linhas se referem a instruçoes do processador propriamente ditas (que vao efetivamente usar a memoria de porgrama flash ou rom). Existem linhas do programa que sao de configuraçao, nomes de labels, designaçao de variaveis, comentarios, etc e que nao usam a memoria de programa. E mesmo as 1024 posiçoes de memoria de programa as vezes podem conter outros dados como tabelas, valores de calibraçao, etc alem de codigos de instruçao propriamente ditos.

A conta 2^14 não fui eu quem fiz, foi o autor de uma apostila que peguei na internet : http://www.scribd.com/doc/12307141/Apos ... f84-16f628 e o trecho citado é um resumo que se encontra no final do capítulo 4.


Essa citaçao nao estah correta, desculpe se entendi que voce afirmou isso. Essa eh uma conta que o pessoal faz pra descobrir qual a capacidade de endereçamento de memoria externa de processadores sabendo quantos pinos de endereçamento ele possui. Por exemplo, um microprocessador Z80 tem 16 linhas de endereçamento e podia acessar entao 2^16 posiçoes de memoria (ROM ou RAM).

No caso do PIC, cuja memoria de programa estah embutida no proprio chip, tudo isso eh feito internamente, e o acesso eh determinado pelo registrador program counter que tem 13 bits (o que daria pra acessar ateh 2^13 posiçoes = 8192), mas isso nao significa que o fabricante implemente e coloque no chip toda memoria que ele pode acessar (no caso do 16F877A, ele tem todas as 8192 posiçoes possiveis implementadas em flash). Alem disso o PC eh dividido em duas partes o PCL (os 8 LSb) e o PCLATH (contem os 5 MSb do PC).

A Microchip ajuda na confusao ao dizer que a memoria de programa tem 1024 x 14 bits = 14336 bits o que "equivaleria" a 14336/8 = 1792 bytes ...
Está informação, quantidade de bytes, iria me ajudar no quê? Saber o tamanho máximo do meu arquivo .hex gerado?


Entao, isso eh soh marketing do fabricante, pra parecer que tem mais memoria ou contar a historia de outra forma. Eh a mesma historia dos fabricantes de audio, com aquela balela de potencia pmpo, etc

Se ficou alguma duvida, posso tentar esclarecer mais.
renatokodaira
Byte
 
Mensagens: 402
Registrado em: 11 Out 2006 15:15

Mensagempor EvandrPic » 07 Set 2010 18:16

renatokodaira escreveu:Voce estah correto em termos, porque num programa assembly nem todas as linhas se referem a instruçoes do processador propriamente ditas (que vao efetivamente usar a memoria de porgrama flash ou rom). Existem linhas do programa que sao de configuraçao, nomes de labels, designaçao de variaveis, comentarios, etc e que nao usam a memoria de programa. E mesmo as 1024 posiçoes de memoria de programa as vezes podem conter outros dados como tabelas, valores de calibraçao, etc alem de codigos de instruçao propriamente ditos.

Os comentários não são colocados na memória de programa. O compilador os ignora, lembra?
EvandrPic
Dword
 
Mensagens: 2116
Registrado em: 31 Mar 2010 15:05

Mensagempor Kleber » 07 Set 2010 18:55

Valeu pessoal!

Obrigado pelos esclarecimentos!
Kleber
Kleber
Nibble
 
Mensagens: 99
Registrado em: 17 Out 2006 20:41
Localização: São Paulo

Mensagempor renatokodaira » 08 Set 2010 21:49

renatokodaira wrote:

Voce estah correto em termos, porque num programa assembly nem todas as linhas se referem a instruçoes do processador propriamente ditas (que vao efetivamente usar a memoria de porgrama flash ou rom). Existem linhas do programa que sao de configuraçao, nomes de labels, designaçao de variaveis, comentarios, etc e que nao usam a memoria de programa. E mesmo as 1024 posiçoes de memoria de programa as vezes podem conter outros dados como tabelas, valores de calibraçao, etc alem de codigos de instruçao propriamente ditos.

Evandro escreveu:

Os comentários não são colocados na memória de programa. O compilador os ignora, lembra?


Ueh, foi o que eu escrevi ... ?????????
renatokodaira
Byte
 
Mensagens: 402
Registrado em: 11 Out 2006 15:15

Mensagempor EvandrPic » 08 Set 2010 22:07

renatokodaira escreveu:
renatokodaira wrote:

Voce estah correto em termos, porque num programa assembly nem todas as linhas se referem a instruçoes do processador propriamente ditas (que vao efetivamente usar a memoria de porgrama flash ou rom). Existem linhas do programa que sao de configuraçao, nomes de labels, designaçao de variaveis, comentarios, etc e que nao usam a memoria de programa. E mesmo as 1024 posiçoes de memoria de programa as vezes podem conter outros dados como tabelas, valores de calibraçao, etc alem de codigos de instruçao propriamente ditos.

Evandro escreveu:

Os comentários não são colocados na memória de programa. O compilador os ignora, lembra?


Ueh, foi o que eu escrevi ... ?????????

Opa... foi mal... desculpa... :roll:
Realmente foi o que você disse..rs
EvandrPic
Dword
 
Mensagens: 2116
Registrado em: 31 Mar 2010 15:05


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x