Sunteți pe pagina 1din 19

1 Questo CDIGO FONTE:

/* * File: Leds_randomico.c * Author: Pedro Ernesto Veras Junior * * Created on August 30, 2013, 8:23 PM */

#include <xc.h> #include <pic18.h> #include <htc.h> #define _XTAL_FREQ 4000000 #define botao1 PORTBbits.RB0 #define botao2 PORTBbits.RB1 #define botao3 PORTBbits.RB2 #define botao4 PORTBbits.RB3 #define flag_trm0 INTCONbits.TMR0IF #define flag_trm1 PIR1bits.TMR1IF char valores[4]; char gera[4]; char vetor[4]={1,2,4,8}; short int i,m,r,padrao,delay;

void reinicia_tmr0(void){ flag_trm0=0; TMR0L=0x03;//TIMER CARREGADO if(padrao=255){padrao=0;} }

void aperto_botao(void){ INTCONbits.TMR0IE=0;//desabilitando temporariamente flag_trm0=0;//zerar a flag do timer1 flag_trm1=0;//zerar a flag do timer0 if(gera[0]==0){LATC=vetor[0];} if(gera[1]==1){LATC=vetor[1];} if(gera[2]==2){LATC=vetor[2];} if(gera[3]==3){LATC=vetor[3];} while(delay<10){delay++; if(botao1 || botao2 || botao3 || botao4){ if(PORTB=0x08 && PORTC=0x08){LATD=0xFC;} if(PORTB=0x04 && PORTC=0x04){LATD=0xFC;} if(PORTB=0x02 && PORTC=0x02){LATD=0xFC;} if(PORTB=0x01 && PORTC=0x01){LATD=0xFC;} __delay_ms(10); } LATD = 0xCF; delay=0; r=0; } }

void interrupt geral(void){if(flag_trm0){reinicia_tmr0();} if(flag_trm1){aperto_botao();} } void main(void) {padrao=1; INTCON2bits.RBPU=0;//HABILITA OS RESISTORES DA PORTA b ADCON1=0x0F; INTCONbits.GIE=1;//Habilitando as interrupcoes INTCONbits.TMR0IE=1;//Habilitando a interrupo do timer 0 PIE1bits.TMR1IE=1;//habilitando a interrupo do timer 1 //configuraes iniciais TRISB=1;// CONFIGURA COMO ENTRADA, PORTA PARA BOTOES TRISC=0;// CONFIGURA COMO SAIDA, PORTA PARA LEDS TRISD=0;// display TMR0ON=0; //DESLIGO O TIMER0 T0CONbits.T08BIT=1;//CONFIGURA O TIMER 0 NO MODO 8 BITS T0CONbits.T0CS=0;//clock interno(fosc/4) T0CONbits.T0SE=0;//low-to-high T0CONbits.PSA=1;// NAO ASSUME VALOR DE PRESCALER TMR0L=0x03;//TIMER CARREGADO T1CONbits.RD16=1;//MODO DE 16 BITS DO TIMER 1 T1CONbits.T1RUN=0;//TIMER N A FONTE DE CLOCK DO SISTEMA T1CONbits.TMR1CS=0; //HABILITAR A INTERRUPO DO TIMER 1 //HABILITAR TODAS AS INTERRUPES TMR1L=0X60;// CARREGO PARTE BAIXA TMR1H=0xF0;// CARREGO PARTE ALTA //configuraes iniciais

//usar o timer0 e o timer 1 // usar o timer0 pra contar o tempo // usar o timer1 pra jogar no pseudo // configurar o timer1 pra 8 bits // jogar esse valor em timer while(1){padrao++; INTCONbits.TMR0IE=1;//reabilitando for(i=0;i<4;i++){ valores[i]=((TMR0*250+255)%255) + padrao; } for(m=0;m<4;m++) { gera[r]=valores[m] && 00000011; r++;} } }

DESENHO DO PROTEUS:

2 Questo CDIGO FONTE:


/* * File: varredura_displays.c * Author: Pedro Ernesto Veras Junior * * Created on 2 de Agosto de 2013, 07:52 */

#include <pic18.h> #include <htc.h> #define flag INTCONbits.TMR0IF

char x[4]={8,4,2,1}; char y[12]={0x5B,0x3F,0x06,0x3F,0x06,0x07,0x3F,0x06,0x3F,0x06,0x6F,0x7D}; int j=0; int i=0;

int thigaga=0; interrupt void timer_rti(void)

{ thigaga++; flag = 0; TMR0H =0xF0;// CARREGOU PARTE ALTA TMR0L=0X60;// CARREGOU PARTE BAIXA LATA=~x[i];//inverte os bits do byte i++; if(i==4){i=0;} if(thigaga==50){ thigaga=0; (j==11)? (j=0):(j++);

} } int main(void) { LATA=0xFF;//INICIA A PORTA EM 1

ADCON1=0x0F; INTCONbits.GIE=1;//Habilitando as interrupcoes INTCONbits.TMR0IE=1;//Habilitando a interrupo do timer0 T0CONbits.TMR0ON=0; //DESLIGANDO O TIMER TRISA=0;//Define a porta A como sada TRISC=0; //Porta C como sada T0CONbits.T08BIT=0;//Define o modo de 16 bits T0CONbits.T0CS=0;//uso como temporizador T0CONbits.T0SE=0;//low-to-high

T0CONbits.PSA=1;// NAO ASSUME VALOR DE PRESCALER //T0CONbits.T0PS=> NO IMPORTA O VALOR POIS O PRESCALER ESTA DESABILITADO TMR0H =0xF0;// CARREGO PARTE ALTA TMR0L=0X60;// CARREGO PARTE BAIXA // O TEMPO CARREGADO ME DAR 4 MS====>65536-4000==>61536 T0CONbits.TMR0ON=1; //LIGANDO O TIMEr 0 while(1){ if(i==0){LATC=~y[j];} if(i==1){LATC=~y[j+1];} if(i==2){LATC=~y[j+2];} if(i==3){LATC=~y[j+3];} } }

DESENHO DO PROTEUS:

3 Questo CDIGO FONTE:


/* * File: comunicacao_serial.c * Author: Pedro Ernesto Veras Junior * * Created on August 23, 2013, 6:13 PM */ #include <xc.h> #include <htc.h> #define flag INTCONbits.TMR0IF

char comando[10]; short int i,t; short int z=0; void envia(char *msg){ if(z<3){ while(*msg){ TXREG=*(msg); msg++; while(!TXSTAbits.TRMT); } } } void insere_comando(){

comando[i]=RCREG; i++; } void checa_tempo(void){ flag = 0; t++; if(t==100){ i=0; z=0;//reinicio a apario do menu t=0;//reinicio a contagem para o timer } } void trata_serial(){ PIR1bits.RCIF=0;//zero a flag de interrupo t=0; flag=0; insere_comando(); if(i>1){i=0; if (comando[0]=='L'){ if (comando[1]=='1') LATCbits.LC0=0;//ligo o LED1 if (comando[1]=='2') LATCbits.LC1=0;//ligo o LED2 if (comando[1]=='3') LATCbits.LC2=0;//ligo o LED3 if (comando[1]=='T'){

LATCbits.LC0=0;//ligo o LED1 LATCbits.LC1=0;//ligo o LED2 LATCbits.LC2=0;//ligo o LED3 } } if (comando[0]=='D'){ if (comando[1]=='1') LATCbits.LC0=1;//desligo o LED1 if (comando[1]=='2') LATCbits.LC1=1;//desligo o LED2 if (comando[1]=='3') LATCbits.LC2=1;//desligo o LED3 if (comando[1]=='T'){ LATCbits.LC0=1;//desligo o LED1 LATCbits.LC1=1;//desligo o LED2 LATCbits.LC2=1;//desligo o LED3 } } } } void interrupt gerencia(){ if(flag){checa_tempo();} if(PIR1bits.RCIF){trata_serial();} } void main(void) { //configuraes iniciais

LATCbits.LATC0=1;//inicia LED1 desligado LATCbits.LATC1=1;//inicia LED2 desligado LATCbits.LATC2=1;//inicia LED3 desligado TRISCbits.RC0=0;//pino de sada pra LED1 TRISCbits.RC1=0;//pino de sada pra LED2 TRISCbits.RC2=0;//pino de sada pra LED3 TRISCbits.RC6=0;//configuramos tx como sada, pino de transmisso TRISCbits.RC7=1;//configuramos rx como entrada, pino de recepo //configurar a baud rate TXSTA=0x24; RCSTA=0x90; SPBRG=25; // // // 9600 bps

INTCONbits.TMR0IE=1;//Habilitando a interrupo do timer0 T0CONbits.TMR0ON=0; //DESLIGANDO O TIMER T0CONbits.T08BIT=0;//Define o modo de 16 bits T0CONbits.T0CS=0;//uso como temporizador T0CONbits.T0SE=0;//low-to-high T0CONbits.PSA=1;// NAO ASSUME VALOR DE PRESCALER //T0CONbits.T0PS=> NO IMPORTA O VALOR POIS O PRESCALER ESTA DESABILITADO TMR0H =0x3C;// CARREGO PARTE ALTA TMR0L=0XB0;// CARREGO PARTE BAIXA // O TEMPO CARREGADO ME DAR 50 MS====>65536-50000==>15536 T0CONbits.TMR0ON=1; //LIGANDO O TIMEr 0 INTCONbits.GIE=1; INTCONbits.PEIE=1;//habilita as interrupcoes PIE1bits.RCIE=1;// habilita a interrupcao de recepcao serial

while(1){//espera a interrupo acontecer if(z<3){ envia("programa iniciado\r\n"); z++; envia("digite L e '1', '2', '3' para ligar os LED1, LED2, LED3 ou todos\r\n"); z++; envia("digite D e '1', '2', '3' ou 'T' para ligar os LED1, LED2, LED3 ou todos\r\n"); z++; } } }

DESENHO DO PROTEUS:

4 Questo CDIGO FONTE:


/* * File: AD_10.c * Authors: Pedro Ernesto Veras Junior * * Created on 9 de Agosto de 2013, 08:34 */ #include <pic18.h> #include <htc.h> #define flag INTCONbits.TMR0IF #define bitm1 LATBbits.LATB0 #define bitm2 LATBbits.LATB1 #define pass1 LATBbits.LATB3 #define pass2 LATBbits.LATB4 #define pass3 LATBbits.LATB5 #define pass4 LATBbits.LATB6 #define _XTAL_FREQ 4000000 //#pragama config OSC=HS; int result; short int delay; short int temp; short int x,u,d,z; int i=0; float k;

char tabela[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7C,0x07,0x7F,0x67}; void atraso(void); interrupt void mux_tmr0(void){ flag=0; if(i==0){bitm1=1; bitm2=0; } if(i==1){bitm1=0; bitm2=1; } i++; if (i==2){i=0;} ADCON0bits.DONE=1;//inicio a converso while(ADCON0bits.DONE){ result = 256*(ADRESH) +(ADRESL); k=5*(((float)result))/1023; temp=20*k;} delay++; if(delay==10){ delay=0; if(temp<=20){z=0; atraso(); pass1=0; __delay_ms(30); pass2=0;__delay_ms(30); pass3=0;__delay_ms(30); pass4=0;__delay_ms(30);// inserir a rotina do motor de passo aqu

} if(temp>20 && temp<29){ atraso(); pass1=0;__delay_ms(30); pass2=0;__delay_ms(30); pass3=0;__delay_ms(30); pass4=1;__delay_ms(30);} if(temp>=30 && temp<39){ atraso();pass1=0; __delay_ms(30); pass2=0; __delay_ms(30); pass3=1; __delay_ms(30); pass4=0; __delay_ms(30); } if(temp>=40 && temp<49){atraso();pass1=0; __delay_ms(30); pass2=1; __delay_ms(30); pass3=0; __delay_ms(30); pass4=0; __delay_ms(30); } if(temp>=50 && temp<59){ atraso();pass1=1; __delay_ms(30); pass2=0; __delay_ms(30); pass3=0; __delay_ms(30); pass4=0; } if(temp>=60 && temp<69){atraso();pass1=0; __delay_ms(30); pass2=0;__delay_ms(30);

pass3=0;__delay_ms(30); pass4=1;__delay_ms(30);// inserir a rotina do motor de passo aqu } if(temp>=70 && temp<79){atraso();pass1=0; __delay_ms(30); pass2=0; __delay_ms(30); pass3=1; __delay_ms(30); pass4=0; __delay_ms(30); } if(temp==80){ if(z==0){ atraso(); pass1=0;

__delay_ms(30); pass2=1; __delay_ms(30); pass3=0; __delay_ms(30); pass4=0;} z=1; atraso(); pass1=1;

__delay_ms(30); pass2=0; __delay_ms(30); pass3=0; __delay_ms(30); pass4=0; while(temp>9){ x++; temp = temp - 10;//separo a dezana da unidade } d=x; u=temp; temp=0; x=0; }

TMR0H =0xF0;// CARREGOU PARTE ALTA TMR0L=0X60;// CARREGOU PARTE BAIXA } } void main(void){ TRISC=0;//configura como saida TRISB=0;// configura como sada ADCON1=0x0E;// seleciona canais analogicos e digitais ADCON2=0X02;//Fosc/32---->375Khz(maximo--->625kHz) ADCON1bits.VCFG1=0;//referencia de alimentao do PIC, Vss ADCON1bits.VCFG0=0;//referencia de alimentao do pic, Vdd ADCON2bits.ACQT0=1;// ADCON2bits.ACQT1=1;///tempo de aquisio ADCON2bits.ACQT2=1;// ADCON0bits.CHS0 =0;// ADCON0bits.CHS1 =0;////configuramos o canal AN0 como analogico. ADCON0bits.CHS2 =0;//// ADCON0bits.CHS3 =0;// ADCON2bits.ADFM =1;//justifica a esquerda ADCON0bits.ADON =1;//Ativa o conversor ADCON0bits.GO =1;//inicia a converso T0CONbits.TMR0ON=0; //DESLIGANDO O TIMER INTCONbits.GIE=1;//Habilitando as interrupcoes INTCONbits.TMR0IE=1;//Habilitando a interrupo do timer T0CONbits.T08BIT=0;//Define o modo de 16 bits T0CONbits.T0CS=0;//uso como temporizador

T0CONbits.T0SE=0;//low-to-high T0CONbits.PSA=1;// NAO ASSUME VALOR DE PRESCALER //T0CONbits.T0PS=> NO IMPORTA O VALOR POIS O PRESCALER ESTA DESABILITADO TMR0H =0xF0;// CARREGO PARTE ALTA TMR0L=0X60;// CARREGO PARTE BAIXA // O TEMPO CARREGADO ME DAR 4 MS====>65536-4000==>61536 T0CONbits.TMR0ON=1; //LIGANDO O TIMEr 0 while(1){ if(i==0){ LATC=~tabela[u];}//mostra a unidade da temperatura nos displays if(i==1){ LATC=~tabela[d];}//mostra a dezena da temperatura nos display } } void atraso(void){ int a; for (a=0;a<5;a++){__delay_ms(100);} }

DESENHO DO PROTEUS:

S-ar putea să vă placă și