Sistemas Microcontrolados Aula 4: Programação em C para PIC Marco Jose da Silva mdasilva@utfpr.edu.br Compiladores C para PICs C18 HI-TECH CCS IAR MikroC http://www.microchip.com/ http://www.htsoft.com/ http://www.ccsinfo.com/ http://www.iar.com/ http://www.mikroe.com/ Próximos Slides: Rápida revisão da linguagem C Sistemas Microcontrolados Marco Jose Da Silva mdasilva@utfpr.edu.br Slide 2
Etapas de gravação no uc Program written in C Compiled Program (Assembly) HEX (PIC Executable) Sistemas Microcontrolados Marco Jose Da Silva mdasilva@utfpr.edu.br Slide 3 Compilador MikroC /* --------------------------------------------------- Estrutura básica de um programa em C ------------------------------------------------------ */ char quad (char a); // declaração de função void main(void) char temp; // declaração de variável Trisb=0x00; Portb=0x0F; Delay_ms(100); PORTB = quad(portb); Comentários /* xxx */ Função Principal /* --------- Funções auxiliares ------------------------ */ char quad (char a) return a*a; MikroC é case insensitive PortB=PORTB=portb Sistemas Microcontrolados Marco Jose Da Silva mdasilva@utfpr.edu.br Slide 4
Representação numérica Decimal: Contador=125; Binário: Portb=0b11010011; Hexadecimal: Variável1=0xA4; Octal: Teste=075; // zero no início String: Unsigned char *texto= Sistemas uc"; // aspas Caracter: Usart_write('A'); // 'plicks' -> converte caracter 'A' em 8 bits ASCII Sistemas Microcontrolados Marco Jose Da Silva mdasilva@utfpr.edu.br Slide 5 Tipos de Dados Dado: int char float, double void Tipo: Números inteiros Caracteres Números decimais (ponto flutuante) valores nulos Sistemas Microcontrolados Marco Jose Da Silva mdasilva@utfpr.edu.br Slide 6
Modificadores Exemplo: Atenção as conversões de tipos!!! short A=0xFFAA; char a1,a2; a1=a; a2=a>>8; Resp: a1=0xaa a2=0xff Sistemas Microcontrolados Marco Jose Da Silva mdasilva@utfpr.edu.br Slide 7 Operadores matemáticos Aritméticos: Relacionais: Bit a bit: Lógicos: Sistemas Microcontrolados Marco Jose Da Silva mdasilva@utfpr.edu.br Slide 8
Controle de Fluxo IF WHILE if(modo==0x01) //variável modo = 1? buffer = 0x03 & 0xFF; //sim else //senão buffer = 0x03 ^ 0xFF; void main() while(1) //execute sempre, loop infinito PORTB.F1=1; //pino RB1 = 1, led aceso delay_ms(1000); //aguarda 1 segundo PORTB.F1=0; //pino RB1 = 0, led apagado //fecha o bloco while ; Sistemas Microcontrolados Marco Jose Da Silva mdasilva@utfpr.edu.br Slide 9 Controle de Fluxo DO... WHILE FOR void main() do PORTB.F1=1; delay_ms(1000); PORTB.F1=0; while(portb.f0 == 0); //recepção serial de um byte, salvando em DATA // RB0 = clock, RB1 = data DATA=0; for(i=0;i<8;i++) while(portb.f0 == 0); // aguarda sinal clock c=c (PORTB.F1<<i); //le RB1 e recebe um bit Sistemas Microcontrolados Marco Jose Da Silva mdasilva@utfpr.edu.br Slide 10
Controle de Fluxo SWITCH if(received_flag) // se dado foi recebido switch(dados) case 0x01 : send_version() ;break; case 0x02 : relay_on() ;break; case 0x03 : reset_cpu();break; Sistemas Microcontrolados Marco Jose Da Silva mdasilva@utfpr.edu.br Slide 11 Inserindo programação Assembly Partes críticas do programa podem ser escritas em Assembly. P.ex. determinação do tempo de execução asm Assembly language instructions... Exemplo usando uma variável unsigned char maximum = 100; // Declare variables: maximum = 100 asm // Start of assembly code MOVF maximum,w // W = maximum = 100... // End of assembly code Sistemas Microcontrolados Marco Jose Da Silva mdasilva@utfpr.edu.br Slide 12
Bibliotecas do MikroC (Help) Sistemas Microcontrolados Marco Jose Da Silva mdasilva@utfpr.edu.br Slide 13 Relembramdo Vetores e Matrizes unsigned char calendar [12] = 31,28,31,30,31,30,31,31,30,31,30,31; int array[32]; int Table [3][4]; Strings Cadeias de caracteres terminados em \0' char msg[]="mensagem de inicio"; char input[30]; Funções type_of_result function_name (type argument1, type argument2,...) Command; Command;... Sistemas Microcontrolados Marco Jose Da Silva mdasilva@utfpr.edu.br Slide 14
Referências Vidal Pereira da Silva Júnior, Linguagem C para microcontroladores PIC, Apostila Renato A. Silva, Programando Microcontroladores PIC Linguagem C, Editora Erica, 2006 Fábio Pereira, Microcontroladores PIC Programação em C, Erica, 2003. MikroC User Manual, http://www.mikroe.com/pdf/mikroc/mikroc_manual.pdf PIC Microcontrollers - Programming in C http://www.mikroe.com/eng/products/view/285/book-pic-microcontrollersprogramming-in-c/ Sistemas Microcontrolados Marco Jose Da Silva mdasilva@utfpr.edu.br Slide 15