Aplicatii Practice ale Microcontrolerelor
Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei - Iasi 2
• Configurarea unui bloc intern TIMER. • Lucrul cu blocul TIMER in intrerupere.
Cuprins Lab. 3
Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei - Iasi 3
Arhitectura PIC16F887
PO
RTU
RI
PWM
ADC
EEPROM
SPI/I2CUARTTIMER
Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei - Iasi 4
TMR 0 TMR 1 TMR 2
TIMERE PIC16F887
EXT OSCILATOR
INT OSCILATOR
Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei - Iasi 5
Inspire
Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei - Iasi 6
Registrii asociati blocului TIMER 1
T1CON
TMR1L
TMR1H
PIR1
PIE1
INTCON
CM2CON1
T1CON
Registru configurare Timer
Registru configurare Oscilator
OSCCON
TMR1IE
TMR1IF
GIE PEIE
Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei - Iasi 7
TMR1ON
Registrii asociati blocului TIMER 1
T1CON
TMR1ON
TMR1ON
TMR1CS
TMR1CS
TMR1CS
T1SYNC
T1SYNC
T1SYNC
T1OSCEN
T1OSCEN
T1CKPS
T1CKPS
T1CKPS
TMR1GE
TMR1GE
TMR1GE
T1GINV
T1GINV
T1GINV
T1OSCEN
PIC16F887
Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei - Iasi 8
Configurare TIMER 1 in intrerupere
activare TMR1
setare oscilator
setare prescaler
setare frecventa
T1CON
OSCCON
Ex: Calculul valorii variabilei de preincarcare
𝑭𝑶𝑺𝑪 = 𝟒𝑴𝑯𝒛
𝑭𝑻𝑴𝑹 =𝟒𝑴𝑯𝒛
𝟒= 𝟏𝑴𝑯𝒛
Frecventa Oscilator (OSCCON)
𝑻𝑻𝑴𝑹 =𝟏
𝑭𝑻𝑴𝑹=
𝟏
𝟏𝑴𝑯𝒛= 𝟏𝒖𝒔
Perioada de incrementare
𝒗𝒂𝒓𝒊𝒂𝒃𝒊𝒍𝒂𝒑𝒓𝒆𝒂𝒏𝒄𝒂𝒓𝒄𝒂𝒓𝒆_𝑻𝑴𝑹 = 𝟔𝟓𝟓𝟑𝟓 − 𝒙
Variabila de preincarcare
din T1CON bitul TMR1CS
Intarzierea doritaactivare intrerupere
PIE1
Stergere flag
PIR1
0000 0000 . 0000 0000
0000 0000 . 0000 0001
0000 0000 . 0000 0010
0000 0000 . 0000 0011
…
…
…
…
…
…
…
…
…
…
…
…
1111 1111 . 1111 1110
1111 1111 . 1111 1111
TMR
1L
TMR
1H
TMR1IF=1
“1” logic
0
Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei - Iasi 9
Configurare TIMER 1 in intrerupere
0000 0000 . 0000 0000
0000 0000 . 0000 0001
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
1111 1111 . 1111 1111
TMR1IF=1
TMR
1H
𝟏𝒖𝒔
Perioada de incrementare
0000 0000 . 0000 0000
0000 0000 . 0000 0001
0000 0000 . 0000 0010
𝑽𝑷_𝑻𝑴𝑹
Variabila de preincarcare
0000 0000 . 0000 0011
…
…
…
…
…
…
…
…
…
…
…
…
…
1111 1111 . 1111 1111
𝒙Intarziere dorita
TMR1IF=1
TMR1L
TMR1H
Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei - Iasi 10
Exemplu software TIMER 1 in intrerupere#include <xc.h> #define _XTAL_FREQ 8000000__PROG_CONFIG (1, 0x3FE4);__PROG_CONFIG (2, 0x1EFF);unsigned int a;#define LED RB0 void config_uc ()
{OSCCON = 0x73; //8MHzANSELB = 0x00;TRISB = 0x00;T1CON = 0x11;TMR1IE = 1;PEIE = 1;GIE = 1;
}//end configvoid main (void)
{config_uc ();while(1)
{// tai la
}//end while}//end main
void interrupt timer(void) {
TMR1IF = 0; TMR1H = 0xFC; // 65535us-1000us = 64535us = FC17TMR1L = 0x17;LED = !LED; // blinking led – 1ms ON / 1ms OFF
}//end interrupt
#include <xc.h> #define _XTAL_FREQ 8000000__PROG_CONFIG (1, 0x3FE4);__PROG_CONFIG (2, 0x1EFF);unsigned int a;#define LED RB0 void config_uc ()
{OSCCON = 0x73; //8MHzANSELB = 0x00;TRISB = 0x00;
}//end configvoid main (void)
{config_uc ();while(1)
{for (a=0; a<100;a++);LED = !LED; // blinking led
}//end while}//end main
PIC16LF1937
LED = 1; // blinking led – 1ms ON__delay_ms(1);LED = 0; // blinking led – 1ms OFF__delay_ms(1);
Intarzierea dorita preincarcare
Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei - Iasi 11
1. Sa se creeze o aplicatie (SW) folosind microcontrolerul PIC16LF1937 in care un led sa se aprinda si sa se stinga la un interval de 1 secunda.Sa se verifice timpul de switching si cu ajutortul osciloscopului.
Exercitii