728x90
반응형
작업 :
LCD에 특정 시간 출력
개요 :
타이머 인터럽트를 통해 특정 시간 출력
lcd.h
지난번과 동일
lcd.c
지난번과 동일
tczero.h
1 2 3 4 5 6 7 8 9 10 11 | #ifndef __TCZERO_H__ #define __TCZERO__ #include "main.h" extern volatile unsigned int uiSec; void __vector_21 (void) ; void TCZero_Init(void); void TCZero_MSDelay(unsigned int uiDtime); #endif //__TCZERO_H_ | cs |
5번 : uiSec을 main.c에서도 사용가능하게 초기화
7~9번 : 각함수원형
tczero.c
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 | #include "tczero.h" volatile unsigned int uiMsec; void TCZero_Init(void) { TCCR0A = (0 << COM0A1)|(0 << COM0A0)|(0<< COM0B1) |(0 << COM0B0) |(0 << WGM01)|(0 << WGM00); // 현재는X 출력파형 X TCCR0B = (0 << FOC0A) |(0 << FOC0B)|(0 << WGM02) |(0 << CS02) |(1 << CS01)|(1 << CS00); //분주 비64 // CS02 ,CS01 ,CS00 0,1,1 //TCNT0 = 0x00; 회로가 자동증가 시킴 OCR0A = 250; //OCR0B = 0x00; TIMSK0 = (0 << OCIE0B)|(1 << OCIE0A)|(0 << TOIE0); // A만 사용 //TIFR0 = 0x00; return; } void __vector_21(void) //0.001 초 마다 호출 { ++uiMsec; } void TCZero_MSDelay(unsigned int uiDtime) { if( uiDtime > 1000) // 인자검사 { uiDtime = 1000; } uiMsec = 0; while(uiMsec < uiDtime); } | cs |
3번 : uiMsec 외부에서는 접근 못하게 static 선언
6번 : 타이머 초기화함수
주파수 | 분주비 | 클럭당 소요시간 | 기준시간 | 카운터 |
16000000 | 1 | 0.00000006250000000000 | 0.001 | 16000.000 |
| 8 | 0.00000050000000000000 | 0.001 | 2000.000 |
| 64 | 0.00000400000000000000 | 0.001 | 250.000 |
| 256 | 0.00001600000000000000 | 0.001 | 62.500 |
| 1024 | 0.00006400000000000000 | 0.001 | 15.625 |
분주비 64에 의해서 TCCR0B,OCR0A 설정
TIMSK 타이머/카운터 0~2 에서 발생하는 인터럽트를 개별적으로 허용하는 기능을 수행하는 레지스터 OCIE0A만 사용
15번 : vector21 함수 0.001초마다 호출
20번 : 딜레이 함수 1초가 지나면 uiTime을 1초로 설정 uiMsec은 0으로 초기화
uiDTime값이 uiMsec보다 크면 계속 동작
main.h
각각의 설정값들과 vector21 추가
main.c
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 | #include "main.h" #include "lcd.h" #include "tczero.h" int main(void) { volatile unsigned int uiSec; char caTime[] = "00:00:00"; LCD_Init(); TCZero_Init(); sei(); uiSec = 401; //% 60; while(1) { caTime[7]='0'+uiSec%60%10; caTime[6]='0'+uiSec%60/10; caTime[4]='0'+uiSec/60%60%10; caTime[3]='0'+uiSec/60%60/10; caTime[1]='0'+uiSec/60/60%10; caTime[0]='0'+uiSec/60/60/10; LCD_Inst(LCD_HOME); LCD_Str(caTime); } return 0; } | cs |
08번 : caTime 배열 초기화
09번 ~10번 : LCD와 타이머 초기화 함수
13번 : uiSec 임의의 시간 입력
16~21번 : 각각 시,분,초를 비트단위로 자르고 2자리숫자를 한자리로 맞춰서 배열에 넣음
23번 : lcd home 호출
24번 : 문자열을 lcd에 출력
728x90
'코스웨어 > 16년 스마트컨트롤러' 카테고리의 다른 글
2016-3-17.강정수.Lcd출력 (2) | 2016.03.23 |
---|---|
20160322_김가연_업무일지_USART Rx Tx 시리얼 통신 (0) | 2016.03.23 |
20160322-업무일지-이보원 (UART 통신) (0) | 2016.03.23 |
20160322_박진한_업무일지_펌웨어 실습(입력값 LCD에 출력) (0) | 2016.03.23 |
20160316_김도관_업무일지_LCD_문자열출력 (0) | 2016.03.23 |
디자인 사고(Design Thinking) (0) | 2016.03.22 |
20160322_장진웅_업무일지_펌웨어 실습(입력값 LCD에 출력) (0) | 2016.03.22 |
2016_03_22_노태경_업무일지_ (0) | 2016.03.22 |