1 / 83

8051 타이머 / 카운터

8051 타이머 / 카운터. 순천향대학교 정보기술공학부 이상정. 개 요. 3 개의 타이머 80C31 : 2 개의 16 비트 증가형 카운터 / 타이머 (timer 0, timer 1) 를 내장 80C32 : 16 비트 카운터 / 타이머 (timer 2) 를 추가로 내장 기능 내부 시스템 클럭을 클럭 소스로 사용하는 타이머 기능 외부 단자로부터의 클럭 입력을 사용하는 사건 카운터 (event counter) 의 기능

Download Presentation

8051 타이머 / 카운터

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 8051타이머/카운터 순천향대학교 정보기술공학부 이상정

  2. 개 요 • 3개의 타이머 • 80C31 : 2개의 16비트 증가형 카운터/타이머(timer 0, timer 1)를 내장 • 80C32 : 16비트 카운터/타이머(timer 2)를 추가로 내장 • 기능 • 내부 시스템 클럭을 클럭 소스로 사용하는 타이머 기능 • 외부 단자로부터의 클럭 입력을 사용하는 사건 카운터(event counter)의 기능 • 타이머0과 타이머1은 4가지의 동작 모드, 타이머2는 3가지의 동작 모드 순천향대학교 정보기술공학부 이 상 정 2

  3. 개 요 • 타이머 기능 • 타이머 레지스터의 값이 내부 클럭에 의해서 1머신 사이클에 한 번씩 증가 • 결과적으로 타이머의 클럭 소스는 발진기 주파수를 12분주(타이머2가 보레이트 발생기 모드는 예외) • 카운터 기능 • 단자 T0∼T2에서 입력되는 외부 클럭 입력신호의 하강 에지에서 1씩 증가 • 카운터는 최소한 2개의 머신 사이클에 한번씩 인식(최대 입력 클럭 주파수는 발진기 주파수의 1/24) 순천향대학교 정보기술공학부 이 상 정 3

  4. 머신 사이클 • 80C32에서 1개의 머신 사이클(machine cycle) • 12 클럭 주기 • S1∼S6의 6개 스테이트(state)로 구성 • 각 스테이트는 2개의 클럭 주기로 구성 • 각 스테이트를 구성하는 2개 클럭의 앞쪽에 있는 1주기를 위상1(phase 1), 뒤쪽 1주기를 위상2(phase 2) • 결과적으로 12MHz의 클럭을 사용한다면 1 머신 사이클은 1[μs] 순천향대학교 정보기술공학부 이 상 정 4

  5. 명령 인출 및 실행 동작 타이밍 • 80C32는 기본적으로 각 머신 사이클동안 무조건 2회씩의 프로그램 명령 페치 동작을 수행 • 만약 명령이 1바이트로 구성되어 2번째의 페치가 필요없다면 CPU는 더미 리드(dummy read)를 수행 • 1사이클에 실행되는 명령 • 스테이트1에서 명령이 시작되어 읽혀진 명령이 명령 레지스터에 저장 • 2번째의 페치는 스테이트4에 시작되는데 1바이트 명령에서는 이것이 더미 리드이며, 스테이트6에서 이 명령의 실행이 모두 완료 순천향대학교 정보기술공학부 이 상 정 5

  6. 명령 인출 및 실행 동작 타이밍 • 1바이트 명령이면서 2개의 머신 사이클에 실행되는 명령 • 전체적으로 4회의 명령 코드 페치가 수행되며 이중에서 뒤의 3차례에 걸쳐서 읽은 코드는 모두 더미 리드 • MOVX 명령 • 첫번째 ALE 신호에서 명령 코드를 읽은 후에 두번째 ALE 신호에서는 이 명령이 액세스할 데이터 메모리의 번지를 출력 • 2번째 머신 사이클에서 전반부에는 이 명령을 실행하는 데이터 메모리를 액세스 순천향대학교 정보기술공학부 이 상 정 6

  7. 명령 인출 및 실행 동작 타이밍 순천향대학교 정보기술공학부 이 상 정 7

  8. 제어 레지스터 순천향대학교 정보기술공학부 이 상 정 8

  9. TMOD 레지스터 • Timer/Counter Mode Control Register • 타이머 0, 타이머 1 제어 • 3가지 기능 • 타이머 혹은 카운터로서의 사용 여부 결정 • 4가지 동작 모드 결정 • 타이머/카운터의 ON/OFF 제어 위치(내부, 외부) 결정 순천향대학교 정보기술공학부 이 상 정 9

  10. TMOD 레지스터 순천향대학교 정보기술공학부 이 상 정 10

  11. TMOD 레지스터 • M1과 M0 비트는 타이머/카운터의 동작 모드를 설정 • C/ T’비트는 타이머와 카운터의 기능을 선택 • C/ T’ = 0이면 타이머 • C/ T’ = 1 이면 카운터 • GATE 비트는 외부 인터럽트 단자에 의하여 타이머/카운터의 동작을 인에이블시킬 수 있도록 제어 순천향대학교 정보기술공학부 이 상 정 11

  12. TCON 레지스터 순천향대학교 정보기술공학부 이 상 정 12

  13. TCON 레지스터 • TR0와 TR1 비트는 각각 타이머/카운터 0과 1의 동작을 ON/OFF하는 제어 비트 • TMOD 레지스터에서 GATE=0로 설정되어 있으면 TR 단독으로 ON/OFF • GATE=1이면 각각 INT0’및 INT1’신호와 함께 ON/OFF • TF0와 TF1 비트는 각각 타이머/카운터 0과 1이 오버플로우되면 1로 세트 • CPU가 해당 타이머의 인터럽트를 받아 인터럽트 서비스 루틴을 실행하기 시작하면 다시 0으로 클리어 • 타이머 오버플로우는 카운터의 최대값(8비트에서는 FFH, 16비트에서는 FFFFH)에서 1개의 펄스가 입력되어 카운터가 0으로 바뀌는 것을 말한다. 순천향대학교 정보기술공학부 이 상 정 13

  14. 모드 0 동작 • 13비트 타이머/카운터로 동작 • 최대로 계수할 수 있는 값213 = 8192 = 8K • 외부 클럭 주파수가 12MHz 인 경우 계수하는데 걸리는 최대(tmax) 및 최소(tmin) 시간 • tmax = 12 / (12 * 106) * 8192 = 8192 usec • tmin = 12 / (12 * 106) * 1 = 1 usec=> 즉 계수되는 펄스 당 1 usec 의 시간이 소요 1 머신 사이클 (12개 클럭)마다 타이머 클럭이 공급되므로 12를 곱해준다. 순천향대학교 정보기술공학부 이 상 정 14

  15. 모드 0 동작 순천향대학교 정보기술공학부 이 상 정 15

  16. 모드 0 동작 • 모드 0에서는 타이머/카운터 13 비트 중에서 TL의 5비트는 32분주(32배)된 신호를 만들어내는 프리스케일러(prescaler) 역할 • TH의 8 비트만이 타이머/카운터로 동작 • TL은 TH의 값을 32배해주는 역할 • 즉, TL의 값이 증가되어 32가 될 때 TH가 1 증가 • TH의 8비트 카운터에서 오버플로우가 발생(FFH→ 00H)하면 TCON 레지스터의 TF 비트가 세트되고 해당 인터럽트가 발생 순천향대학교 정보기술공학부 이 상 정 16

  17. 모드 0 동작 예 • 타이머 0에 5000 usec 간격으로 인터럽트 발생하고자 할때 TH를 다음과 같이 세트 • MOV TH0, #(8192-5000)/32 • 12MHz 클럭 주파수 사용 가정하면 1개 계수 당 1 usec 소요 • 5000을 세기 위해 8192-5000=3192부터 8192까지 계수 • TL에 의해 32배 되므로 TH의 값은 (계수할 총 펄스 수/32)로 주어진다. 순천향대학교 정보기술공학부 이 상 정 17

  18. 모드 0 동작 예 • 타이머 0에 5000 usec 간격으로 인터럽트 발생 코드 예MOV TMOD, #00H ; M1 M0 = 00, C/T’ = 0 GATE = 0MOV TH0, #(8192-5000)/32MOV IE, #10000010 ; EA=1, ET0=1SETB PT0 ; IP.1 = 1 레벨 1 우선순위MOV 0B7H, #0 ; IPH.1 = 0 SETB TR0 ; TCON.4 계수 시작 순천향대학교 정보기술공학부 이 상 정 18

  19. 모드 0 동작 예 • 타이머 0에 20 usec 간격으로 인터럽트 발생 예 • MOV TH0, #0FFH MOV TL0, #(32-20) • 20번 카운트되어야 하므로 32보다 작다. • TL만 20번 카운트 한 후 인터럽트 발생 필요 • TH는 0FFH로 초기화 하여 TL이 20번 카운트하여 32에 도달되면 1 증가하여 바로 TH가 0이 되어 인터럽트 발생 순천향대학교 정보기술공학부 이 상 정 19

  20. 1. 타이머 프로그램 예 1 • 타이머 0을 이용하여 50KHz 속도로 우선순위 3의 인터럽트를 발생시키고 발생된 횟수를 병렬포트 p0에 표시하고 메모리 30H에 저장하는 프로그램 • T = 1/f = 1/(50 * 103) = 0.00002 sec = 20usec • 12MHz 클럭 주파수 사용 가정하면 1개 계수 당 1 usec 소요되므로 20번 카운트해야 함 순천향대학교 정보기술공학부 이 상 정 20

  21. 1. 타이머 프로그램 예 1 CSEG AT 8000H ; initialize counter value, parallel port MOV 30H,#0 MOV P0,30H ; Initialize Timer, Interrupt SFRs MOV TMOD, #00H ; M1M0=00, C/T’=0 GATE=0 MOV TH0, #0FFH ; count initial value TH0 MOV TL0, #(32-20) ; count initial value TH0 MOV IE, #10000010B ; EA=1, ET0=1 SETB PT0 ; MOV IP,#00000010B level 3 priority MOV 0B7H, #2 ; IPH.1 = 1 SETB TR0 ; MOV TCON,#00010000B TCON.4, start count 순천향대학교 정보기술공학부 이 상 정 21

  22. 1. 타이머 프로그램 예 1 LOOP: SJMP LOOP ; infinite loop ; interrupt service routine TF0_ISR: MOV TH0, #0FFH ; count initial value TH0 MOV TL0, #(32-20) ; count initial value TH0 INC 30H MOV P0, 30H RETI CSEG AT 000BH ; TF0 interrupt vectoring JMP TF0_ISR END 순천향대학교 정보기술공학부 이 상 정 22

  23. 순천향대학교 정보기술공학부 이 상 정 23

  24. 순천향대학교 정보기술공학부 이 상 정 24

  25. 레지스터 윈도우 내의 state, sec • 시뮬레이션 시 시간의 변화를 표시 • 명령 실행 시 시간 변화 표시 • 12MHz 프로세서에서는 1 머신 사이클(12개의 클럭)이 1usec • 1 사이클 명령 실행 하면 1 usec 씩 증가 • 대부분 명령은 2 사이클 명령 • p.140 명령 표 참조 • 무한루프의 명령 SJMP LOOP은 2 사이클 명령 • 따라서 10번 수행해야 20 usec • 인터럽트 서비스 루틴 진입하자 마자 카운트는 시작 • 따라서 서비스 루틴 수행 중에도 카운트 됨 순천향대학교 정보기술공학부 이 상 정 25

  26. 순천향대학교 정보기술공학부 이 상 정 26

  27. 순천향대학교 정보기술공학부 이 상 정 27

  28. 순천향대학교 정보기술공학부 이 상 정 28

  29. 순천향대학교 정보기술공학부 이 상 정 29

  30. 순천향대학교 정보기술공학부 이 상 정 30

  31. 순천향대학교 정보기술공학부 이 상 정 31

  32. 순천향대학교 정보기술공학부 이 상 정 32

  33. 순천향대학교 정보기술공학부 이 상 정 33

  34. 순천향대학교 정보기술공학부 이 상 정 34

  35. 순천향대학교 정보기술공학부 이 상 정 35

  36. 순천향대학교 정보기술공학부 이 상 정 36

  37. 순천향대학교 정보기술공학부 이 상 정 37

  38. 순천향대학교 정보기술공학부 이 상 정 38

  39. 순천향대학교 정보기술공학부 이 상 정 39

  40. 순천향대학교 정보기술공학부 이 상 정 40

  41. 2. 타이머 프로그램 예 1 – C 프로그램 #include <REG52.H> sfr IPH = 0xB7; /* define IPH register */ unsigned char count _at_ 0x30; void timerint(void) interrupt 1 // 8*n+3 { /* initialize counter */ TH0 = 0xff; TL0 = 32-20; /* increment memory, P0 */ ++count; P0 = count; } 순천향대학교 정보기술공학부 이 상 정 41

  42. 2. 타이머 프로그램 예 1 – C 프로그램 main() { /* initialize memory, parallel port */ P0 = count = 0; /* Timer 0 mode 0 */ TMOD = 0; /* initialize counter */ TH0 = 0xff; TL0 = 32-20; /* interrupt */ IE = 0x82; // EA=1, ET0=1 IP = IPH = 2; // set highest interrupt priority 3 /* TCON.4, start count */ TR0 = 1; while (1) ; } 순천향대학교 정보기술공학부 이 상 정 42

  43. 순천향대학교 정보기술공학부 이 상 정 43

  44. 순천향대학교 정보기술공학부 이 상 정 44

  45. 순천향대학교 정보기술공학부 이 상 정 45

  46. 순천향대학교 정보기술공학부 이 상 정 46

  47. 순천향대학교 정보기술공학부 이 상 정 47

  48. 순천향대학교 정보기술공학부 이 상 정 48

  49. 모드 1 동작 • 모드 0 동작과 거의 동일 • 다만 16비트 타이머/카운터로 동작 • 최대로 계수할 수 있는 값216 = 65536 = 64K 순천향대학교 정보기술공학부 이 상 정 49

  50. 모드 1 동작 순천향대학교 정보기술공학부 이 상 정 50

More Related