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=0; 30000 > uiCnt; ++uiCnt){ PORTA=0x08; } for(uiCnt=0; 30000 > uiCnt; ++uiCnt){ PORTA=0x00; } for(uiCnt=0; 30000 > uiCnt; ++uiCnt){ PORTA=0x40; } for(uiCnt=0; 30000 > 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=0; 30000 > uiCnt; ++uiCnt){ PORTA=0x08; } _delay_ms(500); for(uiCnt=0; 30000 > uiCnt; ++uiCnt){ PORTA=0x40; } _delay_ms(500); } return 0; } | cs |
4번 : util/delay.h 딜레이 관련함수가 들어있는 헤더 파일 불러옴
16번 : PORTA 값을 08, PORTA3번에 전류를 흘려서 LED On
18번 : _delay_ms 함수 불러다가 5초가량 지연시킴
19번 : PORTA 값을 40 ,PORTA6번에 전류를 흘려서 LED On
22번 : _delay_ms 함수 불러다가 5초가량 지연시킴
while문으로 동일하게 무한루프
처음 코드에서 PORTA전체값을 0으로 줘서 전류 차단한것과 달리
_delay_ms 함수로 특정PORTA에 전류 보내는것을 딜레이 시켜서 LED On을 유지하는게 가능함
'코스웨어 > 16년 스마트컨트롤러' 카테고리의 다른 글
20160311_송찬호_펌웨어 분석 (1) | 2016.03.11 |
---|---|
20160310_송찬호_펌웨어 분석 (2) | 2016.03.11 |
20160310_박진한_업무일지_데이터시트, 실습 (4) | 2016.03.11 |
20160309_업무일지_송찬호_cpu 모듈 (2) | 2016.03.11 |
2016.03.10_노태경_업무일지 (0) | 2016.03.11 |
20160310_김가연_업무일지_데이터시트, 실습 (4) | 2016.03.11 |
2016-03-09.강정수.AVR Studio활용 (6) | 2016.03.11 |
20160310 업무보고 이보원 CPU모듈 LED 2EA 교차점멸 실험 (2) | 2016.03.11 |