본문 바로가기
코스웨어/16년 스마트컨트롤러

20160310_김도관_업무일지_Artmega_LED교차점등

by 알 수 없는 사용자 2016. 3. 11.
728x90
반응형

PORTA 구조





      

2진수값에 각각 포트번호 별로 1의 값이 들어갈때 아래와 같이 16진수의 값을 가지게 됨


 PA0

 0000 0001 = 0x01

 PA1

 0000 0010 = 0x02

 PA2

 0000 0100 = 0x04

 PA3

 0000 1000 = 0x08

 PA4

 0001 0000 = 0x10

 PA5

 0010 0000 = 0x20

 PA6

 0100 0000 = 0x40

 PA7

 1000 0000 = 0x80



1. PORTA 3번6번 LED 교차 ON OFF


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
#define DDRA     (*((volatile unsigned char *)0x21))
#define PORTA     (*((volatile unsigned char *)0x22))
#define PINA     (*((volatile unsigned char *)0x20))
 
int main(void//atmega pdf 403페이지참고
{
    DDRA = 0xFF// 출력상태 low(00),high(FF) 설정
    PORTA = 0x00// 포트번호 설정 //00 전체off //ff 전부on
    
    volatile unsigned int uiCnt;
    
    //while(1); //기본적으로 입력해야 동작확인가능
    while(1)
    {    
        for(uiCnt=030000 > uiCnt; ++uiCnt){
            PORTA=0x08
        }
        for(uiCnt=030000 > uiCnt; ++uiCnt){
            PORTA=0x00;     
        }
        for(uiCnt=030000 > uiCnt; ++uiCnt){
            PORTA=0x40
        }
        for(uiCnt=030000 > uiCnt; ++uiCnt){
            PORTA=0x00;     
        }
    }
    return 0;
}
cs


atmega 데이터시트 pdf 파일 403페이지 참고

8번   : PORTA 값을 00으로 초기화 시켜서 모든 전류를 차단

16번  : PORTA 값을 08, PORTA3번에 전류를 흘려서 LED On

19번  : PORTA 값을 00으로 다시 초기화 시켜서 PORTA의 모든 전류를 차단

22번 : PORTA 값을 40 ,PORTA6번에 전류를 흘려서 LED On

25번  : PORTA 값을 00으로 다시 초기화 시켜서 PORTA의 모든 전류를 차단

while문으로 15번부터 25번째 줄까지 무한루프


2번째 코드(다른방법)

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
#define DDRA     (*((volatile unsigned char *)0x21))
#define PORTA     (*((volatile unsigned char *)0x22))
#define PINA     (*((volatile unsigned char *)0x20))
#include <util/delay.h> //딜레이 함수
int main(void//403페이지참고
{
    DDRA = 0xFF// 출력상태 low(00),high(FF) 설정
    PORTA = 0x00// 포트번호 설정 //00 전체off //ff 전부on
    
    volatile unsigned int uiCnt;
    
    //while(1); //기본적으로 입력해야 동작확인가능
    while(1)
    {    
        for(uiCnt=030000 > uiCnt; ++uiCnt){
            PORTA=0x08
        }
        _delay_ms(500);
        for(uiCnt=030000 > uiCnt; ++uiCnt){
            PORTA=0x40
        }
        _delay_ms(500);    
    }
    return 0;
}
cs


4번   : util/delay.h 딜레이 관련함수가 들어있는 헤더 파일 불러옴

16번 PORTA 값을 08PORTA3번에 전류를 흘려서 LED On

18번  : _delay_ms 함수 불러다가 5초가량 지연시킴

19번  : PORTA 값을 40 ,PORTA6번에 전류를 흘려서 LED On

22번  : _delay_ms 함수 불러다가 5초가량 지연시킴

while문으로 동일하게 무한루프


처음 코드에서 PORTA전체값을 0으로 줘서 전류 차단한것과 달리 

_delay_ms 함수로 특정PORTA에 전류 보내는것을 딜레이 시켜서 LED On을 유지하는게 가능함







728x90