Professional Documents
Culture Documents
SesticAdna PE LV9
SesticAdna PE LV9
#pragma config
FOSC=HS,WDTE=OFF,PWRTE=OFF,MCLRE=ON,CP=OFF,CPD=OFF,BOREN=OFF,CLKOU
TEN=OFF
#pragma config
IESO=OFF,FCMEN=OFF,WRT=OFF,VCAPEN=OFF,PLLEN=OFF,STVREN=OFF,LVP=OFF
#define _XTAL_FREQ 8000000
#include <xc.h>
void initialize(){
TRISD = 0x00;
ANSELD = 0x00;
TRISDbits.TRISD7 = 1;
ANSELB = 0x00;
TRISB = 0x00;
LATB = 0x00;
//timer0
OPTION_REGbits.TMR0CS = 0;
OPTION_REGbits.TMR0SE = 0;
OPTION_REGbits.PSA = 0;
OPTION_REGbits.PS2 = 0;
OPTION_REGbits.PS1 = 1;
OPTION_REGbits.PS0 = 0;
TMR0=5;
/*INTCONbits.GIE=1;
INTCONbits.TMR0IE=1;*/
return;
}
void main() {
initialize();
short cnt = 0;
short uzlazna = 1;
while (1) {
//ovo je za generisanje impulsa na rd0
if(TMR0 == 0) {
LATDbits.LATD0 = 1 - LATDbits.LATD0;
TMR0 = 5;
}
//sad realizujemo brojac impulsa na rd7
if(PORTDbits.RD7){
if(uzlazna){
cnt++;
uzlazna=0;
}
}
else {
uzlazna=1;
}
LATB=cnt;
}
return;
}
Ovakav kod pri generisanju odgovarajuće četvrtke na RD0 zapravo pokazuje značajne
nepreciznosti, te se ispravno rješenje dobija tek korištenjem prekida.
#pragma config
FOSC=HS,WDTE=OFF,PWRTE=OFF,MCLRE=ON,CP=OFF,CPD=OFF,BOREN=OFF,CLKOU
TEN=OFF
#pragma config
IESO=OFF,FCMEN=OFF,WRT=OFF,VCAPEN=OFF,PLLEN=OFF,STVREN=OFF,LVP=OFF
#define _XTAL_FREQ 8000000
#include <xc.h>
void initialize(){
TRISDbits.TRISD0 = 0;
ANSELDbits.ANSD0 = 0;
TRISDbits.TRISD7 = 1;
ANSELDbits.ANSD7 = 0;
ANSELB = 0x00;
TRISB = 0x00;
LATB = 0x00;
//timer0
OPTION_REGbits.TMR0CS = 0;
OPTION_REGbits.PSA = 0;
OPTION_REGbits.PS2 = 0;
OPTION_REGbits.PS1 = 1;
OPTION_REGbits.PS0 = 0;
TMR0=5;
INTCONbits.GIE=1;
INTCONbits.TMR0IE=1;
return;
}
void main(void){
initialize();
short uzlazna = 1;
short brojac = 0;
while(1){
if(PORTDbits.RD7){
if(uzlazna){
brojac++;
uzlazna=0;
}
}
else{
uzlazna=1;
}
LATB=brojac;
}
return;
}