728x90
728x90
시간을 설정할려면 얼마의 주파수가 얼마의 값으로 들어 오는지를 확인 해야 한다.
일반적으로 8051의 기본적으로 돌아다니는 주파수들은 11.059Mhz가 된다. 위의 블럭 다이어그램은 82G516의 블럭 입니다. 그러나 대부분이 이런 형태로 유지가 되고 있으니 자신이 사용하는 블럭을 한번 확인 하시면 됩니다.
여기서 우리는 대부분 외부의 크리스털 오실레이터를 이용 합니다. 이 값이 위의 11.059Mhz값이 되는것이지요. 여기서 우리가 이값을 사용할려면 중간의 1과 0 중에서 1을 선택을 해야 겠지요 ..
이와 같이 주파수를 확인 하면 위의 Fosc는 외부 클럭임을 알수 있습니다. 여기서 우리는 12분주를 이용하겠습니다. 그러면 레지스터를 셋팅해 주어야 겠지요.
타이머는 클럭이 하나 움직일때 마다 1씩 증가 하게 됩니다.
클럭 하나가 움직일때 마다 카운터는 하나 증가
여기서 우리가 16비트 타이머를 이용한다면 2에 16승을 하게 되면 65536의 카운터가 발생 하여야만 TF1 (플러그)가 하나 발생하게 되는거죠..
그래서 우리는 이 플래그를 빨리 발생 하게 하느냐 느리게 발생 하느냐가 관건이겠지요 ?
아래 그림을 보면 삼각형의 꼭대기에 다다르면 TF1의 플래그가 발생하게 됩니다. 그러면 타이머 인터럽트가 발생하여 프로그램에서 인터럽트 함수로 들어가겠지요.
11.0592Mhz로 설정이 되어 1초당 921,600(11.0592Mhz / 12)연산이 가능합니다.
반대로 921,600 카운트가 진행되면 1초라는 의미로 볼수 있지요
16비트 카운터로는 65536은 0.07초 70ms가 측정 가능한 최고 시간 이라고 볼수 있습니다.
예를 들어서 1ms를 구하고자 한다면 1s = 1000ms
921,600 / 1000 = 921.6이 됩니다. 0.6은 반 올림하거나 내림을 해야겠지요..
65536 - 922 = 64614 가 되겠지요 이 값을 TL1과 TH1에 입력을 합니다.
T0count = 64614;
TH0=(U8) (T0count >>8);
TL0=(U8) (T0count&0x00FF);
1ms를 구했다면 그 이상도 구할수 있겠지요~! 64614가 시작되는 위치 입니다.
한마디로 100m달리기는 하는데 어떤 놈은 0에서 출발 하는 놈이 있고 어떤 녀석은 90m에서 출발 하는 녀석이 있는 것입니다.
90m에서 달리는 놈은 겁나 빨리 들어가겠지요 이 90m가 1ms가 되는것이고
10ms가 되는놈은 한 9m에서 출발 하는녀석이 되겟지요.. 빨리 도작 하는 놈이 깃발을 연신 흔들어 대는것입니다. 이 깃발이 플래그를 말하는것이고요 ㅎㅎ 깃발 흔든 놈은 다시 시작위치고 고고~!
728x90
'WORK > Sotfware' 카테고리의 다른 글
avr-objcopy: No such file (0) | 2012.07.18 |
---|---|
리눅스 기본 명령어 모음 (0) | 2012.07.13 |
함수 포인터 (0) | 2012.06.20 |
포인터 개념 (0) | 2012.06.20 |
sort (0) | 2012.06.18 |
댓글