Programação em C Aplicações de Microprocessadores 2006/2007

Documentos relacionados
Portas de entrada e saída; Interrupções; Interrupções externas; Temporizadores Contadores; Interface Serial

Exemplos de Programas em C para o 8051 para o compilador crossware EEL Prof. Raimes Moraes

Sistemas Microprocessados. sato<at>utfpr<dot>edu<dot>br

Revisão Linguagem C Parte 1

LINGUAGEM C PARA O 8051

Revisão da Linguagem C Prof. Evandro L. L. Rodrigues

LINGUAGEM C PARA O 8051

SEL PROGRAMAÇÃO EM C

Introdução à Programação em C (II)

Introdução à Programação em C Input / Output

8051 PROGRAMAÇÃO EM C

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Interrupções do Interrupções Gabriel Kovalhuk. UTFPR DAELN - Tecnologia em Mecatrônica Industrial

Introdução à linguagem C

Programação: Vetores

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

Linguagem C. Brian W. Kernighan, Dennis Ritchie (K&R) Slides adaptados, inspirados, muitos copiados dos slides do professor Pedro Pereira

Porta Série SÉRIE x PARALELO PORTA SÉRIE. Comunicação série SÉRIE PARALELA

Nome Endereço IRQ COM1 3F8 4 COM2 2F8 3 COM3 3E8 4 COM4 2E UART - Universal Asynchronous Receiver/Transmitter. descrição

Programação de Computadores II. Cap. 7 Cadeias de Caracteres

Linguagem de Programação C

Controlo de Execução. K&R: Capitulo 3

3. Linguagem de Programação C

Universidade Federal do Espírito Santo. Programação I Tipos de Dados Básicos - C Professora: Norminda Luiza

16/3/2009. Aula 6. Engenharia de Sistemas Embarcados

Linguagem de Programação C. Linguagem de Programação C. Linguagem de Programação C. Linguagem de Programação C. Linguagem de Programação C

Aula 6. Engenharia de Sistemas Embarcados. Prof. Abel Guilhermino Tópico: Arquitetura e Ambiente de Desenvolvimento

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Programação de Computadores II. Cap. 7 Cadeias de Caracteres 1/2

Interrupções por hardware

Linguagem C Princípios Básicos (parte 1)

Caracteres e Cadeias de Caracteres

Linguagens de Programação

Compilador C para o 8051

LINGUAGEM DE PROGRAMAÇÃO C AULA 2. Professor: Rodrigo Rocha

Estudar os passos que devem ser feitos (ponto de partida até o objetivo)

Linguagem C. André Tavares da Silva.

Capítulo 1: Introdução à Linguagem C. Pontifícia Universidade Católica Departamento de Informática

Ponteiros e Tabelas. K&R: Capítulo 5

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Profa Rosana Braga

Módulo 7 Cadeias de Caracteres

Introdução a Programação de Jogos

Linguagem C++ Estruturas de controle Parte II Estruturas de repetição

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

Variáveis e Operadores em C

Organização de Memórias

Introdução à Programação (CC111)

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação

Linguagem C: Introdução

SEL 337 Aplicação de Microprocessadores II

Programação Estruturada Aula - Estruturas de Repetição

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Introdução à Linguagem C Variáveis e Expressões

Linguagem C. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Programação Estruturada

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

MCTA028 Programação Estruturada Aula 01: - Introdução à linguagem C - Teste de avaliação

Linguagem de Programação C. Prof. Fabrício Olivetti de França

Conhecendo a Linguagem de Programação C

Linguagem C (repetição)

CICLOS DE REPETIÇÃO. Luís Charneca.

LP II Estrutura de Dados

Introdução à Ciência da Computação scc-120

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S

Porta série no dscope...

Introdução à Programação

Cadeias de Caracteres (Strings)

Programação em Sistemas Computacionais

Periféricos e Interfaces Ano lectivo 2003/2004 Docente: Ana Paula Costa. Aula Teórica 3

ALGORITMOS AULA 01. Baseado nas aulas do Prof. Jorgiano Vidal

Funções de Entrada e Saída

Linguagem C Controle do Fluxo de Execução. Lógica de Programação

TIMER2 no ATMEL AT89S8252 TIMER 2 - CARACTERISTICAS TIMER 2 MODOS

MCTA028 Programação Estruturada Aula 01: - Introdução à linguagem C - Teste de avaliação

Módulo 1. Introdução. AEDS I C++ (Rone Ilídio)

Computação 2. Aula 7. Profª. Fabiany Ponteiros

1/24 FICHEIROS DE TEXTO

Centro Universitário Franciscano Curso de Sistemas de Informação Disciplina de algoritmos e programação II. Ponteiros

Apontadores/ponteiros

Programação Estruturada Aula 2 - Introdução

Caracteres. Caracteres são representados através de códigos numéricos. Tabela de códigos: Define correspondência entre caracteres e códigos numéricos

Linguagem C Ficheiros Compilação Separada

Básico: estrutura de programa, sintaxe Interface com linha de comando

Microcontrolador 8051:

Estrutura de Programas e Tipos de Dados Simples

Introdução à Programação

Estruturas de Dados. Profa. Juliana Pinheiro Campos

5 - COMANDOS DE CONTROLE DE PROGRAMA Em C existem os comandos de decisões, os comandos de iteração (ou de laços) e os comandos de desvios.

Conceitos Básicos de C

Introdução à Programação em C

Funções de Entrada e Saída Formatada Constantes de barra invertida

Aulas preparatórias Introdução a Programação em Linguagem C

Char e Strings de Caracteres

Algoritmos e Programação

Disciplina de Algoritmos e Programação

Char e Strings de Caracteres

Transcrição:

Programação em C 8051 Aplicações de Microprocessadores 2006/2007

Linguagem C Utilizar os mecanismos da linguagem C Estrutura do C Controlo de programa ciclos Sintaxe do C Necessário utilizar livraria especifica para o Microcontrolador que se pretende programar 2 2

Tipos de dados O compilador C51 usa os mesmos tipos de dados, dos que são usados pelo compiladores padrão de C. 3 3

Novos Tipos Dados Os compiladores de C para microcontroladores, definem tipos de dados especificos para esse processador BIT um bit SFR Registo de Funções Especiais (8 bits) SBIT, SFRBIT Bit de Registos SFR (1 bit) A utilização destes tipos de dados é exactamente iguais ao dos outros tipos existentes 4 4

Tipos de Dados 5 5

Memória 8051 0xFF 0x7F 0x20 0x2F 6 6

Memória Interna Dados Podem ser distinguidos 3 tipos de especificadores para a memória de dados interna no C51 data, idata e bdata. data refere-se aos primeiros 128 bytes da memória de dados interna. idata refere-se a todos os 256 bytes da memória de dados interna, implica sempre o modo de endereçamento indirecto independente da localização na memória. bdata refere-se aos 16 bytes de memória (20h a 2Fh) endereçamento bit a bit. 7 7

Memória Externa Dados O compilador C51 permite a utilização de dois tipos diferente de especificadores para a memória de dados externa xdata e pdata. xdata refere-se a qualquer posição de memória de dados externa de 64 Kbytes. pdata refere-se a uma página de 256 bytes na memória de dados externa. 8 8

Modelos de Memória SMALL No C51 podem ser utilizados três tipos de modelos de memória, a saber: SMALL, COMPACT e LARGE. No modelo SMALL todas as variáveis utilizadas são definidas na memória de dados interna do 8051, este modelo de memória gera o código de programa mais pequeno e eficiente e deverá ser utilizado sempre que possível. 9 9

Modelos de Memória COMPACT No modelo de memória COMPACT, todas as variáveis são definidas na memória de dados externo mas restringidas a uma página de memória (256 bytes). 10 10

Modelos de Memória LARGE No modelo de memória LARGE todas as variáveis são alocadas na memória de dados externa (espaço de 0 a 64KB). O modelo LARGE é o que gera um código de memória com maior tamanho 11 11

Estrutura de Programa em C #include <AT89S8252.h> Deve ser colocado um include do ficheiro com a definição de registos. Este ficheiro é fornecido como parte do compilador e inclui as definições dos vários registos e flags do microcontrolador. 12 12

Estrutura de Programa em C As definições de constantes e as variáveis globais devem ser inseridas agora, declarando uma variável em cada linha. sbit botao=0xb2; sbit botao=p3^2; 13 13

Estrutura de Programa em C /* visor.c Incrementa o visor de 0 a F sempre que se prime botao. Botao ligado em P3.2 e visor ligado em P1 */ unsigned char tabela[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0 xa1, 0x86,0x8e}; #include "at898252.h" sbit botao=p3^2; main () { unsigned char i=0; while(1) // ciclo infinito { P1=tabela[i]; // visualiza no porto P1 o caractere if (botao==0) // caso de botao premido { } } } // fim ciclo While i++; // incrementa contador if(i==16) // caso em que chegou ao fim da contagem i=0; 14 14

Interrupções 15 15

Interrupções (cont.) void nome_rotina_isr (void) interrupt num_interrupção [using banco_registos] /* Visualiza os números de 0 a F sequencialmente utilizando a interrupção externa 0 */ // variaveis globais unsigned char tabela[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80, 0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; unsigned char i=0; // variável global #include "at898252.h void ISR_externa0(void) interrupt 0 { i++; } // incrementa variável global i main () { IE=0x81;// para habilitar a in terrupção externa 0 IT0=1; // para detectar a transição de 1 ->0 while(1) { if(i==16) i=0; P1=tabela[i]; // este é o programa principal } } 16 16

Porta Série A função standard do C printf()é utilizada para enviar dados pela porta série e a função getchar() é utilizada para a recepção de caracteres ambas definidas em stdio.h. No programa abaixo após cada transmissão são enviados os caracteres ( \n ) Carriage Return e Line Feed. A utilização da função printf() e getchar() não dispensa a inicialização dos registos do 8051 associados à porta série como é o caso de SCON e TCON. 17 17

Porta Série (cont.) /* Programa para testar a utilização da função printf() Envia a string Microprocessadores II (1200N81) */ #include "at898252.h" #include "stdio.h void inicia_serie() { SCON=0x50; TMOD=0X20; TH1=0XE8; TR1=1; TI=1; } main () { inicia_serie(); while(1) printf("microprocessadores II \n"); } 18 18

Porta Série (cont.) A função printf() é uma função da livraria standard de entrada/saída que é implementada utilizando um elevado número de instruções, o que faz com que um pequeno programa ocupe uma quantidade de memória de programa considerável. O programa da listagem anterior depois de compilado resulta em 3,11Kbytes de código. Para diminuir o tamanho do código podemos escrever a função envia_frase(unsigned char *ch) como está na listagem abaixo o que resulta numa redução de 2 Kbytes! 19 19

Porta Série (cont.) /* Programa para testar a utilização da função printf() Envia a string Microprocessadores II (1200N81) */ #include "at898252.h" #include "stdio.h" void inicia_serie() { SCON=0x50; TMOD=0X20; TH1=0XE8; TR1=1; TI=1;} void envia_frase(unsigned char *ch) { while(*ch!=0) { SBUF=*ch; while (!TI){} TI=0; ch++; } } main () { unsigned char CRLF[]={0x0D,0x0A,0x00}; inicia_serie(); while(1) { envia_frase("microprocessadores II"); envia_frase(crlf);} 20} 20

Acesso à Memória DADOS O acesso à memória de dados Interna ou externa é efectuado por meio de macros. Acesso pode ser entendido como leitura ou escrita. Macro XBYTE, acesso à memória externa Macro DBYTE, acesso à memoria #include <absacc.h> /* absolute addressing modes */ #include "REG51.h" /* DS5000 series 8052 registers */ #define WRITE_XMEM XBYTE // Macro para escrita na memória // interna de dados #define WRITE_IMEM DBYTE // Macro para escrita na memória // interna de dados 21 21

Memória DADOS (cont.) #include <absacc.h> /* absolute addressing modes */ #include "REG51.h" /* DS5000 series 8052 registers */ #define WRITE_XMEM XBYTE // Macro para escrita na memória // interna de dados #define WRITE_IMEM DBYTE // Macro para escrita na memória // interna de dados WRITE_IMEM[0x41]=0xff; // escreve 0xff na Memória interna 0x41 dado=write_imem[0x41]; // escreve conteúdo da Memória interna // 0x41 em dado WRITE_XMEM[0x8000]=0xff; //escreve 0xff na Memória externa 0x8000 dado=write_xmem[0x8000]; // escreve conteúdo da Memória externa // 0x8000 em dado 22 22