I,ve made a "tacho" using an 8051 , a 4511 decoder and 4 digit 7 seg display. its not very accurate where am i going wrong with my code.
Code:#include <reg66x.h> #define on 1 #define off 0 void delay(); unsigned int F,number,i,count,overflow,digit1,digit2,digit3,digit4; float T; sbit enable_digit1 = P1^0; sbit enable_digit2 = P1^1; sbit enable_digit3 = P1^2; sbit enable_digit4 = P1^3; void an_interrupt() interrupt 0 using 1 { TR0 =on; if (count<3) {count++;} else TR0 = off; T = overflow* 65536 ; T = T + ( TH0 *256 ) + TL0 ; T = T * 0.000000543; F = 1/T; number = F * 60 ; digit1 = (number/1000); digit2 = ( (number%1000)/100 ); digit3 = ( (number%100)/10 ); digit4 = ( (number%10) ); count = 0; overflow = 0; TH0 = 0x00; TL0 = 0x00; } void timing ()interrupt 1 using 2 { overflow++; } void main (void) { count = 0; // set count zero IT0 =on; // make interrupt edge triggered TMOD = 0x01; //mode 1 TH0 = 0x00; TL0 = 0x00; TR0 = off; //timer0 off EA = on; //global enable all ET0 = on; //enable timer zero EX0 = on; //enable external interrupt while (on) { P2 = digit1; //multiplex digits on and off enable_digit1 = on; delay(); enable_digit1 = off; P2 = digit2; enable_digit2 = on; delay(); enable_digit2 = off; P2 = digit3; enable_digit3 = on; delay(); enable_digit3 = off; P2 = digit4; enable_digit4 = on; delay(); enable_digit4 = off; } } void delay() { for(i=0; i<255; i++) { } }



LinkBack URL
About LinkBacks


