/***************************************************** This program was produced by the CodeWizardAVR V2.04.4a Advanced Automatic Program Generator © Copyright 1998-2009 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com Project : Version : Date : 31.05.2010 Author : NeVaDa Company : Microsoft Comments: Chip type : ATtiny2313 AVR Core Clock frequency: 8,000000 MHz Memory model : Tiny External RAM size : 0 Data Stack size : 32 *****************************************************/ #include #include unsigned char razrad=0b11101000; bit start=0; bit stop=0; unsigned char cloc[4]={0,0,0,0}; //unsigned char cloc[6]={0,0,0,0,0,0}; unsigned char tik=0; unsigned char des_tik=0; unsigned char sec=0; unsigned char des_sec=0; unsigned char min=0; //unsigned char des_min=0; unsigned char x=0; //unsigned char znak [20] = {0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110, 0b01101101, 0b01111101, 0b00000111, 0b01111111, 0b01101111};//знакогенератор. unsigned char znak [20] = {0b11000000, 0b11111001, 0b10100100, 0b10110000, 0b10011001, 0b10010010, 0b10000010, 0b11111000, 0b10000000, 0b10010000};//знакогенератор. //******************************** динамическая индикация ************************************ interrupt [TIM0_OVF] void timer0_ovf_isr(void) { PORTD = razrad^0xFF ; // PORTD = razrad; PORTB = znak [cloc[x]]; // if ((x==2) || (x==4)) {PORTB.7 =1;} else PORTB.7 =0; razrad>>=1; x++; // if (razrad == 0b1110001) razrad = 0b1111000; //if (x==6) {x=0; razrad=0b00100000;} if (x==4) {x=0; razrad=0b0001000;} if (min==1) {PORTB.7 =0;} } //****************************** отсчет времени ********************************** interrupt [TIM1_COMPA] void timer1_compa_isr(void) { if (start==0) goto m1; tik++; if (tik==10) {tik=0; des_tik++;} if (des_tik==10) {des_tik=0; sec++;} if (sec==10) {sec=0; des_sec++;} if (des_sec==6) {des_sec=0; des_sec++; min=1; } //if (des_sec==6) {PORTB.7 =1;} //if (des_min==6) {des_min=0;} cloc[0] = tik; cloc[1] = des_tik; cloc[2] = sec; cloc[3] = des_sec; //cloc[4] = min; //cloc[5] = des_min; m1: } void main(void) { #pragma optsize- CLKPR=0x80; CLKPR=0x00; #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif PORTA=0x00;DDRA=0x00; PORTB=0x00;DDRB=0xFF; //PORTD=0x40;DDRD=0x3F; PORTD=0x7F;DDRD=0x0F; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 125,000 kHz // Mode: Normal top=FFh // OC0A output: Disconnected // OC0B output: Disconnected TCCR0A=0x00; TCCR0B=0x03; TCNT0=0x00; OCR0A=0x04; OCR0B=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 125,000 kHz // Mode: CTC top=OCR1A // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: On // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x0A; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x04; OCR1AL=0xE2; OCR1BH=0x00; OCR1BL=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x42; ACSR=0x80; #asm("sei") while (1) { if ((PIND.6==0)&(stop==1)) { start=1; stop=0; tik= des_tik = sec = des_sec = min=0; } if ((PIND.6==0)&(stop==0)) { start=1; stop=0; } if (PIND.5==0) {start=0; stop=1;} }; }