BASIC4MCU | 질문게시판 | atmega128 LED 제어
페이지 정보
작성자 포드 작성일2021-06-11 06:29 조회3,319회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=15976
본문
#include <mega128.h>unsigned char led = 0xFF;bit run = 0, position = 0;unsigned char n = 1;void main(void){DDRC = 0xFF;PORTC = led;DDRD = 0b00000000;DDRE = 0b00000000;EIMSK = 0b00010001;EICRA = 0b00000010;EICRB = 0b00000010;TIMSK = 0b00010000;TCCR1A = 0b00000000;TCCR1B = 0b00001101;TCNT1 = 0;OCR1A = 3906;SREG = 0b10000000;while (1);}interrupt [EXT_INT0] void sw1(void){run = ~run;}interrupt [EXT_INT4] void sw2(void){run = 0;n = 1;position = 0;led = 0xFF;PORTC = led;}interrupt [TIM1_COMPA] void timer_comp0(void){if(run){position = ~position;led = ~((1 << n) | position);if( ) OCR1A = 3906;else OCR1A = 31248;PORTC = led;if(++n > 7) n = 1;if(led == 0x7F || led == 0x7E) run = 0;}else{if(led == 0x7F || led == 0x7E) led = 0xFF;PORTC = led;}}PORTC에 Bar LED를 연결하였고, PC0에 해당하는 자리는 0.25초로 깜빡이고 PC1부터 PC7까지 2초 주기로 쉬프트 되는 동작을 구현하려고 합니다. 보라색으로 형광칠한 부분을 활용해 다양한 조건을 넣어보며 테스트했지만 결과는 대부분 PC0번 자리는 2초 간격으로 깜빡이고 나머지 자리는 2초 간격으로 쉬프트되는 동작이어서 조언을 구하고자 합니다.LED 자리별로 따로 제어하고 동작시킬 수 있는 방법과 LED 자리에 따라 다른 설정시간을 부여하는 방법이 궁금합니다.
댓글 1
조회수 3,319master님의 댓글
master 작성일
#include <mega128.h>
//
bit run=0,cnt=0;
char n=1;
//
interrupt [EXT_INT0] void sw1(void){ run=~run; }
interrupt [EXT_INT4] void sw2(void){ run=0; n=1; PORTC=0xFF; }
//
interrupt [TIM1_COMPA] void timer_comp0(void){ // 250ms
if(run){
PORTC^=1; // 0.25sec마다 PC0 반전
if(++cnt>=8){ cnt=0; // 2sec
PORTC = (~(1<<n)) | (PORTC&1);
if(++n>7)n=1;
}
}
}
//
void main(void){
DDRC=0xFF; PORTC=led;
TCCR1B=0x0D; OCR1A=3906; TIMSK=0x10; // 250ms
EICRA=0xAA; EICRB=0xAA; EIMSK=0x11;
SREG=0b10000000;
while (1);
}