Hi, I'm writing a code for digital clock in Keil C, but I'm not getting the expected results. Can anybody please help me with the program? The code is as follows..
#include <AT892051.H> #include <stdio.h> #include <intrins.h>
sbit PIN_P10=P1^0;/* Character to be transfered through this bit in parallel*/ sbit PIN_P11=P1^1;/* Clock*/ sbit PIN_P12=P1^2;/* Latch*/ sbit CS4=P1^3; /* 1st 7-segment Display*/ sbit CS3=P1^4; /* 2nd 7-segment Display*/ sbit CS2=P1^5; /* 3rd 7-segment Display*/ sbit CS1=P1^6; /* 4th 7-segment Display*/
unsigned char DataWrite; unsigned char _crol_(unsigned char Temp,unsigned char DataWrite); char Display_Buffer[6]; unsigned char Dispcount; unsigned char mscount;
int Hours=1; int Minutes=0; int Seconds=0; int i=0; char Temp;
code unsigned char Lookup[11]= { 0xEE,0x28,0xCD,0x6C,0x2B,0x67,0xE7,0x2C,0xEF,0x2F };
void main() { TMOD=0x01; TH0=0xF8; /* Initializing timer0*/ TL0=0x30; /*for 1ms*/ IE=0x82; TR0=1; do { sprintf(Display_Buffer,"%02d%02d",Hours,Minutes); /* converting int into char*/ }while(1); } void Timer0(void) interrupt 1 { TF0=0; TR0=0; TH0=0xF8; TL0=0x30; TR0=1; { mscount++; Dispcount++; if(mscount>=1000) { mscount=0; Seconds++; } if(Seconds>=59) { Seconds=0; Minutes++; } if(Minutes>=59) { Minutes=0; Hours++; } if(Hours>=12) { Hours=1; } } { if(Dispcount==29) /* This code is for refresh rate*/ { CS1=0; CS2=0; CS3=0; CS4=0; } if(Dispcount==30) { DataWrite=Lookup[Display_Buffer[0]-0x30]; } if(8>i) { i++; if (Dispcount==34) { Temp=DataWrite; } if (Dispcount==32) { PIN_P11=1; } if (Dispcount==36) { PIN_P10=Temp^7; } if (Dispcount==38) { PIN_P11=0; } if (Dispcount==40) { DataWrite=_crol_(Temp,1); } } PIN_P12=0; if(Dispcount==48) { CS1=1; } } { if(Dispcount==49) { CS1=0; CS2=0; CS3=0; CS4=0; } if(Dispcount==50) { DataWrite=Lookup[Display_Buffer[1]-0x30]; } { if(8>i) { i++; if (Dispcount==54) { Temp=DataWrite; } if (Dispcount==52) { PIN_P11=1; } if (Dispcount==56) { PIN_P10=Temp^7; } if (Dispcount==58) { PIN_P11=0; } if (Dispcount==60) { DataWrite=_crol_(Temp,1); } } PIN_P12=0; } if(Dispcount==68) { CS2=1; } } { if(Dispcount==69) { CS1=0; CS2=0; CS3=0; CS4=0; } if(Dispcount==70) { DataWrite=Lookup[Display_Buffer[2]-0x30]; } { if(8>i) { i++; if (Dispcount==74) { Temp=DataWrite; } if (Dispcount==72) { PIN_P11=1; } if (Dispcount==76) { PIN_P10=Temp^7; } if (Dispcount==78) { PIN_P11=0; } if (Dispcount==80) { DataWrite=_crol_(Temp,1); } } PIN_P12=0; } if(Dispcount==88) { CS3=1; } } { if(Dispcount==89) { CS1=0; CS2=0; CS3=0; CS4=0; } if(Dispcount==90) { DataWrite=Lookup[Display_Buffer[3]-0x30]; } { if(8>i) { i++; if (Dispcount==94) { Temp=DataWrite; } if (Dispcount==92) { PIN_P11=1; } if (Dispcount==96) { PIN_P10=Temp^7; } if (Dispcount==98) { PIN_P11=0; } if (Dispcount==100) { DataWrite=_crol_(Temp,1); } } PIN_P12=0; } if(Dispcount==108) { CS4=1; } } if(Dispcount==821) { CS1,CS2,CS3,CS4=0; } } RETI;
Started to reformat your text, but decided there were more important things to do.
Surely, your code doesn't look like this on your editor?
What's the RETI at the end for?
It's for the return of the interrupt service routine to its address
Thanks for the lesson in RETI, I'm always prepared to learn new things.
Thing is, I was questioning why you placed it where you did - Like outside any closing braces.
because RETI shud always be used after an interrupt routine in the end.
More likely you neglected to include the closing brace in your post.
No. if i give the RETI instruction before the brace, it gives an error.
IB Shy Posted"Started to reformat your text, but decided there were more important things to do."
I started trying to decipher your scribbles and decided there were more important things to do
DO post some code
Erik
code: something that is indented and commented text/scribbles: something unreadable
View all questions in Keil forum