본문 바로가기

분류 전체보기

스테핑모터 -1상 여자방식 #include #include int i ; unsigned char motor_phase[4] = { 0x08, 0x04, 0x02, 0x01 } ; // 2상 여자 방식 void main ( void ) { DDRC=0xff; for ( i = 0 ; i 더보기
스테핑모터 - 시뮬 #include unsigned int cnt0; unsigned char step=0x88, onoff=1; interrupt [EXT_INT0] void exint0(void) { if(onoff == 0) onoff = 1; else onoff = 0; } interrupt [TIM0_OVF] void timerint0(void) { if(onoff == 0) if( ++cnt0 == 2 ) { cnt0 = 0; step >>= 1; if(step == 0x08) step=0x88; } PORTC = step; TCNT0 = 6; // 재정의 1msec = 64*(256-6)/16 시뮬레이션할 때는 조절할 필요가 있음 } void main(void) { DDRC = 0xff; // 포트C를 출력으로.. 더보기
LCD 구구단 시뮬레이션 #include #include #include #asm .equ __lcd_port=0x15 ;포트A #endasm #include void main(void){ char buf[20]; int a,b; lcd_init(16); // lcd초기화 lcd_gotoxy(0, 0); lcd_putsf("Park-Jae-Hyun"); // 첫째줄 표시 while(1){ for(a=2;a 더보기
LCD #include #include #asm .equ __lcd_port=0x15 ;포트C #endasm #include void main(void){ DDRC=0xff; // lcd 포트 출력으로 지정 lcd_init(16); // lcd초기화 while(1){ lcd_gotoxy(0, 0); lcd_putsf("BONGPJH"); // 첫째줄 표시 lcd_gotoxy(0, 1); lcd_putsf("Park-Jae-Hyun"); // 둘째줄 표시 delay_ms(1000); // 1초 딜레이 }; } 더보기
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 더보기
인터럽트 LED 카운터 #include #include unsigned char led; interrupt [2] void exint0(void) { PORTC = ~(++led); delay_ms(5); } void main(void) { DDRC = 0xff; DDRD = 0x00; SREG.7 = 1; EIMSK = 0b00000001; EICRA = 3; PORTC = ~led; for(;;); } 더보기
스위치 2개로 LED 제어(인터럽트) #include #include unsigned char led = 0xfe; interrupt [2] void exint0(void) { if(led!=0x7f) led = (led > 1 ) | 0x80; else led = 0x7f; PORTC = led; delay_ms(40); } void main(void) { DDRC = 0xff; PORTC = led; DDRD = 0x00; SREG.7 = 1; EIMSK |= 0b00000011; EICRA = 3; while(1); } 더보기