티스토리 뷰

프로그래밍/C

마이크로프로세서 0510

대싕:) 2018. 5. 10. 16:20

 

int0에서 Low level 검출 시 count 값을 하나 증가

count 값을 2진수로 led 표현

count값 초기값은 0, 최대값을 255로 정의

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <io.h>
#include <mega128.h>
#include <delay.h>
 
unsigned char led = 0;
 
interrupt [2void add_num(){   // INT.0의 인터럽트 벡터는 2
    if(led == 255){
        led = 0;
        PORTB = ~led;
        delay_ms(300);
    }else {
        led = led +1;
        PORTB = ~led;
        delay_ms(300);
    }    
}
 
void main(){
    
    EIMSK = 0x01;
    EICRA = 0x00;
    SREG |= 0x80;
    DDRB = 0xff;
    DDRD = 0x00
 
    while(1){           
        
    }
}
        
cs

 

 

 

0~255까지 0.5초 주기로 2진수 led 표현

int1에서 falling edge 검출 시 0부터 다시 시작

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <io.h>
#include <mega128.h>
#include <delay.h>
 
unsigned char led = 0;
 
interrupt [3void add_num(){   // INT.1의 인터럽트 벡터는 3
    led = 0;
}
 
void main(){
    
    EIMSK = 0x02;
    EICRA = 0x08;
    SREG |= 0x80;
    DDRB = 0xff;
    DDRD = 0x00;
 
    while(1){
        PORTB = ~led;           
        if(led == 255){
            led = 0;
            delay_ms(100); 
        }
        else{
            led = led +1;
            delay_ms(100);
        }      
    }
}
cs

       

 

 

Byte type 변수 led 초기값 10으로 정의

int2에서 rising edge 검출 시 led 값 +1

int3에서 falling edge 검출 시 led 값 -1

led 변수값을 2진수로 LED 표현

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <io.h>
#include <mega128.h>
#include <delay.h>
 
unsigned char led = 10;
 
interrupt [4void int2_func(){   // INT.2의 인터럽트 벡터는 4
    if(led == 255){
        led = 0;
    }
    else{
        led++;
    }
    PORTB = ~led;
    delay_ms(100);
}
interrupt [5void int3_func(){   // INT.3의 인터럽트 벡터는 5
    if(led == 0){
        led = 255;
    }
    else{
        led--;
    }
    PORTB = ~led;
    delay_ms(100);
}
 
void main(){
    
    EIMSK = 0b00001100;
    EICRA = 0b10110000;
    SREG |= 0x80;
    DDRB = 0xff;
    DDRD = 0x00;
 
    while(1){
               
    }
}
cs



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함