Post on 24-Sep-2018
Sistemas Microprocessados
sato<at>utfpr<dot>edu<dot>brhttp://pessoal.utfpr.edu.br/sato/
C para o 8051
sato<at>utfpr<dot>edu<dot>br
Sobre o material
• Essas transparências foram baseadas nos livros: Embedded C de Michael J. Pont e Microcontrolador 8051 com Linguagem C: Prático e Didático de Nicolosi e Bronzeri, no help do MicroVision 3.
C para 8051• PC x Sistema embarcado
– Sistema Operacional
– Acesso direto ao HW– Loop infinito
• C para 8051– Similar ao ANSI C para PC
– Peculiaridades– Keil
Acesso ao HW• Arquivo de header (.h)
– Facilita o acesso ao HW
– Específico para cada microcontrolador• Ex: 89c51rd2.h, at89x52.h
– <reg52.h>• Genérico
– Exemplo: #include <reg52.h>
<reg52.h>/*--------------------------------------------------------------------------REG52.H
Header file for generic 80C52 and 80C32 microcontroller.Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil
Software, Inc.All rights reserved.--------------------------------------------------------------------------*/
#ifndef __REG52_H__#define __REG52_H__
<reg52.h>/* BYTE Registers */sfr P0 = 0x80;sfr P1 = 0x90;sfr P2 = 0xA0;sfr P3 = 0xB0;sfr PSW = 0xD0;sfr ACC = 0xE0;sfr B = 0xF0;sfr SP = 0x81;sfr DPL = 0x82;sfr DPH = 0x83;
/* BYTE Registers */sfr PCON = 0x87;sfr TCON = 0x88;sfr TMOD = 0x89;sfr TL0 = 0x8A;sfr TL1 = 0x8B;sfr TH0 = 0x8C;sfr TH1 = 0x8D;sfr IE = 0xA8;sfr IP = 0xB8;sfr SCON = 0x98;sfr SBUF = 0x99;
<reg52.h>
/* 8052 Extensions */sfr T2CON = 0xC8;sfr RCAP2L = 0xCA;sfr RCAP2H = 0xCB;sfr TL2 = 0xCC;sfr TH2 = 0xCD;
/* BIT Registers *//* PSW */sbit CY = PSW^7;sbit AC = PSW^6;sbit F0 = PSW^5;sbit RS1 = PSW^4;sbit RS0 = PSW^3;sbit OV = PSW^2;sbit P = PSW^0;
<reg52.h>
/* TCON */sbit TF1 = TCON^7;sbit TR1 = TCON^6;sbit TF0 = TCON^5;sbit TR0 = TCON^4;sbit IE1 = TCON^3;sbit IT1 = TCON^2;sbit IE0 = TCON^1;sbit IT0 = TCON^0;
/* IE */sbit EA = IE^7;sbit ET2 = IE^5;
//8052 onlysbit ES = IE^4;sbit ET1 = IE^3;sbit EX1 = IE^2;sbit ET0 = IE^1;sbit EX0 = IE^0;
<reg52.h>
/* IP */sbit PT2 = IP^5;sbit PS = IP^4;sbit PT1 = IP^3;sbit PX1 = IP^2;sbit PT0 = IP^1;sbit PX0 = IP^0;
/* P3 */sbit RD = P3^7;sbit WR = P3^6;sbit T1 = P3^5;sbit T0 = P3^4;sbit INT1 = P3^3;sbit INT0 = P3^2;sbit TXD = P3^1;sbit RXD = P3^0;
<reg52.h>
/* SCON */sbit SM0 = SCON^7;sbit SM1 = SCON^6;sbit SM2 = SCON^5;sbit REN = SCON^4;sbit TB8 = SCON^3;sbit RB8 = SCON^2;sbit TI = SCON^1;sbit RI = SCON^0;
/* T2CON */sbit TF2 = T2CON^7;sbit EXF2 = T2CON^6;sbit RCLK = T2CON^5;sbit TCLK = T2CON^4;sbit EXEN2 = T2CON^3;sbit TR2 = T2CON^2;sbit C_T2 = T2CON^1;sbit CP_RL2 = T2CON^0;
Tipos de Dados
• Tipos padrões do ANSI C.
• Tipos do compilador do Keil.
• Uso adequado para ocupação racional da memória.
Tipos de Dados Padrão
0 a 4.294.697.295432unsigned long
-2.147.483.648 a +2.147.483.648432long
0 a 65.535216unsigned int
-32.768 a +32.767216int
0 a 65.535216unsigned short
-32.768 a +32.767216short
-32.768 a +32.767216enum
0 a 25518unsigned char
-128 a +12718char
FaixaBytesBits
Tipos de Dados Keil
0 a 65.535216sfr16
0 a 25518sfr
0 e 101sbit
0 e 101bit
FaixaBytesBits
Tipos de Dados Keil• Tipo bit
– Similar aos tipos padrão
– Não pode ser ponteiro
• Tipos sbit, sfr, sfr16– Acesso a bits e aos registros de função
especial (8 e 16 bits)
– Declarada fora da função
– Geralmente no header
Tipos de Dados Keil
Exemplossfr P0 = 0x80;
sbit P10 = 0x90;
bit testbit = 0
Tipos de Dados Keil
• O Keil suporta– struct
– union
– typedef
Áreas de Memória Keil• 8051 tem áreas diferentes de
memória
• Keil tem extensões para especificar a área a ser ocupada por uma variável– data – memória de dados interna
acessada diretamente (128 bytes)
– idata – memória de dados interna acessada indiretamente (256 bytes)
– xdata – memória externa de dados
– code – memória de programa
Áreas de Memória Keil
Exemploschar data var1;
char code text[] = "ENTER PARAMETER:";
unsigned long xdata array[100];
unsigned int idata x,y,z;
unsigned char xdata vector[10][4][4];
Interrupção
Exemplo de função para serialvoid serial_int (void) interrupt 4
{
...
}
• Extensões para atendimento de interrupções– interrupt
– using
Interrupção• Interrupções são identificadas por
números
40023hSerial
3001BhT/C1
20013hExterna 1
1000BhT/C0
00003hExterna 0
NúmeroVetor Interrupção
Interrupção
Exemplo de função para serialvoid serial_int (void) interrupt 4 using 1
{
...
}
• interrupt 4 → serial
• using 1 → usa banco de registradores 1
Função Recursiva
• Função Recursiva– Função que pode ser chamada por ela
mesma
• Extensão para função recursiva– Reentrant
• Declaração de função recursiva– int minha_funcao (int parametro) reentrant
Biblioteca
• ANSI C– Nem todas funções ANSI C existem nas
bibliotecas do Keil C
• Keil C– Possui funções não existentes no ANSI C
• Consultar o help do Keil
Include Files
• Fora o header específico do microcontrolador (ex: <reg52.h>), outros headers podem ser incluídos– <stdio.h>
– <math.h>
– <string.h>
– etc
Sobre o material
• Essas transparências foram baseadas nos livros: Embedded C de Michael J. Pont e Microcontrolador 8051 com Linguagem C: Prático e Didático de Nicolosi e Bronzeri, no help do MicroVision 3.