/* RX & 3LED BY M.K AT90S2313 4MHz 2011/4/26-5/13 7-LED Ver2 6/5 +Timer Last Mod 2011/6/6 SW_RX Used ROM (bytes): 552 (27%) */ sbit LED_0 at PORTD4_bit; sbit LED_1 at PORTD5_bit; sbit LED_2 at PORTD6_bit; sbit dp at PORTB7_bit; //Decimal point sbit Beep at PORTD2_bit; //Sound sbit WDT at DDD0_bit; sbit WD at PORTD0_bit; unsigned char I_Cunt; unsigned char Cps,Csec,Cmin,Chour; unsigned char LED_0Data,LED_1Data; char SW_RX(char N_flag){ //1=again 0=single char i,R_data,Dummy; // WDT=0; // 0=input do{ do{ while(WD); // check 1? Delay_us(19); }while(~WD); // 1=over Delay_us(20); }while(WD); // 0=over // R_data=0; Delay_us(16); for(i=0;i<8;i++){ if(WD==1) R_data++; else Dummy++; R_data<<1; Delay_us(16); } if(N_flag==1){ WDT=1; // 1=output WD=0; } return(R_data); } void To_7SegLED (char S_Data) { switch(S_Data & 0x0f){ case 0: PORTB=0x3f; break; case 1: PORTB=0x06; break; case 2: PORTB=0x5b; break; case 3: PORTB=0x4f; break; case 4: PORTB=0x66; break; case 5: PORTB=0x6d; break; case 6: PORTB=0x7d; break; case 7: PORTB=0x07; break; case 8: PORTB=0x7f; break; case 9: PORTB=0x6f; break; default: PORTB=0x08; } } void Timer0_Interrupt() iv IVT_ADDR_TIMER0_OVF0 { I_Cunt++; // if(I_Cunt==1){ // **1 LED_2=1; //OFF To_7SegLED(LED_0Data); LED_0=0; //ON // Timer Cps++; if(Cps==82){ //12.28*81=995mSec Cps=0; Csec++; if(Csec==60){ //1Min Csec=0; Cmin++; if((Cmin & 0x0f)==0x0A) Cmin+=6; if(Cmin==0x60){ Cmin=0; Chour++; if(Chour==9) //Max Chour=0; } } } } if(I_Cunt==2){ // *1* LED_0=1; //OFF To_7SegLED(LED_0Data >>4); LED_1=0; //ON // if(Csec==0){ //data in LED_0Data=Cmin; LED_1Data=Chour; } } if(I_Cunt==3){ // 1** I_Cunt=0; LED_1=1; //OFF To_7SegLED(LED_1Data); if((Csec & 1)==1) dp=1; LED_2=0; //ON } } void main() { DDRB = 0xFF; // 1=out PORTB= 0; DDRD = 0b11111100; // 1=out 0=input PORTD= 0b11111100; // I_Cunt= 0; //I_Cunter Reset TCCR0 = 0x03; //1/64=16uec TCNT0 = 0; // 16*256=4mSec TOIE0_bit=1; // Interrupt on TIMSK = 2; SREG_I_bit = 1; // asm sei; // Cps=0; //clear register Csec=0; Cmin=0; Chour=0; LED_1Data=0; //Test LED_0Data=0; // while(1){ // LED_0Data=SW_RX(0); //5/17 Test if(((Cmin==0)|(Cmin==0X30))&&(Csec==0)){ Beep=~Beep; Delay_us(150); //3.3KHz } } }