프로테우스/타이머 / 카운터 썸네일형 리스트형 PWM을 이용한 LED 밝기제어 #include unsigned int step=5; interrupt [2] void exint0(void) { if( OCR0 step ) OCR0 -=step; } void main(void) { DDRB.4 = 1; // PORTB bit 4를 출력으로 SREG |= 0x80; //인터럽트 전체 허용 EIMSK |= 0b00000011; // INT0, 1 개별 허용 EICRA |= 0x0f; // INT0, 1 상승에지 트리거 TCCR0 |= 6; // 분주비를 256로 설정 TCCR0 |= 0b01001000; // 타이머0 FAST PWM 모드로 설정 TC.. 더보기 500msec 간격이로 LED 이동 #include unsigned char led = 0xfe; unsigned int cnt; interrupt [TIM2_COMP] void timerint(void) { if(cnt++ >= 49999)// 50000*10 = 500 msec { cnt = 0; if(led!=0x7f) led = (led 더보기 타이머 LED 점멸 2번째 #include unsigned char led = 0xfe; void delay_i_ms(unsigned int i) { do { while(!(TIFR & 0x04)); // TOV1 가 세트되었는지 확인 TIFR |= 0x04; /* 인터럽트 발생없이 타이머 사용했으므로 자동적으로 클리어되지 않으므로 강제로 클리어 */ TCNT1H = (65536-16000)/256; TCNT1L = (65536-16000) % 256; /* 재정의 , 1msec 초를 얻기 위한 시간정수*/ i--; } while(i); } void main(void) { DDRC = 0xff; // 포트C를 출력으로 TCCR1B |= 1; // 분주비를 1로 설정 TCNT1H = (65536-16000)/256; TCNT1L =.. 더보기 타이머를 이용한 LED #include unsigned char led = 0xfe; unsigned int cnt; interrupt [17] void timerint0(void) { if(cnt++ >= 9999){ // 10000*1 = 10000 usec cnt = 0; if(led!=0x7f) led = (led 더보기 이전 1 다음