Prévia do material em texto
ISUTIC - Instituto Superior para as Tecnologias de Informação e Comunicação Engenharia de Telecomunicações (2º Ano – 4º Semestre) Disciplina de Microprocessadores ELABORADO POR:Prof: Adilson G. Domingos Luanda 2018 AulA 1: PIC18F4550 PISCANDO LED USANDO O MPLAB C18 E O PROTEUS 8.1 #include<P18F4550.h> // inclui os arquivos do PIC18F4550 #include<delays.h> // inclui a biblioteca delays(atrasos) //// Configurções específicas do PIC18F4550 no MPLAB #pragma config PLLDIV = 5 // PLL para 20MHz #pragma config CPUDIV = OSC1_PLL2 // PLL desligado #pragma config FOSC = HS // Fosc = 20MHz -> Tcy = 200ns #pragma config WDT = OFF // Watchdog desativado #pragma config PBADEN = OFF // PORTB começa como digital #pragma config LVP = OFF // Sem gravação em baixa tensão #pragma config XINST = OFF // Desativa o modo de programação estendida void main(void){ // funcao principal da linguagem C TRISD = 0x00; // configura portal D como saída PORTD=0X00; // inicializa todos os pinos do port D em zero for(;;){ // laço infinito com o for PORTD = 0XFF; // coloca todo PORTD em alto Delay10KTCYx(10); // deley de um segundo PORTD = 0X00; // coloca todo PORTD em baixo Delay10KTCYx(10); // delay de um segundo } } AulA 2: PISCANDO LED USANDO O MPLAB C18 E O PROTEUS 8.1 #include<P18F4550.h> // inclui os arquivos do PIC18F4550 #include<stdlib.h> #include<stdio.h> #include<delays.h> // inclui a biblioteca delays(atrasos) //// Configurções específicas do PIC18F4550 no MPLAB #pragma config PLLDIV = 5 // PLL para 20MHz #pragma config CPUDIV = OSC1_PLL2 // PLL desligado #pragma config FOSC = HS // Fosc = 20MHz -> Tcy = 200ns #pragma config WDT = OFF // Watchdog desativado #pragma config PBADEN = OFF // PORTB começa como digital #pragma config LVP = OFF // Sem gravação em baixa tensão #pragma config XINST = OFF // Desativa o modo de programação estendida #define B1 PORTBbits.RB0 #define L1 LATEbits.LATE1 void main(void){ // funcao principal da linguagem C // ADCON1=6; TRISB = 0X01; TRISE = 0X00; L1=0; for(;;){ // laço infinito com o for // inicializa o pino do port RD0 em zero if(B1){ L1=0; } else{ L1=1;} } } AulA 3: Acendendo e apagando LED com o mesmo Botão USANDO O MPLAB C18 E O PROTEUS 8.1 #include<P18F4550.h> // inclui os arquivos do PIC18F4550 #include<stdlib.h> #include<stdio.h> #include<delays.h> // inclui a biblioteca delays(atrasos) //// Configurções específicas do PIC18F4550 no MPLAB #pragma config PLLDIV = 5 // PLL para 20MHz #pragma config CPUDIV = OSC1_PLL2 // PLL desligado #pragma config FOSC = HS // Fosc = 20MHz -> Tcy = 200ns #pragma config WDT = OFF // Watchdog desativado #pragma config PBADEN = OFF // PORTB começa como digital #pragma config LVP = OFF // Sem gravação em baixa tensão #pragma config XINST = OFF // Desativa o modo de programação estendida #define B1 PORTBbits.RB0 #define L1 LATEbits.LATE1 short x=0; void main(void){ // funcao principal da linguagem C // ADCON1=6; TRISB = 0X01; TRISE = 0X00; L1=0; INTCON2bits.RBPU = 0; // ativa pul-ups for(;;){ // laço infinito com o for // inicializa o pino do port RD0 em zero if(B1==0){ if (x==0){Delay10KTCYx(1000); L1=1;x=1;} } else { if(B1==0){ if (x==1){Delay10KTCYx(1000); L1=0;x=0;} } } } } AulA 4: contador com Display de 7 Segmento USANDO O MPLAB C18 E O PROTEUS 8.1 #include<P18F4550.h> //// Configurções #pragma config PLLDIV = 5 // PLL para 20MHz #pragma config CPUDIV = OSC1_PLL2 // PLL desligado #pragma config FOSC = HS // Fosc = 20MHz -> Tcy = 200ns #pragma config WDT = OFF // Watchdog desativado #pragma config PBADEN = OFF // PORTB começa como digital #pragma config LVP = OFF // Sem gravação em baixa tensão #pragma config XINST = OFF // Desativa o modo de programação estendida // Definições de hardware #define INC PORTBbits.RB0 // DISP1 #define DEC PORTBbits.RB1 // DISP1 #define DISP4 PORTAbits.RA5 // DISP4 #define DISP3 PORTAbits.RA2 // DISP3 #define DISP2 PORTEbits.RE0 // DISP2 #define DISP1 PORTEbits.RE2 // DISP1 #define DISPLAY PORTD // Segmentos do display ligados em PORTD void main(void){ // Declaração de variáveis int i = 0; // tabela de dígitos do display (matriz com 10 posições) char table[] = { 0b00111111, // 0 0b00000110, // 1 0b01011011, // 2 0b01001111, // 3 0b01100110, // 4 0b01101101, // 5 0b01111100, // 6 0b00000111, // 7 0b01111111, // 8 0b01100111, // 9 0b01110111, // A (10) 0b01111100, // B (11) 0b01011000, // C (12) 0b01011110, // D (13) 0b01111001, // E (14) 0b01110001 // F (15) }; // *** Inicialização ADCON1 = 0x0F; DDRD = 0x00; // configura port D como saída DDRAbits.RA5 = 0; // DISP4 é saída DDRAbits.RA2 = 0; // DISP3 é saída DDREbits.RE0 = 0; // DISP2 é saída DDREbits.RE2 = 0; // DISP1 é saída //****Seleciona o display em que vai ser apresentado o valor ***** //Podes ativar um outro display aplicando 1 e desabilitando os outros DISP1 = 0; // DISP1 ligado se for catodo comum DISP2 = 1; // DISP2 desligado DISP3 = 1; // DISP3 desligado DISP4 = 1; // DISP4 desligado INTCON2bits.RBPU = 0; // ativa pul-ups while(1){ int i; for ( i=0 ; i<=9 ; i++ ){ PORTD = table[i]; //Envia os dados para os pinos do DISPLAY Delay10KTCYx(10000); // delay de um segundo //****Seleciona o dado que será i=7; apresentado**** } } } AulA 5: #include<P18F4550.h> //// Configurções #pragma config PLLDIV = 5 // PLL para 20MHz #pragma config CPUDIV = OSC1_PLL2 // PLL desligado #pragma config FOSC = HS // Fosc = 20MHz -> Tcy = 200ns #pragma config WDT = OFF // Watchdog desativado #pragma config PBADEN = OFF // PORTB começa como digital #pragma config LVP = OFF // Sem gravação em baixa tensão #pragma config XINST = OFF // Desativa o modo de programação estendida // Definições de hardware #define INC PORTBbits.RB0 // DISP1 #define DEC PORTBbits.RB1 // DISP1 #define DISP4 PORTAbits.RA5 // DISP4 #define DISP3 PORTAbits.RA2 // DISP3 #define DISP2 PORTEbits.RE0 // DISP2 #define DISP1 PORTEbits.RE2 // DISP1 #define DISPLAY PORTD // Segmentos do display ligados em PORTD void main(void){ // Declaração de variáveis int i = 0; // tabela de dígitos do display (matriz com 10 posições) char table[] = { 0b00111111, // 0 0b00000110, // 1 0b01011011, // 2 0b01001111, // 3 0b01100110, // 4 0b01101101, // 5 0b01111100, // 6 0b00000111, // 7 0b01111111, // 8 0b01100111, // 9 0b01110111, // A (10) 0b01111100, // B (11) 0b01011000, // C (12) 0b01011110, // D (13) 0b01111001, // E (14) 0b01110001 // F (15) }; // *** Inicialização ADCON1 = 0x0F; DDRD = 0x00; // configura port D como saída DDRAbits.RA5 = 0; // DISP4 é saída DDRAbits.RA2 = 0; // DISP3 é saída DDREbits.RE0 = 0; // DISP2 é saída DDREbits.RE2 = 0; // DISP1 é saída //****Seleciona o display em que vai ser apresentado o valor ***** //Podes ativar um outro display aplicando 1 e desabilitando os outros DISP1 = 0; // DISP1 ligado se for catodo comum Delay10KTCYx(10000); // delay de um segundo DISP1 = 1; // DISP1 ligado se for catodo comum Delay10KTCYx(10000); // delay de um segundo DISP2 = 0; // DISP2 desligado Delay10KTCYx(10000); // delay de um segundo DISP2 = 1; // DISP2 desligado Delay10KTCYx(10000); // delay de um segundo DISP3 = 1; // DISP3 desligado DISP4 = 1; // DISP4 desligado INTCON2bits.RBPU = 0; // ativa pul-ups while(1){ int i; int j; for ( i=0 ; i<=9 ; i++ ){ PORTD = table[i]; //Envia os dados para os pinos do DISPLAY for ( j=0 ; j<=9 ; j++ ){ PORTD = table[j]; //Envia os dados para os pinos do DISPLAY Delay10KTCYx(10000); // delay de um segundo//****Seleciona o dado que será i=7; apresentado**** } } } } #include<P18F4550.h> //// Configurções #pragma config PLLDIV = 5 // PLL para 20MHz #pragma config CPUDIV = OSC1_PLL2 // PLL desligado #pragma config FOSC = HS // Fosc = 20MHz -> Tcy = 200ns #pragma config WDT = OFF // Watchdog desativado #pragma config PBADEN = OFF // PORTB começa como digital #pragma config LVP = OFF // Sem gravação em baixa tensão #pragma config XINST = OFF // Desativa o modo de programação estendida // Definições de hardware #define INC PORTBbits.RB0 // DISP1 #define DEC PORTBbits.RB1 // DISP1 #define DISP4 PORTAbits.RA5 // DISP4 #define DISP3 PORTAbits.RA2 // DISP3 #define DISP2 PORTEbits.RE0 // DISP2 #define DISP1 PORTEbits.RE2 // DISP1 #define DISPLAY PORTD // Segmentos do display ligados em PORTD void main(void){ // Declaração de variáveis int i = 0; // tabela de dígitos do display (matriz com 10 posições) char table[] = { 0b00111111, // 0 0b00000110, // 1 0b01011011, // 2 0b01001111, // 3 0b01100110, // 4 0b01101101, // 5 0b01111100, // 6 0b00000111, // 7 0b01111111, // 8 0b01100111, // 9 0b01110111, // A (10) 0b01111100, // B (11) 0b01011000, // C (12) 0b01011110, // D (13) 0b01111001, // E (14) 0b01110001 // F (15) }; // *** Inicialização ADCON1 = 0x0F; DDRD = 0x00; // configura port D como saída DDRAbits.RA5 = 0; // DISP4 é saída DDRAbits.RA2 = 0; // DISP3 é saída DDREbits.RE0 = 0; // DISP2 é saída DDREbits.RE2 = 0; // DISP1 é saída //****Seleciona o display em que vai ser apresentado o valor ***** //Podes ativar um outro display aplicando 1 e desabilitando os outros DISP1 = 1; // DISP3 desligado DISP2 = 1; // DISP4 desligado DISP3 = 1; // DISP3 desligado DISP4 = 1; // DISP4 desligado INTCON2bits.RBPU = 0; // ativa pul-ups while(1){ int i; int j=0; for ( i=0 ; i<=9 ; i++ ){ PORTD = table[i]; //Envia os dados para os pinos do DISPLAY //Envia os dados para os pinos do DISPLAY for ( j=0 ; j<=9 ; j++ ){ PORTD = table[j]; //Envia os dados para os pinos do DISPLAY DISP1 = 0; // DISP1 ligado se for catodo comum Delay10KTCYx(10000); // delay de um segundo DISP1 = 1; // DISP2 desligado Delay10KTCYx(10000); // delay de um segundo DISP2 = 0; // DISP1 ligado se for catodo comum Delay10KTCYx(10000); // delay de um segundo DISP2 = 1; // DISP2 desligado Delay10KTCYx(10000); // delay de um segundo } } } }