ขนาดวิดีโอ: 1280 X 720853 X 480640 X 360
แสดงแผงควบคุมโปรแกรมเล่น
เล่นอัตโนมัติ
เล่นใหม่
Gracias por la explicacion , esta muy bueno el video
Se puede escribir en .asm
poderia me ajudar ?FIZ UM FREQUENCIMETRO, COM PRESCALER 1:1 E MEU PROFESSOR PEDIU PRA EU MUDAR PRA 1:4. NÃO SEI COMO PROCEDER.// Exemplo de Frequencímetro digital utilizando CCP#include#include#include#include "xlcd_mod.c"// Configurações#pragma config FOSC = HS#pragma config CPUDIV = OSC1_PLL2 // sinal de clk do sistema é o oscliador primário#pragma config PBADEN = OFF // Pinos do PORTB começam como digitais#pragma config PWRT = ON // Power Up Timer habilitado#pragma config WDT = OFF // Watchdog desativado#pragma config LVP = OFF // Desabilita gravação em baixa tensão#pragma config DEBUG = ON // habilita debug#pragma config CCP2MX = ON // Pino RC1 utilizado em CCP2// Variáveis globaischar k=0, ct_p = 0;long int per, freq;// Protótipos das Funções de Interrupçãovoid ISR_Padrao(void);///////////////////////////////////////////////////////////////////////// Interrupção padrão #pragma code high_vector=0x08 // int. de alta prioridadevoid int_alta(void){ _asm GOTO ISR_Padrao _endasm}#pragma code #pragma interrupt ISR_Padraovoid ISR_Padrao(void){ ct_p=1; k++; per = (CCPR2H*256)+(CCPR2L); TMR1H = 0; TMR1L = 0; PIR2bits.CCP2IF = 0; // zera flag da int CCP2}///////////////////////////////////////////////////////////////////////void main() { char freq_disp[] = {"00000"}; DDRCbits.RC1 = 1; // RC1/CCP2 como entrada // Iniciação do LCD OpenXLCD( FOUR_BIT & LINES_5X7 ); WriteCmdXLCD(0x01); Delay10KTCYx(10); // Configuração to Timer1 (Incremento a cada 8 Tcy) T1CON = 0b10111001; PIR1bits.TMR1IF = 0; // zera flag do Timer1 TMR1H = 0; TMR1L = 0; // Seleção de Timer1 T3CONbits.T3CCP1 = 0; T3CONbits.T3CCP2 = 0; CCP2CON = 0b00000101; // Capture para borda de subida, prescaler 1:1 //Configuração das interrupções RCONbits.IPEN = 1; // habilita prioridade PIR2bits.CCP2IF = 0; // zera flag da interrupção CCP2 PIE2bits.CCP2IE = 1; // habilita interrupção do CCP2 IPR2bits.CCP2IP = 1; INTCONbits.GIEH = 1; // habilita int. INTCONbits.GIEL = 1; // habilita int. periféricos while(1) { if (ct_p) { freq = 625000/per; ct_p=0; } if (k==5) // Atualiza display a cada 5 interrupções { ltoa(freq,freq_disp); WriteCmdXLCD(0x80); putrsXLCD("Freq: "); putsXLCD(freq_disp); putrsXLCD(" Hz "); WriteCmdXLCD(0x0C); k=0; } } }
Gracias por la explicacion , esta muy bueno el video
Se puede escribir en .asm
poderia me ajudar ?
FIZ UM FREQUENCIMETRO, COM PRESCALER 1:1 E MEU PROFESSOR PEDIU PRA EU MUDAR PRA 1:4. NÃO SEI COMO PROCEDER.
// Exemplo de Frequencímetro digital utilizando CCP
#include
#include
#include
#include "xlcd_mod.c"
// Configurações
#pragma config FOSC = HS
#pragma config CPUDIV = OSC1_PLL2 // sinal de clk do sistema é o oscliador primário
#pragma config PBADEN = OFF // Pinos do PORTB começam como digitais
#pragma config PWRT = ON // Power Up Timer habilitado
#pragma config WDT = OFF // Watchdog desativado
#pragma config LVP = OFF // Desabilita gravação em baixa tensão
#pragma config DEBUG = ON // habilita debug
#pragma config CCP2MX = ON // Pino RC1 utilizado em CCP2
// Variáveis globais
char k=0, ct_p = 0;
long int per, freq;
// Protótipos das Funções de Interrupção
void ISR_Padrao(void);
///////////////////////////////////////////////////////////////////////
// Interrupção padrão
#pragma code high_vector=0x08 // int. de alta prioridade
void int_alta(void)
{
_asm GOTO ISR_Padrao _endasm
}
#pragma code
#pragma interrupt ISR_Padrao
void ISR_Padrao(void)
{
ct_p=1;
k++;
per = (CCPR2H*256)+(CCPR2L);
TMR1H = 0;
TMR1L = 0;
PIR2bits.CCP2IF = 0; // zera flag da int CCP2
}
///////////////////////////////////////////////////////////////////////
void main()
{
char freq_disp[] = {"00000"};
DDRCbits.RC1 = 1; // RC1/CCP2 como entrada
// Iniciação do LCD
OpenXLCD( FOUR_BIT & LINES_5X7 );
WriteCmdXLCD(0x01);
Delay10KTCYx(10);
// Configuração to Timer1 (Incremento a cada 8 Tcy)
T1CON = 0b10111001;
PIR1bits.TMR1IF = 0; // zera flag do Timer1
TMR1H = 0;
TMR1L = 0;
// Seleção de Timer1
T3CONbits.T3CCP1 = 0;
T3CONbits.T3CCP2 = 0;
CCP2CON = 0b00000101; // Capture para borda de subida, prescaler 1:1
//Configuração das interrupções
RCONbits.IPEN = 1; // habilita prioridade
PIR2bits.CCP2IF = 0; // zera flag da interrupção CCP2
PIE2bits.CCP2IE = 1; // habilita interrupção do CCP2
IPR2bits.CCP2IP = 1;
INTCONbits.GIEH = 1; // habilita int.
INTCONbits.GIEL = 1; // habilita int. periféricos
while(1)
{
if (ct_p)
{
freq = 625000/per;
ct_p=0;
}
if (k==5) // Atualiza display a cada 5 interrupções
{
ltoa(freq,freq_disp);
WriteCmdXLCD(0x80);
putrsXLCD("Freq: ");
putsXLCD(freq_disp);
putrsXLCD(" Hz ");
WriteCmdXLCD(0x0C);
k=0;
}
}
}