Hallo
Könnte mir mal vielleicht jemand mein Programm anschauen?
Funktioniert dass?
Habe ich da keine Probleme mit Interrupt zeiten oder so?
#include "Display_utils.h"
unsigned short portd_array[4];
unsigned int i, X_high, y_low ,cntUberlauf, cntFlanke, digit, number;
unsigned long TMR1, Frequenz;
// Unterprogramme
void initialisieren(){
//OPTION_REG = 0b01000000;
TRISA = 0x00;
TRISC = 0x00;
TRISB = 0xFF;
TRISC = 0x00;
TRISD = 0x00;
INTCON = 0b11010000;
PIE1 = 0b00000001;
T1CON = 0b00000001;
PORTA = 0x00;
PORTC = 0x00;
PORTD = 0x00;
TMR1H = 0;
TMR1L = 0;
cntUberlauf = 0;
cntFlanke = 0;
digit = 0;
number = 0;
Frequenz = 1000*Clock_Khz();
digit = number / 1000u ; // extract thousands digit
portd_array[3] = mask(digit); // and store it to PORTD array
digit = (number / 100u) % 10u; // extract hundreds digit
portd_array[2] = mask(digit); // and store it to PORTD array
digit = (number / 10u) % 10u; // extract tens digit
portd_array[1] = mask(digit); // and store it to PORTD array
digit = number % 10u; // extract ones digit
portd_array[0] = mask(digit);
}
unsigned float Drehzahl(unsigned int Uberlauf, unsigned int TMR){
float a;
const long Max_Zaehlerstand = 65535;
const int TMR_Vorteiler = 1;
const int Pulse_pro_Umdrehung = 1;
a = 0;
a = (Uberlauf*Max_Zaehlerstand)*TMR_Vorteiler;
a = a+TMR;
a = a*Pulse_pro_Umdrehung;
a = a*4;
a = a/Frequenz;
a = 60/a;
return a;
}
void interrupt() {
INTCON.GIE = 0;
if (INTCON.INTF == 1){
if (cntFlanke = 0){
TMR1H = 0x00;
TMR1L = 0x00;
cntUberlauf = 0;
}
INTCON.INTF = 0;
cntFlanke++;
}
if (PIR1.TMR1IF == 1){
PIR1.TMR1IF = 0;
cntUberlauf++;
PORTC = ~PORTC;
}
INTCON.GIE = 1;
}
// Hauptprogramm
void main() {
initialisieren();
while(1) {
i=0;
while(i<200){
if (i==0 & cntFlanke==0){
INTCON.GIE = 0;
X_high = 0xAB;
y_low = 0xCC;
TMR1 = (X_high<<8)+y_low;
//TMR1 = (TMR1H<<8)+TMR1L;
number= Drehzahl(cntUberlauf,TMR1);
digit = number / 1000u ; // extract thousands
digit
portd_array[3] = mask(digit); // and store it to
PORTD array
digit = (number / 100u) % 10u; // extract hundreds
digit
portd_array[2] = mask(digit); // and store it to
PORTD array
digit = (number / 10u) % 10u; // extract tens digit
portd_array[1] = mask(digit); // and store it to
PORTD array
digit = number % 10u; // extract ones digit
portd_array[0] = mask(digit);
cntUberlauf = 0;
cntFlanke = 0;
INTCON.GIE = 1;
}
PORTD = portd_array[0];
PORTA = 0x01;
Delay_us(500);
PORTA = 0x00;
if (number >= 10){
PORTD = portd_array[1];
PORTA = 0x02;
Delay_us(500);
PORTA = 0x00;
}
if (number >= 100){
PORTD = portd_array[2];
PORTA = 0x04;
Delay_us(500);
PORTA = 0x00;
}
if (number >= 1000){
PORTD = portd_array[3];
PORTA = 0x08;
Delay_us(500);
PORTA = 0x00;
}
i++;
}
}
}
freundliche Grüsse
Remo Hug