microcontrolador 8051

Embed Size (px)

Citation preview

MICROCONTROLADOR 8051

Eng. Jefferson Couto

INDICE1) SISTEMAS DE NUMERAO................................................................................................................................................... 3 1.1) SISTEMA BINRIO (BASE 2) ............................................................................................................................................ 3 1.2) SISTEMA HEXADECIMAL (BASE 16)................................................................................................................................ 4 1.3) FORMAS DE APRESENTAO ........................................................................................................................................ 4 1.4) CONVERSO DO SISTEMA BINRIO PARA O SISTEMA DECIMAL ............................................................................... 5 1.5) CONVERSO DO SISTEMA HEXADECIMAL PARA O SISTEMA DECIMAL .................................................................... 5 1.6) CONVERSO DO SISTEMA DECIMAL PARA O SISTEMA BINRIO ............................................................................... 5 1.7) CONVERSO DE DECIMAL PARA UMA BASE QUALQUER............................................................................................ 6 1.8) CONVERSO ENTRE AS BASES 2 E 16 .......................................................................................................................... 6 2) OPERAES ARITMTICAS NO SISTEMA BINRIO ............................................................................................................. 8 2.1) ADIO.............................................................................................................................................................................. 8 2.2) SUBTRAO ..................................................................................................................................................................... 8 2.3) COMPLEMENTO DE 2 ....................................................................................................................................................... 9 2.4) DESLOCAMENTO............................................................................................................................................................ 11 3) OPERAES LGICAS ......................................................................................................................................................... 12 3.1) AND.................................................................................................................................................................................. 12 3.2) OR .................................................................................................................................................................................... 13 3.3) NOT.................................................................................................................................................................................. 13 3.4) XOR.................................................................................................................................................................................. 14 4) TERMOS IMPORTANTES ....................................................................................................................................................... 16 5) MICROCONTROLADORES..................................................................................................................................................... 21 5.1) MICROPROCESSADOR: ................................................................................................................................................. 21 5.2) BARRAMENTOS DE UM MICROCONTROLADOR.......................................................................................................... 23 5.3) MODOS DE ATENDIMENTO DE I/O................................................................................................................................ 24 6) MICROCONTROLADOR 8031/8051........................................................................................................................................ 25 6.1) PINAGEM:........................................................................................................................................................................... 25 6.2) BARRAMENTO MULTIPLEXADO:............................................................................................................................................. 26 6.3) CLOCK NO 80C51............................................................................................................................................................ 27 ................................................................................................................................................................................................ 28 6.4) RESET DO MICROCONTROLADOR ............................................................................................................................... 28 6.5) INTERRUPOES ............................................................................................................................................................. 30 ................................................................................................................................................................................................ 33 6.6) INTERRUPO EXTERNA .............................................................................................................................................. 34 6.7) TEMPORIZADOR E CONTADOR .................................................................................................................................... 35 6.8) COMUNICAO SERIAL ................................................................................................................................................. 37 6.9) INTERFACE SERIAL NO 8051......................................................................................................................................... 38 6.10) TAXA DE TRANSMISSO PARA OS MODOS 1 E 3 .................................................................................................... 39 6.11) TABELA PRTICA COM TAXAS PARA O CRISTAL DE 11,0592 MHZ .......................................................................... 39 7) PROGRAMAO C PARA O MICROCONTROLADOR 8051.............................................................................................. 40 7.1) TIPOS DE VARIVEIS EM C ........................................................................................................................................... 41 7.2) OPERADORES ARITMTICOS ....................................................................................................................................... 41 7.3) OPERADORES LGICOS E RELACIONAIS ................................................................................................................... 42 7.4) OPERADORES DE MANIPULAO DE BIT ................................................................................................................... 42 7.5) DIRETIVAS FUNDAMENTAIS DO PR COMPILADOR................................................................................................ 43 7.6) CONTROLE DE FLUXO ................................................................................................................................................... 44 7.7) MAPA DE ALOCAO DE VARIVEIS NO 8051 ............................................................................................................ 50

8) AMBIENTE DE DESENVOLVIMENTO INTEGRADO ( IDE )................................................................................................... 51 8.1) MIDE-51 ........................................................................................................................................................................... 52 8.1.1) PRIMEIRO PROGRAMA ............................................................................................................................................... 53 8.1.2) COMPILANDO E CARREGADO O PROGRAMA .......................................................................................................... 54 8.1.3) CONFIGURANDO O EDITOR PARA A PLACA DIDTICA ........................................................................................... 55 8.2) W INLOADER51 ................................................................................................................................................................... 56 9) EXEMPLO DE PROGRAMAS PARA A PLACA DIDTICA PWLOADER51............................................................................ 60 9.1) ENTRADA DE DADOS PELO TECLADO E SADA PELO DISPLAY DE LCD ....................................................................................... 60 9.2) LEITURA NO CONVERSOR ANALGICO/DIGITAL (A/D) ............................................................................................................. 61 9.3) ESCRITA NO CONVERSOR ANALGICO/DIGITAL (D/A) ............................................................................................................ 64 9.4) PHASE WIDTH MODULATION ( PWM) ........................................................................................................................... 65 9.5) MEDIR LARGURA DE PULSO .................................................................................................................................................. 67 10) FUNES DA BIBLIOTECA PWLIB..................................................................................................................................... 69 11) INFORMAES SOBRE O KIT ............................................................................................................................................ 78

PROWARE PROJ. E SIST. ELETRNICOS

1) SISTEMAS DE NUMERAOExistem vrios sistemas de numricos, dentre os quais se destacam o decimal, o binrio, o octal e o hexadecimal. O sistema decimal utilizado por ns no dia a dia, e sem dvida o mais importante dos sistemas numricos, com os quais podemos formar qualquer nmero atravs da lei de formao.

AnBn + An-1Bn-1 + An-2Bn-2 + ... + A0B0Onde:

An = Algarismo B = Base do nmero n = quantidade de algarismos - 1Ex: 25934 n = 5 -1 = 4 B = 10 A0 = 4; A1 = 3; A2= 9; A3 = 5; e A4 = 2 2.104 + 5.103 + 9.102 + 3.101 + 4.100 2.10000 + 5.1000 + 9.100 + 3.10 + 4.1 = 25934 1.1) SISTEMA BINRIO (BASE 2) O sistema binrio de numerao apresenta apenas dois algarismos, o zero e o

um.

Cada algarismo ou dgito de um nmero binrio chamado de BIT que a abreviao de BInary DigiT. O conjunto de 4 bits denominado de NIBBLE, e o de 8 bits de BYTE. O sistema binrio utilizado em sistemas digitais e em microprocessadores, onde o 0 representado por 0V e o 1 geralmente por 5V.

Jefferson Leal Couto

Pgina

3

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS1.2) SISTEMA HEXADECIMAL (BASE 16) O sistema hexadecimal possui 16 smbolos para representar qualquer quantidade. Como so conhecidos apenas dez smbolos numricos ( 0 a 9), adotouse outros seis ( A a F). O sistema hexadecimal tambm muito utilizado na rea de microprocessadores, e tem uma estreita relao com o sistema binrio.

1.3) FORMAS DE APRESENTAO DECIMAL: BINRIO: HEXADECIMAL: 1234d ou (1234)10 0101b ou (0101)2 9CF7h ou (9CF7)16 CONVERSO ENTRE BASES DECIMAL 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 BINRIO 0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 10000 HEXADECIMAL 0 1 2 3 4 5 6 7 8 9 A B C D E F 10

Jefferson Leal Couto

Pgina

4

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS

1.4) CONVERSO DO SISTEMA BINRIO PARA O SISTEMA DECIMAL Para converter um nmero binrio em decimal basta utilizar a lei de formao. EX: Convertendo o nmero 101b em decimal: n= 3 -1= 2 A0 = 1; A1 = 0 e A2 = 1 1.22 + 0.21 + 1.20 = 1.4 + 0.2 + 1.1 = 4+0+1=5 1.5) CONVERSO DO SISTEMA HEXADECIMAL PARA O SISTEMA DECIMAL Para converter um nmero hexadecimal em decimal basta utilizar a lei de formao. EX: Convertendo o nmero ABh em decimal: n= 2 -1= 1 A0 = 11(B) e A1 = 10(A) 10.161 + 11.160 = 171d 1.6) CONVERSO DO SISTEMA DECIMAL PARA O SISTEMA BINRIO Quando trabalhamos com sistemas digitais, muitas vezes existe a necessidade de convertermos os valores decimais em binrios. Para converter um nmero decimal basta dividi-lo pela base 2 tantas vezes quantas necessrias para que o quociente da diviso seja menor que a base 2. O ltimo quociente da diviso e os restos das divises sucessivas, tomados na ordem inversa, correspondem ao nmero na base 2. EX: 129d = ?b

Jefferson Leal Couto

Pgina

5

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS

129d = 10000001b

1.7) CONVERSO DE DECIMAL PARA UMA BASE QUALQUER Para converter de decimal para a base B basta utilizar o mtodo das divises sucessivas dividindo o nmero pela base B

3882d = F2Ah 1.8) CONVERSO ENTRE AS BASES 2 E 16 Existe uma relao estreita entre os sistemas binrio e hexadecimal. Esta relao vem do fato de que o nmero 16 pode ser escrito como 24. Os nmeros hexadecimais podem ser vistos como uma forma compacta de representar os nmeros binrios. Para converter de binrio para hexadecimal devemos seguir os seguintes passos: 1) Divide-se o nmero em grupos de 4 algarismos da direita para a esquerda. 2) Converte-se cada grupo no seu equivalente em hexadecimal, conforme a tabela dada anteriormente. Ex: 1001 1010 0010 1110b 9 A 2 E h A converso de hexadecimal para binrio realizada na seqncia inversa.

Jefferson Leal Couto

Pgina

6

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS1) Converte-se cada algarismo no seu equivalente em binrio utilizando sempre 4 algarsmos. Coloca-se zeros a esquerda quando necessrio. 2) Reune-se os grupos de 4 algarismos. Ex: A2C7h = ?b A 2 C 7 1010 0010 1100 0111 A2C7h = 1010001011000111b Exerccios: Converter os nmeros na base solicitada. 1) 23Fh = ?d 2) 47d = ?b 3) 11010011b = ?d 4) 11100010b = ?h 5) A2Ch = ?d 6) 2DAh = ?b 7) 1110 0001b = ?d 8) 352d = ?h 9) 510d = ?h 10) 120d = ?b

Se voc est confuso e no sabe qual o mtodo usado para fazer a converso, lembre-se: Para converter de binrio ou hexadecimal para decimal utilize a lei de formao. Para converter de decimal para hexadecimal ou binrio faa divises sucessivas. Para converter entre binrio e hexadecimal utilize a tabela.

Jefferson Leal Couto

Pgina

7

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS2) OPERAES ARITMTICAS NO SISTEMA BINRIO2.1) ADIO Para efetuarmos a adio no sistema binrio, devemos agir como numa adio convencional do sistema decimal. Convm observar que no sistema decimal 1+1 = 2d e no sistema binrio como temos apenas dois algarismos 1+1 = 0 e transporta 1. A operao de transporte tambm denominada carry. Ex: 11b + 10b

Ex: 110b + 111b

2.2) SUBTRAO O mtodo de resoluo anlogo a uma subtrao no sistema decimal. importante observar o caso 0 - 1, onde o resultado ser igual a 1 porm haver um transporte para a coluna da esquerda que deve ser acumulado (somado) no subtraindo e, obviamente subtrado do minuendo. A este estouro d-se o nome de borrow.

Jefferson Leal Couto

Pgina

8

Rev. E

PROWARE PROJ. E SIST. ELETRNICOSEx: 1000 - 0011

2.3) COMPLEMENTO DE 2 Uma forma para representar nmeros binrios negativos bastante utilizada nos sistemas j citados a notao de complemento de 2 (C2), mas para obt-la, devemos primeiramente converter o nmero na notao de complemento de 1. A obteno do complemento de um ( C1) de um nmero binrio se d pela troca de cada bit do nmero pelo seu inverso ou complemento. Binrio: 1011 Complemento 1: 0 1 0 0 A notao de complemento de 2 utilizada para representar nmeros binrios negativos. Para obter basta somar 1 ao complemento de 1 do nmero binrio inicial. Decimal Binrio Comp. 2 -1 - 0001 1111 -2 - 0010 1110 -4 - 0100 1100 -8 - 1000 1000

Jefferson Leal Couto

Pgina

9

Rev. E

PROWARE PROJ. E SIST. ELETRNICOSO mtodo do complemento de 2 muito til nas operaes de subtrao. Ex: Subtrao do binrio 1110 - 0011 em complemento de 2

Ex: Subtrao de 0101 - 1100

Como o resultado negativo para obtermos o mdulo devemos fazer o C2 da adio para obtermos o mdulo da subtrao de 0101 - 1100. Portanto teremos: 0110 (C1) + 1 = 0111

Jefferson Leal Couto

Pgina

10

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS2.4) DESLOCAMENTO Deslocando-se os algarismos de um nmero para a sua esquerda, o resultado ser o nmero multiplicado pela sua base. Ex:

O nmero que inicialmente era 0010 ( 2d) foi multiplicado pela sua base (2), que resultou no binrio 0100 (4d). De forma anloga se deslocarmos os algarismos de um nmero para a direita, o resultado ser a diviso do nmero pela sua base. Ex:

O binrio 1000 que representa 8d como foi deslocado para a direita resultou em 0100 que representa 4d, portanto podemos verificar que o nmero foi dividido pela base 2.

Jefferson Leal Couto

Pgina

11

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS3) OPERAES LGICAS

3.1) AND Esta funo executa a multiplicao de duas ou mais variveis booleanas. Sua representao algbrica para duas variveis S = A.B, onde se l S = A e B.

A 0 0 1 1

B 0 1 0 1

S 0 0 0 1

Jefferson Leal Couto

Pgina

12

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS3.2) OR A funo OR aquela que assume valor 1 quando uma ou mais entradas forem iguais a um e assume valor zero se todas as entradas forem zero. Sua representao algbrica para duas variveis de entrada S = A + B, onde se l S = A ou B.

A 0 0 1 1

B 0 1 0 1

S 0 1 1 1

3.3) NOT A funo not inverte ou complementa o estado da varivel, ou seja, se a varivel estiver em zero, a sada vai para 1, e se estiver em 1, a sada vai a zero. representada algebricamente da seguinte forma S = /A, onde se l no A.

A 0 1

S 1 0

Jefferson Leal Couto

Pgina

13

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS3.4) XOR A funo lgica xor, tambm conhecida como ou-exclusivo, apresenta como resultado nvel lgico 1 sempre que existir um nmero impar de nveis lgicos 1 nas entradas. A sua representao algbrica a seguinte S = A B.

A 0 0 1 1

B 0 1 0 1

S 0 1 1 0

A funo xor utilizada para gerar PARIDADE PAR, onde este um dos mtodos para deteco de erro em comunicao digital.

Jefferson Leal Couto

Pgina

14

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS

Exerccios: Obtenha o resultado lgico em hexadecimal para as seguintes operaes: 1) 10d AND 4d 2) 3Fh OR 80h 3) 1001b XOR 1010b 4) 13d OR 9Ch 5) 11000010 AND FFh 6) 24h OR 0d 7) 82h XOR 13h 8) 10101010 AND 55h 9) 5d OR 3h 10) 10111100 AND 00001010 11) NOT 5Ah 12) NOT 13d

Jefferson Leal Couto

Pgina

15

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS4) TERMOS IMPORTANTES4.1) BUFFER: Em geral, chamamos de buffer o circuito que tem por objetivo o armazenamento temporrio de informaes. 4.2) DRIVER: Amplificador de corrente. Usado quando temos que ampliar a capacidade de fornecimento de uma porta. 4.3) FIRMWARE: Programa associado a um hardware para a execuo de funes especficas. Ex: programa gravado em eprom 4.4) TRI-STATE: Nome dado, quando o sistema est fisicamente ligado, porm no interfere no sistema devido a alta resistncia apresentada. 4.5) LATCH: Componente eletrnico que tem a funo de trava de informaes. O latch funciona como uma porta, que estando ativa, deixa passar a informao presente em suas entradas, e se inativa, faz com que a informao na sada no se altere, independente das alteraes na entrada. 4.6) MAPEAMENTO REDUNDANTE: Cada endereo decodificado no nico. O decodificador projetado para separar apenas os dispositivos entre si. Este tipo apresenta hardware menos complexo. 4.7) MAPEAMENTO NO REDUNDANTE: Cada endereo decodificado nico. Constri-se o decodificador utilizando o menor espao de memria. Este tipo de decodificao necessita de um hardware bastante complexo. 4.8) CHIP SELECT (/CS): Este pino est presente na grande maioria dos dispositivos associados a microprocessadores. Como todos os dispositivos (EPROM, RAM, I/O) esto ligados via de dados (D0 ... D7), os mesmos devem estar sempre em alta impedncia para evitar que enquanto um bit esteja em 0, outro esteja em 1, ocasionando um conflito e at mesmo danificando o sistema. Normalmente todos os dispositivos esto com o /CS em 1, e somente ir a 0 aquele dispositivo que est sendo acionado e apenas durante o tempo necessrio. Estes tempos e esta seleo so efetuados por circuitos lgicos conhecidos como DECODIFICADORES DE ENDEREO.

Jefferson Leal Couto

Pgina

16

Rev. E

PROWARE PROJ. E SIST. ELETRNICOSEX: Projetar um decodificador para I/O mapeado em memria nas seguintes configuraes: A) 32K bytes de RAM, 32K bytes para I/O mapeamento redundante. A.1) Utilizando portas lgicas A15 = 0 32k inferior A15 = 1 32k superior

A.2 ) Utilizando o 74139 Tabela verdade: A 0 0 1 1 B 0 1 0 1 Y0 0 1 1 1 Y1 1 0 1 1 Y2 1 1 0 1 Y3 1 1 1 0

Jefferson Leal Couto

Pgina

17

Rev. E

PROWARE PROJ. E SIST. ELETRNICOSA.3 ) Utilizando apenas 2 decodificador 74139

A.4 ) Utilizando apenas 1 decodificador 74139

Jefferson Leal Couto

Pgina

18

Rev. E

PROWARE PROJ. E SIST. ELETRNICOSB) 32K RAM, 32K para I/O com mapeamento redundante nos endereos 8000H e 8001H B.1 ) Utilizando portas lgicas

B.2 ) Utilizando o 74139

C) 32K RAM, 32K para I/O com mapeamento no redundante nos endereos 8000H e 8001H

Jefferson Leal Couto

Pgina

19

Rev. E

PROWARE PROJ. E SIST. ELETRNICOSExerccios: 1) Projetar um decodificador com 16K de RAM e 48K bytes de I/O, mapeando 16K para cada dispositivo. Mapeamento redundante. 2) Projetar um decodificador com 16K de RAM e os endereos 8000, A000 e C000 para I/O mapeamento redundante. 3) Projetar um decodificador de I/O mapeado em memria com 24K de RAM e o restante em 3 endereos para I/O. Mapeamento redundante. 3.1) Utilizar o 74xx139 3.2) Utilizar o 74xx138 4) Projetar um decodificador de I/O mapeado em memria com 32K de RAM e os endereos 8000h, 8004h, 8008h e 800Ch para I/O. 4.1) Utilizar o 74xx139 4.2) Utilizar o 74xx138 5) Projetar um decodificador com 32K de RAM e 8 sadas para I/O. Mapeamento redundante: 5.1) Utilizar o 74xx139 5.2) Utilizar o 74xx138

A maior dificuldade em projetar um decodificador que no existe uma formula ou receita pronta. Um bom projeto, depende basicamente de experincia e conhecimento de circuitos digitais. Algumas dicas que podero ajudar. Em mapeamento redundante, devemos analisar o menor espao de memria utilizado no projeto e ento definir a quantidade de endereos do barramento que sero necessrios. O 8051 acessa 64K de memria RAM com seus 16 endereos. Em mapeamento no redundante devemos utilizar sempre todos os endereos para mapear o dispositivo de I/O, pois o endereo especfico.

Jefferson Leal Couto

Pgina

20

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS5) MICROCONTROLADORES5.1) MICROPROCESSADOR: uma mquina seqencial que executa um conjunto de comandos (instrues ) previamente gravados em uma memria (ROM). Embora todos os microprocessadores utilizem um sinal de clock, comum encontrar na literatura, a classificao de microprocessadores sncronos e assncronos. Com a evoluo tecnolgica, principalmente na confeco de CIs, os fabricantes de microprocessadores comearam a incorporar memrias e dispositivos perifricos na mesma pastilha de seus microprocessadores. Surgiram ento os microcontroladores. Uma vez que incorporam grande parte dos dispositivos perifricos, a construo de um sistema baseado em um microcontrolador, freqentemente se resume a um circuito com um cristal, um boto de reset e a memria de programa.

Arquitetura Von Nuemann - A maioria dos microprocessadores segue esta arquitetura. O microprocessador composto por um conjunto de blocos funcionais, controlados por uma mquina seqencial que determina os tempos em que cada sinal de controle est presente nos barramentos internos e externos. importante ressaltar que nesta arquitetura no temos distino entre a memria de programa e dados. Para caracterizar uma arquitetura Von Nuemann o processador deve atender trs postulados: 1) Um nico controle central.

Jefferson Leal Couto

Pgina

21

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS2) Uma nica memria para programa e dados 3) As instrues devem fazer operaes elementares sobre os dados. O Z80 um exemplo de processador que utiliza arquitetura Von Nuemann.

Arquitetura Harvard Esta arquitetura apresenta memrias distintas para programa e dados, isto , o processador projetado para gerar sinais de leitura e escrita distintos para cada memria. Uma das vantagens desta arquitetura, evitar que a memria se torne o fator limitante no desempenho do processador. Alguns processadores mais modernos j utilizam esta arquitetura. O 8051 um exemplo. Destas arquiteturas surgiram duas tendncias: RISC - Reduce Instruction Set Computer CISC - Complex Instruction Set Computer

A CPU do tipo CISC possui um conjunto muito grande de instrues (8051, Z80). VANTAGENS: Possibilita a confeco de programas enxutos. Grande nmero de modos de endereamento. Uma instruo executa muitas tarefas. DESVANTAGEM: Difcil memorizao dos comandos. Instrues com diferentes tamanhos de ciclos de mquina. Subutilizao da CPU. Difcil depurao. A CPU do tipo RISC possui um conjunto de instrues reduzido. VANTAGEM: Fcil memorizao, rapidez, fcil depurao. DESVANTAGEM: Programa muito extenso. Nmero reduzido de registradores e modos de endereamento. Muitas instrues para realizar uma tarefa simples.

Jefferson Leal Couto

Pgina

22

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS5.2) BARRAMENTOS DE UM MICROCONTROLADOR

Barramento de endereo: Barramento unidirecional, por onde trafega os sinais que endeream os dispositivos de memria e I/O. Em geral, os microprocessadores de 8 bits endeream 64 Kbytes de memria.

Barramento de dados: Barramento bidirecional por onde trafegam dados entre os dispositivos externos e o microcontrolador. O tamanho deste barramento define o tamanho do microcontrolador. O 8051 de 8 bits.

Barramento de controle: dispositivos externos.

Barramento por onde o microcontrolador controla os

Jefferson Leal Couto

Pgina

23

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS5.3) MODOS DE ATENDIMENTO DE I/O

Pooling: Neste tipo de atendimento, a CPU fica constantemente questionando o dispositivo de I/O se o mesmo necessita receber ou enviar um dado. Este tipo de atendimento fcil de implementar, porm desperdia o tempo da CPU. Interrupo: Neste tipo de atendimento, a CPU avisada pelo dispositivo de I/O, que o mesmo necessitam receber ou enviar dados. Este tipo de atendimento mais complexo, tendo como vantagem no desperdiar o tempo da CPU. Como um evento assncrono, a CPU sempre atende no momento solicitado. Necessita de um hardware adicional. DMA (Direct Memory Acess) : Este tipo de atendimento o mais complexo, porm o mais rpido. O dispositivo de I/O solicita os barramentos da CPU (Tri - State) e acessa diretamente a memria, transferindo ento os dados. Nem toda a CPU suporta este tipo de atendimento.

Jefferson Leal Couto

Pgina

24

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS6) MICROCONTROLADOR 8031/8051

6.1) Pinagem:

Jefferson Leal Couto

Pgina

25

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS6.2) Barramento Multiplexado: Para evitar que o chip tenha mais que 40 pinos, a Intel adotou a soluo de multiplexar no mesmo barramento os dados e endereo.

Desta forma, devemos utilizar a seguinte ligao para obter as 16 linhas de endereos e 8 de dados no 8051.

Jefferson Leal Couto

Pgina

26

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS6.3) CLOCK NO 80C51 Existem duas formas de gerar circuito de clock no microcontrolador. O clock pode ser externo ou interno. uso do clock externo interessante quando temos outros dispositivos que utilizam um sinal TTL para gerar sua base de tempo. Sua implementao resume-se em colocar o pino 19 (XTAL1) no nvel de terra e injetar o sinal externo no pino 18 (XTAL2), que ir diretamente para o sistema de controle e temporizao do chip.

Para utilizar o clock interno, devemos colocar entre os pinos 18 e 19 um cristal ou um ressonados cermico (o oscilador com cristal mais estvel e preciso ) na freqncia desejada e dois capacitores de realimentao. Geralmente utilizamos capacitores entre 27 e 33pF.

Jefferson Leal Couto

Pgina

27

Rev. E

PROWARE PROJ. E SIST. ELETRNICOSO clock do microcontrolador chamado de ciclo de clock e ele a referncia ou base para gerao do ciclo de mquina. O ciclo de mquina calculado dividindo a freqncia do cristal por 12 (doze) no 80C51. Para um sistema utilizando um cristal de 12Mhz, teremos um ciclo de mquina de 1Mhz, isto , o microcontrolador ir executar a seqncia de busca, decodificao e execuo em tempos de no mnimo 1s.Lembre se, o ciclo de clock depende basicamente do cristal utilizado na CPU e o ciclo de mquina determina o tempo necessrio para executar as instrues. No 8051 o Ciclo Mquina = Ciclo de clock / 12

6.4) RESET DO MICROCONTROLADOR O reset no 80C51 ativado quando o pino 9 (RST) permanece em nvel lgico 1 por 2 ou mais ciclos de mquina. Neste caso a CPU executa o chamado reset interno, que consiste em inicializar seus registros internos com valores predeterminados: O PC, o ACC (acumulador), o registro B (Auxiliar), os Flags, O DPTR e todos os registros de temporizao e contagem sero zerados. O SP (stack pointer - pilha) carregado com o valor 07H. As portas P0 a P3 tero o valor FFH. O SBUF (buffer serial) estar com um valor indeterminado e o registro de controle da porta serial - SCON ser zerado. O registro PCON ter apenas seu bit mais significativo zerado. Os registradores de interrupo IE (Interrupt Enable) e IP (Interrupt Priorit) tero o valor XXX00000, onde X representa um valor irrelevante (Dont Care) A memria interna no afetada pelo reset forado, sendo que ao ligar seu valor aleatrio.

Jefferson Leal Couto

Pgina

28

Rev. E

PROWARE PROJ. E SIST. ELETRNICOSAo inicializarmos um sistema necessrio que uma seqncia de funes sejam executadas, desta forma podemos afirmar que nosso sistema ir executar as tarefas para o qual foi projetado. Toda vez que realizamos um reset no 8051, ele ir comear a executar o software a partir do endereo 0000H da memria de programa. Geralmente esta rotina conhecida como Inicializao do sistema. O microcontrolador pode ser resetado automaticamente toda vez que a fonte ligada. Normalmente utilizamos um resistor de 10K entre o pino do reset e o terra, e um capacitor de 10F entre o VCC e o pino de reset.

Jefferson Leal Couto

Pgina

29

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS6.5) INTERRUPOES A interrupo , uma das formas mais importantes de atendimento aos dispositivos de I/O. Este recurso permite interromper o fluxo normal de execuo do firmware para a execuo de um fluxo especfico do programa. No 8051, temos trs fontes geradoras de interrupo, a interrupo de software (instruo) a solicitada por um perifrico externo e a interrupo gerada por dispositivos internos do processador (timer, serial, etc). Para o bom entendimento deste recurso, devemos esclarecer alguns conceitos: Mascaramento - a capacidade de inibir, geralmente via software que uma determinada interrupo seja atendida. Prioridade - Define o grau ou a preferncia que uma determinada interrupo ser executada. Interrupo vetorada ou no vetorada - Define se ao atender uma interrupo o microcontrolador ir executar uma rotina em um endereo fixo de memria e que no pode ser alterado, ou se o programa ir para um endereo definido pelo programador. O 8051 possui todas as suas interrupes vetoradas, isto , com o endereo de desvio determinado pelo fabricante do componente. Ativao - Existem trs formas que o sistema pode reconhecer uma interrupo: pelo nvel (alto ou baixo) pela borda (subida ou descida) pela combinao de borda e nvel. O 8051 possui 5 formas de interrupo: Interrupo externa 0 - INT0\ Interrupo externa 1 - INT1\ Interrupo do timer\contador 0 - T0 Interrupo do timer\contador 1 - T1 Interrupo do canal serial - TI ou RINo 8051, todas as interrupes so mascarveis e vetoradas.

Jefferson Leal Couto

Pgina

30

Rev. E

PROWARE PROJ. E SIST. ELETRNICOSSendo que cada uma destas interrupes ser desviada para os seguintes endereos: INT0\ . 03H T0 . 0BH INT1\ .. 13H T1 1BH TI - RI . 23H

A seguir temos um mapa parcial da memria de programa do 8051 com seus respectivos endereos de interrupo e reset.

Jefferson Leal Couto

Pgina

31

Rev. E

PROWARE PROJ. E SIST. ELETRNICOSO processador possui um recurso de prioridade interna, que permite determinar qual interrupo ser atendida ou se uma interrupo em andamento dever ser interrompida para o atendimento de outra de maior prioridade.

Para determinar quais interrupes estaro habilitadas, devermos escrever no registrador especial IE - (Interrupt Enable) do SFR.

EA - Localizado no bit 7 do IE, Habilita todas as interrupes quando em nvel lgico 1, desde que estas estejam habilitadas individualmente. Quanto em nvel lgico 0, desabilita todas as interrupes, mesmo que estejam ativadas individualmente. ES - Localizado no bit 4 do IE, Habilita a comunicao serial quando em nvel lgico 1 e desabilita em nvel lgico 0 mesmo que o bit EA esteja ativado. ET1 - Localizado no bit 3 do IE, Habilita o timer/conter 1 quando em nvel lgico 1 e desabilita em nvel lgico 0 mesmo que o bit EA esteja ativado. EX1 - Localizado no bit 2 do IE, Habilita a interrupo externa 1 quando em nvel lgico 1 e desabilita em nvel lgico 0, mesmo que o bit EA esteja em 1. ET0 - Localizado no bit 1 do IE, Habilita o timer/conter 0 quando em nvel lgico 1 e desabilita em nvel lgico 0 mesmo que o bit EA esteja ativado. EX0 - Localizado no bit 0 do IE, Habilita a interrupo externa 0 quando em nvel lgico 1 e desabilita em nvel lgico 0, mesmo que o bit EA esteja em 1. Para alterar a seqncia padro de prioridade das interrupes devemos habilitar os bit`s do registrador IP (Interrupt Priorit)

Jefferson Leal Couto

Pgina

32

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS

Onde, PS - Localizado no bit 4, seleciona prioridade da serial. Quanto em 1 define como alta a prioridade da serial. PT1 - Localizado no bit 3, seleciona prioridade do timer1. Quanto em 1 define como alta a prioridade do timer 1.

PX1 - Localizado no bit 2, seleciona prioridade da interrupo externa 1. Quanto em 1 define como alta a prioridade da interrupo externa 1. PT0 - Localizado no bit 1, seleciona prioridade do timer0. Quanto em 1 define como alta a prioridade do timer 0. PX0 - Localizado no bit 0, seleciona prioridade da interrupo externa 0. Quanto em 1 define como alta a prioridade da interrupo externa 0.Um certo tempo ir decorrer entre o reconhecimento da interrupo pelo processador e o efetivo desvio para o respectivo vetor. No melhor caso teremos um atraso de 3,2 ciclos de mquina e no pior caso teremos um atraso de 7,2 ciclos de mquina.

Jefferson Leal Couto

Pgina

33

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS6.6) INTERRUPO EXTERNA As interrupes externa0 e externa1 podem ser configuradas para reconhecer uma transio de 1 para 0 (borda de descida) ou um nvel lgico 0. A configurao deste controle feito no registrador TCON (Timer Control) atravs do nibble menos significativo.

Onde, IT0 - Localizado no bit 0 de TCON. Quando em nvel lgico 0 a interrupo Externa0 ser aceita simplesmente pela presena do nvel zero no pino. Quando em nvel lgico 1 a interrupo ser aceita quanto ocorrer uma transio de 1 para 0 e o sinal permanecer em zero por pelo menos 1ciclo de mquina. IE0 - Localizado no bit 1 de TCON. setado pelo hardware interno quando for detectado um pedido de interrupo. resetado quando a interrupo for atendida. IT1 - Localizado no bit 2 de TCON. Quando em nvel lgico 0 a interrupo Externa1 ser aceita simplesmente pela presena do nvel zero no pino. Quando em nvel lgico 1 a interrupo ser aceita quanto ocorrer uma transio de 1 para 0 e o sinal permanecer em zero por pelo menos 1ciclo de mquina. IE1 - Localizado no bit 3 de TCON. setado pelo hardware interno quando for detectado um pedido de interrupo. resetado quando a interrupo for atendida.

Jefferson Leal Couto

Pgina

34

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS6.7) TEMPORIZADOR E CONTADOR

O 8051 possui 2 T/C (timer/conter) que so configurados atravs do firmware e podem operar de maneira totalmente independente dos demais recursos do chip. Os dois T/C podem ser ativados ou desativados pelo hardware ou pelo software, dependendo da configurao adotado pelo projetista. No nibble mais significativo de TCON podemos ativar ou desativar os T/C`s como veremos a seguir:

Onde, TF1 - setado pelo hardware sempre que ocorrer um overflow (estouro no contador) no T/C1. resetado ao final da rotina de interrupo de T/C1. TR1 - Quando em nvel lgico 1 ir ligar o T/C1, e quando em zero o mesmo ser desligado. TF0 - setado pelo hardware sempre que ocorrer um overflow (estouro no contador) no T/C0. resetado ao final da rotina de interrupo de T/C0. TR0 - Quando em nvel lgico 1 ir ligar o T/C0, e quando em zero o mesmo ser desligado. Para realizar a configurao do modo de funcionamento do temporizador/contador devemos manipular os bit`s de TMOD.

Onde, Gate0; Gate1 Definem como o timer/contador ir funcionar. Quando este bit estiver em nvel lgico 1 o timer/contador ser ativado se TRn e o pino INTn forem 1. Esta configurao bastante til quando queremos medir largura de pulso externo. Quando este bit estiver em nvel lgico 0 o timer/contador ser ativado simplesmente colocando TRn em 1.

Jefferson Leal Couto

Pgina

35

Rev. E

PROWARE PROJ. E SIST. ELETRNICOSC/T0;C/T1 - Definem a fonte do sinal de clock. Quando em nvel lgico 0 ele ter a funo de timer e a base de tempo ser o clock do cristal. Quando este bit estiver em 1 ele estar operando como contador e o clock ser os pulsos presentes no pino Tn M1-x;M0-x - Determinam o modo como ir operar o Timer/contador, como veremos a seguir:

MODO 0 - Temporizador/Contador de 8 bit`s com divisor de freqncia de at 32 vezes. Neste modo o TL0 ou TL1 servem como prescaler do divisor e os registradores TH0 e TH1 como contador de 8 bit`s. MODO 1 - Temporizador/Contador de 16 bit`s. Neste modo o TLn e THn formam um par de forma a obter um registrador de 16 bit`s. Neste modo podemos contar at 65535, com o valor inicial programvel por software. MODO 2 - Contador/Temporizador de 8 bit`s com recarga automtica. Neste modo o registrador TLn realiza a contagem e o registrador THn possui o valor que ser recarregado em TLn sempre que ocorrer um overflow (estouro do contador). Os registradores podem ser alterados por software a qualquer momento, tornando bastante flexvel o uso. MODO 3 - Intervalador ou contador de eventos em 8 bit`s e temporizador de 8 bit`s. OBS: Este modo no muito usual e no ser estudado.

Jefferson Leal Couto

Pgina

36

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS6.8) COMUNICAO SERIAL Na comunicao serial, a transmisso de um byte feita pelo envio seqencial de cada bit, um aps o outro. Para permitir a comunicao entre os sistemas, criou-se um cdigo binrio para cada caractere de forma a existir uma padronizao entre os sistemas. Este cdigo conhecido por ASCII ( American Standart Code for Interchange of Information). Neste cdigo, cada caractere possui seu valor em binrio, incluindo os caracteres de controle e especiais, totalizando 256 smbolos.

O modo mais utilizado de comunicao entre sistemas de controle e automao o sistema assncrono. Neste modo no h necessidade de gerarmos o sincronismo (sinal de clock entre os sistemas). Neste modo cada caractere transmitido individualmente, e para caractere enviado um bit de incio da transmisso (start bit) e um de final de transmisso (stop bit).

Existem, trs formas de interligar os sistemas digitais (considerando apenas os sinais de dados): A) Simplex: A comunicao feita apenas em um sentido B) Half Duplex: A comunicao feita nos dois sentidos, mas no simultnea C) Full Duplex: Comunicao nos dois sentidos e de forma simultnea.

Jefferson Leal Couto

Pgina

37

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS

6.9) INTERFACE SERIAL NO 8051 No 8051 temos uma interface serial do tipo full duplex. Desta forma, sistemas de comunicao podem enviar e receber dados de forma simultnea com o microcontrolador. Para este fim, o 8051 possui um registrador chamado SBUF(Serial Buffer).Quando queremos enviar uma informao pelo canal serial devemos escrever o byte no SBUF, e quando desejamos receber o byte pelo microcontrolador devemos ler o SBUF. Pode parecer que ele possui apenas um registrador para Tx e Rx, mas na verdade existem dois registradores com o mesmo nome e que sero reconhecidos pelo sistema atravs da instruo assembler. Para fazer e analisar a configurao da serial devemos acessar o registrador SCON (Serial Control) como veremos a seguir.

Onde, RI - setado pelo hardware ao receber o oitavo bit no modo sncrono ou no meio do stop bit no modo assncrono. Deve ser zerado para permitir que sejam geradas novas interrupes. TI - setado pelo hardware ao transmitir o oitavo bit no modo sncrono ou no incio do stop bit no modo assncrono. Permite que a transmisso dos dados seja independente do fluxo principal do programa. Deve ser zerado para permitir que sejam geradas novas interrupes. RB8 - No modo 0 indica o estado do stop bit Nos modos 2 e 3 indica o estado do nono bit recebido. TB8 - Nos modos 2 e 3 usado para transmitir o nono bit. REN - Habilita a recepo serial. Se estiver zerado a recepo estar desabilitada e o pino RXD pode ser usado como pino de I/O SM2 - No modo 0 deve permanecer zerado. No modo 1 no gera pedido de interrupo se estiver setado e o stop bit for invlido. Nos modos 2 e 3 permite a interligao entre vrios 8051

Jefferson Leal Couto

Pgina

38

Rev. E

PROWARE PROJ. E SIST. ELETRNICOSSM1,SM0 - A combinao destes bits fornece o modo de funcionamento da serial: SM0 0 0 1 1 SM1 0 1 0 1 MODO 0 1 2 3 Taxa de comunicao Fclock / 12 Varivel (Conforme Timer1) Fclock / 32 ou Fclock / 64 Varivel (Conforme Timer1)

O modo 0 usado para comunicao serial sncrona e os demais para comunicao assncrona. No modo 1 so transmitidos 8 bits de dados, 1 stop bit e o start bit. No modo 3 aps os 8 bits de dados transmitido um nono bit.

6.10) TAXA DE TRANSMISSO PARA OS MODOS 1 E 3

Frequncia( Mhz).106 TH 1 = 256 384.Taxa( BPS )

2 SMOD .Frequncia TAXA = 384 ( 256 THI )6.11) TABELA PRTICA COM TAXAS PARA O CRISTAL DE 11,0592 Mhz

TAXA (BPS) 300 1200 2400 4800 9600

VALOR RECARGA(TH1) 160 232 244 250 253

Os valores da tabela foram calculados para SMOD = 0.

Jefferson Leal Couto

Pgina

39

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS7) PROGRAMAO C PARA O MICROCONTROLADOR 8051Existem basicamente trs linguagens de programao que so utilizadas com o 8051, o BASIC, ASSEMBLY e o C. Nos ltimos cinco anos, a programao de microcontroladores em linguagem C tem sido adotada pela maioria das empresas devido as facilidades para programao e ao nvel de portabilidade apresentada. Muitos livros ensinam a programao padro ANSI C, porm devemos tomar o cuidado ao utilizar este tipo de bibliografia, pois ela aborda a programao para o PC. Funes do tipo printf, scanf, sprintf entre outras, geralmente no esto disponveis para o projetista ou apresentam um comportamento diferente quando utilizamos o compilador para microcontrolador. No nosso curso, ser abordado o compilador SDCC. Outro detalhe importante que no 8051 podemos utilizar uma grande variedade de modos de acesso a memria. Como o microcontrolador suporta acesso a BIT, memria RAM interna, memria RAM externa devemos ficar atento ao padro adotado pelo compilador(small ou large para o SDCC) ou especificar onde desejamos que a memria seja reservada.

Se voc utilizar um compilador como o Turbo C, Visual C ou outro para PC nenhum santo vai fazer seu programa funcionar. Eu teria receio de gravar o programa no KIT ou na memria EPROM. Quando voc estiver programando para o 8051, devemos utilizar SEMPRE um compilador prprio para o microcontrolador como o SDCC que veremos no curso.

Jefferson Leal Couto

Pgina

40

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS7.1) TIPOS DE VARIVEIS EM C TIPO char unsigned char Int unsigned int long float void NUMERO DE BITS 8 bits 8 bits 16 bits 16 bits 32 bits 32 bits 0 ALCANCE -128 a + 127 0 a 255 -32768 a 32767 0 a 65535 -2147483648 a +2147483647 3.4e-38 a 3.4e38 Sem valor

Exemplo de declarao de variveis: Int iLContador; // Varivel do tipo inteiro com sinal unsigned char ucGLeitura;// Varivel do tipo char sem sinal char buffNome[6]; // Array do tipo char com 6 posices Int buffTotal[4]; // Array do tipo int com sinal com 4 posies

7.2) OPERADORES ARITMTICOS + * / % ++ -Subtrao ou sinalizao de negativo Soma Multiplicao Diviso Resto da diviso Incremento (Varivel = Varivel + 1) Decremento (Varivel = Varivel 1)

Exemplo de operaes aritmticas iLTotal = iLContador * 3; ucLLeitura++; // Atribui para iLTotal o valor de //ILContador multiplicado por 3 // ucLLeitura ser incrementada de uma //unidade

Jefferson Leal Couto

Pgina

41

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS7.3) OPERADORES LGICOS E RELACIONAIS > < >= > = '1')&&(ucLRetorno < '3')) { ucLOpcao = ucLRetorno; switch(ucLOpcao) { case '1': PWDisplayEscreveString("Selecione Canal:",1,1); PWDisplayEscreveString("1-A/D0 2-A/D1 ",2,1); do { ucLRetorno = PWLeTeclado(); } while(ucLRetorno != 0); do {

ucLRetorno = PWLeTeclado(); switch(ucLRetorno) { case '1': ucLCanal = 1; break; case '2': ucLCanal = 2; break;

} }while(ucLCanal == 0); break; case '2': PWDisplayEscreveString("Selecionado: ",1,1); PWDisplayEscreveString("Conversor D/A 0 ",2,1); break;

} PWDelay1Segundo(1); break; } else {

}

PWDisplayEscreveString("Selecao invalida",1,1); PWDisplayEscreveString("Tente novamente.",2,1); PWDelay1Segundo(1);

} ucLByte = 0; PWDisplayLimpa();

Jefferson Leal Couto

Pgina

62

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS

if(ucLOpcao == '2') { PWDisplayEscreveString("Fechar jump. JP1",1,1); PWDisplayEscreveString("pres. tecla test",2,1); do { ucLRetorno = PWLeTeclado(); } }while(ucLRetorno == 0);

while(1) { if(ucLOpcao == '1') { if(ucLCanal == 1) { ucLByte = PWLeituraAD(0); } else { ucLByte = PWLeituraAD(1); } PWBinToASCII(2,1,ucLByte ); PWDelay1Segundo(1);

// Seleciona leitura do A/D canal 0

}

if(ucLOpcao == '2') { PWDisplayEscreveString("WR ",1,1); PWDisplayEscreveString("RD PWEscreveDA(0,ucLByte); PWDelayms(50); PWBinToASCII(1,4,ucLByte ); ucLByte++; do { ucLRetorno = PWLeituraAD(0); PWDelay1Segundo(1); PWBinToASCII(2,4,ucLRetorno ); ucLRetorno = PWLeTeclado(); } while(ucLRetorno == 0);

// Seleciona escrita no D/A canal 0 ",2,1);

// Escreve valor da varivel

} }

} void InicializaRegistradores(void) { IP = 0x00; TMOD = 0x00; IE = 0x00; TMOD = 0x01; TR0 = 1; // Configura prioridade padrao para interrupcoes // Configura modo do TIMER // Habilita interrupo timer 0 // Timer zero no modo 1

Jefferson Leal Couto

Pgina

63

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS}

9.3) Escrita no Conversor Analgico/Digital (D/A)##################################################################################### # # # PROWARE PROJ. E SIST. ELETRONICOS # # # # PROJETO: CONTROLE DE SAIDA DO D/A # # # # MODULO: DIGITAVO.C # # # # REVISO: 1 # # # # FUNCAO: # # # # HISTORICO: # # # # - Software inicial # # Autor: Jefferson Couto Data: 20/03/06 # ##################################################################################### #include #include void MostraValor(unsigned char); void InicializaRegistradores(void); void main() { unsigned char ucLValor; unsigned char ucLCopia; InicializaRegistradores(); // Chama subrotina que inicializa registradores PWDisplayInicializa(); PWDisplayLimpa(); while(1) { PWDisplayEscreveString("Tensao VO: ",1,1); ucLValor = PWEntraCharx_x(1,11); ucLValor = ucLValor * 2; PWEscreveDA(0,ucLValor); MostraValor(ucLValor); PWDisplayLimpaLinha(2); }

}

void InicializaRegistradores(void) { IP = 0x00; // Configura prioridade padrao para interrupcoes TMOD = 0x00; // Configura modo do TIMER IE = 0x00; // Desabilita interrupes } void MostraValor(unsigned char Valor) { unsigned char ucLTecla; PWDisplayEscreveString ("DEC: ",2,1); PWMostraCharxxx(Valor); do { ucLTecla = PWLeTeclado(); }while( ucLTecla == 0); // Mostra valor atual da varivel // Aguarda usurio pressionar uma tecla

}

Jefferson Leal Couto

Pgina

64

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS

9.4) PHASE WIDTH MODULATION ( PWM)##################################################################################### # # # PROWARE PROJ. E SIST. ELETRONICOS # # # # PROJETO: PWM # # # # MODULO: PWM.C # # # # REVISO: 1 # # # # FUNCAO: # # # # HISTORICO: # # # # - Software inicial # # Autor: Jefferson Couto Data: 28/05/06 # ##################################################################################### #include #include void InicializaRegistradores(void); unsigned char ucGPwmHigh = 0; unsigned char ucGPwmLow = 0; unsigned char ucGTecla; unsigned char ucAtualiza = 0; unsigned char ucGDutyCicle = 50; #define CONTAGEM 46 // Tempo de 1ms Ciclo de mquina x 9 X 100 = aproximadamente 1mS #define CONTAGEMH (65535-CONTAGEM)/256 #define CONTAGEML (65535-CONTAGEM) void Int_Timer0(void) interrupt 1 { IT0 = 0; if(ucGPwmHigh > 0) { P1_0 = 1; ucGPwmHigh--; } else { if(ucGPwmLow > 0) { P1_0 = 0; ucGPwmLow--; } else { if(ucGDutyCicle == 0) P1_0 = 0; else P1_0 = 1; ucGPwmHigh = ucGDutyCicle; ucGPwmLow = 100 - ucGDutyCicle; } } TH0 = CONTAGEMH; TL0 = CONTAGEML; IT0 = 1; } void main()

Jefferson Leal Couto

Pgina

65

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS{ ucGDutyCicle = 50; // Duty cicle do PWM em 50% InicializaRegistradores(); PWDisplayInicializa(); PWDisplayLimpa(); PWDisplayEscreveString ("GERANDO PWM ",1,1); PWMostraCharxxx(ucGDutyCicle); PWEscreveCaractere('%'); while(1) { ucGTecla = PWLeTeclado(); if(ucGTecla == '2') { if(ucGDutyCicle < 100) ucGDutyCicle++; PWDisplayLimpa(); PWDisplayEscreveString("Aumenta PWM ",1,1); PWMostraCharxxx(ucGDutyCicle); PWEscreveCaractere('%'); PWDelayms(100); ucAtualiza = 1; // Mostra mensagem na linha 1

} if(ucGTecla == '1') { if(ucGDutyCicle > 0) ucGDutyCicle--;

} if((ucAtualiza)&&(ucGTecla == 0)) // Se nenhuma tecla pressionada e alterou Duty Cicle { PWDisplayLimpa(); PWDisplayEscreveString ("GERANDO PWM ",1,1); PWMostraCharxxx(ucGDutyCicle); PWEscreveCaractere('%'); ucAtualiza = 0; } } } void InicializaRegistradores(void) { IP = 0x00; // Configura prioridade padrao para interrupcoes IE = 0x82; // Habilita interrupo timer 0 TMOD = 0x01; // Timer zero no modo 1 TR0 = 1; TH0 = CONTAGEMH; TL0 = CONTAGEML;

PWDisplayLimpa(); PWDisplayEscreveString("Diminui PWM ",1,1); PWMostraCharxxx(ucGDutyCicle); PWEscreveCaractere('%'); PWDelayms(100); ucAtualiza = 1;

// Mostra mensagem na linha 1

}

Jefferson Leal Couto

Pgina

66

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS9.5) Medir largura de pulso##################################################################################### # # # PROWARE PROJ. E SIST. ELETRONICOS # # # # PROJETO: MEDIR LARGURA DE PULSO # # # # MODULO: LARGURAP.C # # # # REVISO: 1 # # # # FUNCAO: # # # # HISTORICO: # # # # - Software inicial # # Autor: Jefferson Couto Data: 20/03/06 # #####################################################################################* #include #include void InicializaRegistradores(void); unsigned char ucAtualiza = 0; unsigned char ucGFlag = 0; unsigned int uiGLarguraPulso; void Int_Ex1(void) interrupt 2 { EX1 = 0; TR1 = 0; if(!ucGFlag) { ucGFlag = 1; ucAtualiza = 1; uiGLarguraPulso = ((256 * TH1) + TL1); } else { TH1 = 0; TL1 = 0; EX1 = 1; ucGFlag = 0; TR1 = 1;

// Desliga a interrupo externa 0

// Zera regustradores utilizados na medida // Liga a interrupo externa 0

} }

Jefferson Leal Couto

Pgina

67

Rev. E

PROWARE PROJ. E SIST. ELETRNICOSvoid main() { unsigned char ucLByte; SP = 0x80; // Inicializa Stack Pointer RS0 = 0; // Seleciona banco zero RS1 = 0; // Seleciona banco zero uiGLarguraPulso = 0; // Duty cicle do PWM em 50% PWDisplayInicializa(); PWDisplayLimpa(); PWDisplayEscreveString("Largura = ",1,1); // Mostra mensagem na linha 1 InicializaRegistradores(); // Chama subrotina que inicializa registradores ucAtualiza = 1; while(1) { if(ucAtualiza) { PWEscreveComando(0x8A); PWMostraIntxxxx(uiGLarguraPulso); PWDisplayEscreveString("TH1=",2,1); ucLByte = TH1; PWMostraCharxxx(ucLByte); PWDisplayEscreveString("TL1=",2,9); ucLByte = TL1; PWMostraCharxxx(ucLByte); ucAtualiza = 0; PWDelayms(400); IE1 = 0; EX1 = 1; } } } void InicializaRegistradores(void) { IP = 0x00; IE = 0x84; TMOD = 0x90; TCON = 0x41; TH1 = 0; TL1 = 0; } // Configura prioridade padrao para interrupcoes // Habilita interrupo Externa 1 // Timer UM no modo 1 medindo largura de pulso // Liga TR1 e Configura Int Externa 0 por borda

Jefferson Leal Couto

Pgina

68

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS10) FUNES DA BIBLIOTECA PWLIB10.1) void PWDelayms(unsigned int) Descrio: Rotina de delay por software. Entrada: Tempo de atraso multiplo de 1ms. Saida: Nenhuma Exemplo: PWDelayms(45); // Delay de 45 ms

10.2) void PWDelay1Segundo(char) Descrio: Rotina de delay por software. Entrada: Tempo de atraso multiplo de 1 segundo Saida: Nenhuma Exemplo: PWDelay1Segundo(4); // Delay de 4 segundos

10.3) void PWDelay (int) Descrio: Rotina de delay por software. Entrada: Tempo de atraso Saida: Nenhuma Exemplo: PWDelay(3000); // Delay

10.4) void PWDisplayInicializa (void) Descrio: Inicializa o display (programao inicial). Entrada: Nenhuma Saida: Nenhuma Exemplo: PWDisplayInicializa(); // Inicializa o display

Jefferson Leal Couto

Pgina

69

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS10.5) void PWDisplayEscreveString (unsigned char*,char,char) Descrio: Mostra uma sequncia de caracteres no display de LCD. Entrada: Ponteiro para a string Linha do display Coluna do display Saida: Nenhuma Exemplo: PWDisplayEscreveString(Proware,2,1); // Mensagem na Linha 2 Coluna 1

10.6) void PWEscreveStringPadrao (void) Descrio: Mostra uma sequncia padro de caracteres no display de LCD. Entrada: Nenhuma Saida: Nenhuma Exemplo: PWEscreveStringPadrao ( ); // Mostra tela padro

10.7) void PWDisplayLimpa(void) Descrio: Limpa todo o display de LCD. Entrada: Nenhuma Saida: Nenhuma Exemplo: PWDisplayLimpa (); // Limpa do display

10.8) void PWDisplayLimpaLinha(char) Descrio: Limpa uma das linhas do display. Entrada: 1 Para limpar primeira linha e 2 Para limpar segunda linha Saida: Nenhuma Exemplo: PWDisplayLimpaLinha(2); // Limpa segunda linha do display

Jefferson Leal Couto

Pgina

70

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS10.9) void PWEscreveCaractere (unsigned char) Descrio: Mostra o caractere na posio atual do display. Entrada: Caractere a ser mostrado no display de LCD Saida: Nenhuma Exemplo: PWEscreveCaractere (J); // Mostra a letra J no display de LCD

10.10) void PWEscreveComando(unsigned char) Descrio: Envia comando de programao para o display de LCD. Entrada: Comando a ser enviado para o display Saida: Nenhuma Exemplo: PWEscreveComando (0xC0); // Comando para posicionar o cursor na Linha 2 e // Coluna 1

10.11) void PWDisplayAtivaCursor(void) Descrio: Faz com que o cursor fique visvel no LCD. Permite que o usurio visualize a posio atual do cursor. Entrada: Nenhuma Saida: Nenhuma Exemplo: PWDisplayAtivaCursor();

// Ativa o cursor no LCD

10.12) void PWDisplayDesativaCursor(void) Descrio: Faz com que o cursor fique invisvel no LCD. O usurio no poder visualizar a posio atual do cursor. Entrada: Nenhuma Saida: Nenhuma Exemplo: PWDisplayDesativaCursor();

// Desativa o cursor no LCD

Jefferson Leal Couto

Pgina

71

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS10.13) void PWDisplayPosicionaCursor (char,char) Descrio: Posiciona o cursor em uma determinada linha e coluna do LCD. Entrada: Linha 1 para primeira linha e 2 - para segunda linha Coluna 1 a 16 Conforme colunas do display Saida: Nenhuma

Exemplo: PWDisplayPosicionaCursor (2,4); // Posiciona o cursor da linha 2 coluna 4

10.14) char PWLeTeclado (void) Descrio: Faz a varredura do teclado e verifica se alguma tecla foi pressionada. Entrada: Nenhuma Saida: Retorna 00h se nenhuma tecla foi pressionada ou o valor da tecla em ASCII conforme a tecla que foi pressionada. Exemplo: ucLTecla = PWLeTeclado (); // Armazena em ucLTecla o valor lido no teclado 10.15) char PWLeituraAD (unsigned char) Descrio: Faz a leitura do conversor A/D, conforme o nmero do conversor. Entrada: 0 A/D0 , 1 A/D1, 2 A/D2 e 3 A/D3 ( Sendo A/D 2 e 3 na expanso) Saida: Retorna um valor de 8 bits ( 0 a 255 ) conforme a leitura do A/D Exemplo: ucLAD = PWLeituraAD (0); // Armazena em ucLAD o valor lido no A/D

10.16) void PWEscreveDA ( char, unsigned char ) Descrio: Escreve no conversor Digital/Analgico um valor de 8 bits na sada determinada pelo parmetro nmero do D/A Entrada: Sada Valor de 0 a 3 conforme conversor Dado Valor entre 0 a 255 referente ao dado a ser gravado no conversor. Saida: Nenhuma

Jefferson Leal Couto

Pgina

72

Rev. E

PROWARE PROJ. E SIST. ELETRNICOSExemplo: PWEscreveDA (0,Byte); // Armazena o Byte na sada do conversor D/A0

10.17) char PWConfiguraSerial8N1(unsigned char) Descrio: Programa a velocidade da serial assncrona no modo 8 bits de dados, sem paridade e um stop bit. Entrada: 0 1200, 1 2400, 2 4800, 3 - 9600 Saida: Nenhuma. Exemplo: PWConfiguraSerial8N1(3); // Programa na velocidade de 9600 bps.

10.18) char PWEnviaSerial(char*, unsigned char) Descrio: Envia um array pela porta serial. Entrada: Dados Ponteiro para o array Tamanho Quantidade de bytes ( 0 a 255 ) Saida: Retorna um byte com a resposta do dispositivo ou 0 se no recebeu nenhum byte como retorno. Exemplo: PWEnviaSerial(BuffDados,12 ); // Envia o contedo de BuffDados

10.19) char PWEnviaRecebeSerial(char*, unsigned char,unsigned char) Descrio: Envia um array pela porta serial. Aguarda os dados da resposta. Entrada: Dados Ponteiro para o array com dados enviados e recebidos. TamanhoSaida Quantidade de bytes que sero enviados( 0 a 255 ) TamanhoEntrada Quantidade de bytes que sero recebidos Saida: Retorna um byte com 0 para sucesso e 1 para erro. Exemplo: PWEnviaRecebeSerial(BuffDados,12,3 ); // Envia 12 bytes de BuffDados e // armazena 3 bytes de retorno em // BuffDados.

Jefferson Leal Couto

Pgina

73

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS10.20) void PWBinToASCII (unsigned char,unsigned char,unsigned char) Descrio: Mostra o valor de um byte em binrio no display de LCD. Entrada: Byte que ser convertido para binrio. Linha Nmero da linha onde ser mostrado no display ( 1 ou 2 ) Coluna Nmero da coluna onde ser mostrado no display ( 1 a 16 ) Saida: Nenhuma Exemplo: PWBinToASCII ( Byte,1,1 ); // Mostra o valor de Byte na linha 1 e coluna 1

10.21) void PWMostraCharxx(unsigned char) Descrio: Mostra o contedo de um varivel byte no formato decimal na posio atual do display. Valor entre 00 e 99. Entrada: Byte que ser mostrado no LCD Saida: Nenhuma Exemplo: PWMostraCharxx(Byte); // Mostra o valor de Byte no LCD

10.22) void PWMostraCharxxx(unsigned char) Descrio: Mostra o contedo de uma varivel byte no formato decimal na posio atual do display. Valor entre 00 e 255. Entrada: Byte que ser mostrado no LCD Saida: Nenhuma Exemplo: PWMostraCharxxx(Byte); // Mostra o valor de Byte no LCD

10.23) void PWMostraIntxxx(unsigned int) Descrio: Mostra o contedo de uma varivel word no formato decimal na posio atual do display. Valor entre 00 e 999. Entrada: Word que ser mostrado no LCD Saida: Nenhuma Exemplo: PWMostraIntxxx(uiLValor); // Mostra o valor de uiLValor no LCD

Jefferson Leal Couto

Pgina

74

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS10.24) void PWMostraIntxxxx(unsigned int) Descrio: Mostra o contedo de uma varivel word no formato decimal na posio atual do display. Valor entre 00 e 9999. Entrada: Word que ser mostrado no LCD Saida: Nenhuma Exemplo: PWMostraIntxxxx(uiLValor); // Mostra o valor de uiLValor no LCD

10.25) void PWMostraIntxxxxx(unsigned int) Descrio: Mostra o contedo de uma varivel word no formato decimal na posio atual do display. Valor entre 00 e 65535. Entrada: Word que ser mostrado no LCD Saida: Nenhuma Exemplo: PWMostraIntxxxx(uiLValor); // Mostra o valor de uiLValor no LCD

10.26) void PWMostraIntxx_xx (unsigned int) Descrio: Mostra o contedo de uma varivel word no formato decimal com duas casas decimais na posio atual do display. Valor entre 00 e 99,99. Entrada: Word que ser mostrado no LCD. Valor dividido por 100 Saida: Nenhuma Exemplo: PWMostraIntxx_xx(1278); // Mostra o valor 12,78 no LCD

10.27) unsigned char PWEntraCharx_x(unsigned char, unsigned char) Descrio: Solicita a entrada de um valor com uma casa decimal. Retorna um valor entre 0 e 255 ( 255 / 10 ). Anula limpa valor e solicita nova entrada. Entrada: Linha no LCD onde ser feita a entrada dos dados. Coluna no LCD onde ser feita a entrada dos dados. Saida: Valor entre 0 e 255 conforme o valor digitado pelo usurio. Exemplo: ucLByte = PWEntraCharx_x(1,4); // Aguarda o usurio digital o valor

Jefferson Leal Couto

Pgina

75

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS10.28) unsigned char PWEntraCharxx_x(unsigned char, unsigned char) Descrio: Solicita a entrada de um valor com uma casa decimal. Retorna um valor entre 0 e 255 ( 255 / 100 ). Anula limpa valor e solicita nova entrada. Entrada: Linha no LCD onde ser feita a entrada dos dados. Coluna no LCD onde ser feita a entrada dos dados. Saida: Valor entre 0 e 255 conforme o valor digitado pelo usurio. Exemplo: ucLByte = PWEntraCharxx_x(1,4); // Aguarda o usurio digital o valor

10.29) unsigned char PWEntraCharxx(unsigned char, unsigned char) Descrio: Solicita a entrada de um valor com duas casas. Retorna um valor entre 0 e 99. Anula limpa valor e solicita nova entrada. Entrada: Linha no LCD onde ser feita a entrada dos dados. Coluna no LCD onde ser feita a entrada dos dados. Saida: Valor entre 0 e 99 conforme o valor digitado pelo usurio. Exemplo: ucLByte = PWEntraCharxx(1,4); // Aguarda o usurio digital o valor 10.30) unsigned char PWEntraCharxxx(unsigned char, unsigned char) Descrio: Solicita a entrada de um valor com trs casas. Retorna um valor entre 0 e 255. Anula limpa valor e solicita nova entrada. Entrada: Linha no LCD onde ser feita a entrada dos dados. Coluna no LCD onde ser feita a entrada dos dados. Saida: Valor entre 0 e 255 conforme o valor digitado pelo usurio. Exemplo: ucLByte = PWEntraCharxxx(1,4); // Aguarda o usurio digital o valor

10.31) unsigned int PWEntraIntxxx(unsigned char, unsigned char) Descrio: Solicita a entrada de um valor com trs casas. Retorna um valor entre 0 e 999. Anula limpa valor e solicita nova entrada. Entrada: Linha no LCD onde ser feita a entrada dos dados. Coluna no LCD onde ser feita a entrada dos dados. Saida: Valor entre 0 e 999 conforme o valor digitado pelo usurio. Exemplo: uiLValor = PWEntraIntxxx(1,4); // Aguarda o usurio digital o valor

Jefferson Leal Couto

Pgina

76

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS10.32) unsigned int PWEntraIntxxxx(unsigned char, unsigned char) Descrio: Solicita a entrada de um valor com trs casas. Retorna um valor entre 0 e 9999. Anula limpa valor e solicita nova entrada. Entrada: Linha no LCD onde ser feita a entrada dos dados. Coluna no LCD onde ser feita a entrada dos dados. Saida: Valor entre 0 e 9999 conforme o valor digitado pelo usurio. Exemplo: uiLValor = PWEntraIntxxxx(1,4); // Aguarda o usurio digital o valor 10.33) unsigned int PWEntraIntxxxxx(unsigned char, unsigned char) Descrio: Solicita a entrada de um valor com trs casas. Retorna um valor entre 0 e .65535 Anula limpa valor e solicita nova entrada. Entrada: Linha no LCD onde ser feita a entrada dos dados. Coluna no LCD onde ser feita a entrada dos dados. Saida: Valor entre 0 e 65535 conforme o valor digitado pelo usurio. Exemplo: uiLValor = PWEntraIntxxxx(1,4); // Aguarda o usurio digital o valor 10.34) unsigned int PWEntraIntxx_xx (unsigned char, unsigned char) Descrio: Solicita a entrada de um valor com duas casas decimais. Retorna um valor entre 0 e 9999. Anula limpa valor e solicita nova entrada. Entrada: Linha no LCD onde ser feita a entrada dos dados. Coluna no LCD onde ser feita a entrada dos dados. Saida: Valor entre 0 e 9999 conforme o valor digitado pelo usurio. O valor em ponto flutuante ser multiplicado por 100. Exemplo: uiLValor = PWEntraIntxx_xx(1,4); // Aguarda o usurio digital o valor Se o usurio digitar 76,25, o valor de uiLValor ser 7625 sem vrgulas.

Jefferson Leal Couto

Pgina

77

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS11) INFORMAES SOBRE O KIT

Jefferson Leal Couto

Pgina

78

Rev. E