Download presentation
Presentation is loading. Please wait.
1
8051타이머/카운터 순천향대학교 정보기술공학부 이상정
2
개 요 3개의 타이머 기능 타이머0과 타이머1은 4가지의 동작 모드, 타이머2는 3가지의 동작 모드
80C31 : 2개의 16비트 증가형 카운터/타이머(timer 0, timer 1)를 내장 80C32 : 16비트 카운터/타이머(timer 2)를 추가로 내장 기능 내부 시스템 클럭을 클럭 소스로 사용하는 타이머 기능 외부 단자로부터의 클럭 입력을 사용하는 사건 카운터(event counter)의 기능 타이머0과 타이머1은 4가지의 동작 모드, 타이머2는 3가지의 동작 모드 순천향대학교 정보기술공학부 이 상 정
3
개 요 타이머 기능 카운터 기능 타이머 레지스터의 값이 내부 클럭에 의해서 1머신 사이클에 한 번씩 증가
결과적으로 타이머의 클럭 소스는 발진기 주파수를 12분주(타이머2가 보레이트 발생기 모드는 예외) 카운터 기능 단자 T0∼T2에서 입력되는 외부 클럭 입력신호의 하강 에지에서 1씩 증가 카운터는 최소한 2개의 머신 사이클에 한번씩 인식 (최대 입력 클럭 주파수는 발진기 주파수의 1/24) 순천향대학교 정보기술공학부 이 상 정
4
머신 사이클 80C32에서 1개의 머신 사이클(machine cycle)
12 클럭 주기 S1∼S6의 6개 스테이트(state)로 구성 각 스테이트는 2개의 클럭 주기로 구성 각 스테이트를 구성하는 2개 클럭의 앞쪽에 있는 1주기를 위상1(phase 1), 뒤쪽 1주기를 위상2(phase 2) 결과적으로 12MHz의 클럭을 사용한다면 1 머신 사이클은 1[μs] 순천향대학교 정보기술공학부 이 상 정
5
명령 인출 및 실행 동작 타이밍 80C32는 기본적으로 각 머신 사이클동안 무조건 2회씩의 프로그램 명령 페치 동작을 수행
만약 명령이 1바이트로 구성되어 2번째의 페치가 필요없다면 CPU는 더미 리드(dummy read)를 수행 1사이클에 실행되는 명령 스테이트1에서 명령이 시작되어 읽혀진 명령이 명령 레지스터에 저장 2번째의 페치는 스테이트4에 시작되는데 1바이트 명령에서는 이것이 더미 리드이며, 스테이트6에서 이 명령의 실행이 모두 완료 순천향대학교 정보기술공학부 이 상 정
6
명령 인출 및 실행 동작 타이밍 1바이트 명령이면서 2개의 머신 사이클에 실행되는 명령 MOVX 명령
전체적으로 4회의 명령 코드 페치가 수행되며 이중에서 뒤의 3차례에 걸쳐서 읽은 코드는 모두 더미 리드 MOVX 명령 첫번째 ALE 신호에서 명령 코드를 읽은 후에 두번째 ALE 신호에서는 이 명령이 액세스할 데이터 메모리의 번지를 출력 2번째 머신 사이클에서 전반부에는 이 명령을 실행하는 데이터 메모리를 액세스 순천향대학교 정보기술공학부 이 상 정
7
명령 인출 및 실행 동작 타이밍 순천향대학교 정보기술공학부 이 상 정
8
제어 레지스터 순천향대학교 정보기술공학부 이 상 정
9
TMOD 레지스터 Timer/Counter Mode Control Register 타이머 0, 타이머 1 제어 3가지 기능
타이머 혹은 카운터로서의 사용 여부 결정 4가지 동작 모드 결정 타이머/카운터의 ON/OFF 제어 위치(내부, 외부) 결정 순천향대학교 정보기술공학부 이 상 정
10
TMOD 레지스터 순천향대학교 정보기술공학부 이 상 정
11
TMOD 레지스터 M1과 M0 비트는 타이머/카운터의 동작 모드를 설정 C/ T’ 비트는 타이머와 카운터의 기능을 선택
GATE 비트는 외부 인터럽트 단자에 의하여 타이머/카운터의 동작을 인에이블시킬 수 있도록 제어 순천향대학교 정보기술공학부 이 상 정
12
TCON 레지스터 순천향대학교 정보기술공학부 이 상 정
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으로 바뀌는 것을 말한다. 순천향대학교 정보기술공학부 이 상 정
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를 곱해준다. 순천향대학교 정보기술공학부 이 상 정
15
모드 0 동작 순천향대학교 정보기술공학부 이 상 정
16
모드 0 동작 모드 0에서는 타이머/카운터 13 비트 중에서 TL의 5비트는 32분주(32배)된 신호를 만들어내는 프리스케일러(prescaler) 역할 TH의 8 비트만이 타이머/카운터로 동작 TL은 TH의 값을 32배해주는 역할 즉, TL의 값이 증가되어 32가 될 때 TH가 1 증가 TH의 8비트 카운터에서 오버플로우가 발생(FFH→ 00H)하면 TCON 레지스터의 TF 비트가 세트되고 해당 인터럽트가 발생 순천향대학교 정보기술공학부 이 상 정
17
모드 0 동작 예 타이머 0에 5000 usec 간격으로 인터럽트 발생하고자 할때 TH를 다음과 같이 세트
MOV TH0, #( )/32 12MHz 클럭 주파수 사용 가정하면 1개 계수 당 1 usec 소요 5000을 세기 위해 =3192부터 8192까지 계수 TL에 의해 32배 되므로 TH의 값은 (계수할 총 펄스 수/32)로 주어진다. 순천향대학교 정보기술공학부 이 상 정
18
모드 0 동작 예 타이머 0에 5000 usec 간격으로 인터럽트 발생 코드 예 MOV TMOD, #00H ; M1 M0 = 00, C/T’ = GATE = 0 MOV TH0, #( )/32 MOV IE, # ; EA=1, ET0=1 SETB PT ; IP.1 = 1 레벨 1 우선순위 MOV 0B7H, # ; IPH.1 = 0 SETB TR0 ; TCON.4 계수 시작 순천향대학교 정보기술공학부 이 상 정
19
모드 0 동작 예 타이머 0에 20 usec 간격으로 인터럽트 발생 예
MOV TH0, #0FFH MOV TL0, #(32-20) 20번 카운트되어야 하므로 32보다 작다. TL만 20번 카운트 한 후 인터럽트 발생 필요 TH는 0FFH로 초기화 하여 TL이 20번 카운트하여 32에 도달되면 1 증가하여 바로 TH가 0이 되어 인터럽트 발생 순천향대학교 정보기술공학부 이 상 정
20
1. 타이머 프로그램 예 1 타이머 0을 이용하여 50KHz 속도로 우선순위 3의 인터럽트를 발생시키고 발생된 횟수를 병렬포트 p0에 표시하고 메모리 30H에 저장하는 프로그램 T = 1/f = 1/(50 * 103) = sec = 20usec 12MHz 클럭 주파수 사용 가정하면 1개 계수 당 1 usec 소요되므로 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, # B ; EA=1, ET0=1 SETB PT ; MOV IP,# B level 3 priority MOV 0B7H, # ; IPH.1 = 1 SETB TR ; MOV TCON,# B TCON.4, start count 순천향대학교 정보기술공학부 이 상 정
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 순천향대학교 정보기술공학부 이 상 정
23
순천향대학교 정보기술공학부 이 상 정
24
순천향대학교 정보기술공학부 이 상 정
25
레지스터 윈도우 내의 state, sec 시뮬레이션 시 시간의 변화를 표시 무한루프의 명령 SJMP LOOP은 2 사이클 명령
명령 실행 시 시간 변화 표시 12MHz 프로세서에서는 1 머신 사이클(12개의 클럭)이 1usec 1 사이클 명령 실행 하면 1 usec 씩 증가 대부분 명령은 2 사이클 명령 p.140 명령 표 참조 무한루프의 명령 SJMP LOOP은 2 사이클 명령 따라서 10번 수행해야 20 usec 인터럽트 서비스 루틴 진입하자 마자 카운트는 시작 따라서 서비스 루틴 수행 중에도 카운트 됨 순천향대학교 정보기술공학부 이 상 정
26
순천향대학교 정보기술공학부 이 상 정
27
순천향대학교 정보기술공학부 이 상 정
28
순천향대학교 정보기술공학부 이 상 정
29
순천향대학교 정보기술공학부 이 상 정
30
순천향대학교 정보기술공학부 이 상 정
31
순천향대학교 정보기술공학부 이 상 정
32
순천향대학교 정보기술공학부 이 상 정
33
순천향대학교 정보기술공학부 이 상 정
34
순천향대학교 정보기술공학부 이 상 정
35
순천향대학교 정보기술공학부 이 상 정
36
순천향대학교 정보기술공학부 이 상 정
37
순천향대학교 정보기술공학부 이 상 정
38
순천향대학교 정보기술공학부 이 상 정
39
순천향대학교 정보기술공학부 이 상 정
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; } 순천향대학교 정보기술공학부 이 상 정
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) ; } 순천향대학교 정보기술공학부 이 상 정
43
순천향대학교 정보기술공학부 이 상 정
44
순천향대학교 정보기술공학부 이 상 정
45
순천향대학교 정보기술공학부 이 상 정
46
순천향대학교 정보기술공학부 이 상 정
47
순천향대학교 정보기술공학부 이 상 정
48
순천향대학교 정보기술공학부 이 상 정
49
모드 1 동작 모드 0 동작과 거의 동일 다만 16비트 타이머/카운터로 동작
최대로 계수할 수 있는 값 216 = = 64K 순천향대학교 정보기술공학부 이 상 정
50
모드 1 동작 순천향대학교 정보기술공학부 이 상 정
51
모드 1 동작 예 타이머/카운터 0를 모드 1 타이머를 사용하여 50000usec(20Hz) 간격으로 인터럽트를 발생
MOV TMOD, #01H ; M1M0=01, C/T’=0 GATE=0 MOV DPTR, # ; 초기값 MOV TH0, DPH MOV TL0, DPL MOV IE, # B ; EA=1, ET0=1 MOV IP, # B ; SETB PT0, 레벨 1 우선순위 MOV 0B7H, # ; IPH.1 = 0 MOV TCON, # B ; SETB TR0,TCON.4 계수 시작 순천향대학교 정보기술공학부 이 상 정
52
3. 타이머 프로그램 예 2 타이머/카운터 1를 모드 1 타이머를 사용하여 50000usec(20Hz) 간격으로 우선순위 2의 인터럽트를 발생시키고 발생된 횟수를 병렬포트 p0 p1에 표시하고 메모리 30H 31H에 저장하는 프로그램 12MHz 클럭인 경우 50000번 카운트 필요하므로 16비트 카운트 모드인 모드 1 사용 순천향대학교 정보기술공학부 이 상 정
53
3. 타이머 프로그램 예 2 CSEG AT 8000H ; initialize counter value, parallel port MOV 30H,#0 MOV 31H, #0 MOV P0,#0 MOV P1,#0 ; Initialize Timer, Interrupt SFRs MOV TMOD, #10H ; Timer 1, mode 1 MOV DPTR,# ; initial Timer 0 value MOV TH1,DPH ; (interrupt cycle = 20 Hz) MOV TL1,DPL MOV IE, #88H ; EA=1, ET1=1 MOV IP, #0 ; level 2 priority MOV 0B7H,#8 ; IPH.3 = 1 SETB TR1 ; MOV TCON, # B ; TCON.6, start count LOOP: SJMP LOOP ; infinite loop 순천향대학교 정보기술공학부 이 상 정
54
3. 타이머 프로그램 예 2 TF1_ISR: MOV DPTR,#0-50000 ; initial Timer 0 value
MOV TH1,DPH MOV TL1,DPL ; increment interrupt counter MOV DPH,30H MOV DPL,31H INC DPTR MOV 30H,DPH MOV 31H,DPL MOV P0,DPH MOV P1,DPL RETI CSEG AT 001BH ; TF1 interrupt vectoring JMP TF1_ISR END 순천향대학교 정보기술공학부 이 상 정
55
순천향대학교 정보기술공학부 이 상 정
56
순천향대학교 정보기술공학부 이 상 정
57
순천향대학교 정보기술공학부 이 상 정
58
4. 타이머 프로그램 예 2 - C 프로그램 #include <REG52.H>
sfr IPH = 0xB7; /* define IPH register */ unsigned int count _at_ 0x30; int temp = ; void timerint(void) interrupt 3 // 8*n+3 { /* initialize counter */ TL1 = temp & 0x00ff; TH1 = (temp & 0xff00) >> 8; /* increment memory, P0 */ ++count; P0 = (count & 0xff00) >> 8; P1 = count & 0x00ff; } 순천향대학교 정보기술공학부 이 상 정
59
4. 타이머 프로그램 예 2 - C 프로그램 main() {
/* initialize memory, parallel port */ P0 = P1 = 0; count = 0; /* Timer 1 mode 1 */ TMOD = 0x10; /* initialize counter */ TL1 = temp & 0x00ff; TH1 = (temp & 0xff00) >> 8; /* interrupt */ IE = 0x88; // EA=1, ET1=1 IP = 0; IPH = 8; // set interrupt priority 2 /* TCON.6, start count */ TR1 = 1; /* infinite loop */ while (1) ; } 순천향대학교 정보기술공학부 이 상 정
60
순천향대학교 정보기술공학부 이 상 정
61
순천향대학교 정보기술공학부 이 상 정
62
순천향대학교 정보기술공학부 이 상 정
63
모드 2 동작 8비트 자동 재로드(auto-reload)가 되는 동작 모드 TL을 8비트 카운터로 사용
오버플로우가 발생하면 TH에 저장된 값이 자동으로 TL에 적재 최대로 계수할 수 있는 값 28 = 256 순천향대학교 정보기술공학부 이 상 정
64
모드 2 동작 순천향대학교 정보기술공학부 이 상 정
65
모드 2 동작 예 타이머/카운터 0을 모드 2의 타이머로 사용하여 200 usec 마다 인터럽트 발생 코드 예 MOV TMOD, #02H ; M1 M0 = 10, C/T’ = GATE = 0 MOV TH0, #( ) MOV IE, # ; EA=1, ET0=1 SETB PT ; 레벨 1 우선순위,IP.1 =1 MOV 0B7H, # ; IPH.1 = 0 SETB TR ; TCON.4 계수 시작 순천향대학교 정보기술공학부 이 상 정
66
5. 타이머 프로그램 예 3 타이머 0을 사용하여 모드 2 동작으로 20 usec 마다 병렬 포트 P0가 반전하고 30H 번지 값이 증가하는 C 프로그램 인터럽트를 사용하지 않고 소프트웨적으로 처리 12MHz 클럭 사용 시 20번 카운트된 후 발생하는 오버플로우(TF0) 감지하여 P0 반전하고 30H 번지 증가 TF0 플래그는 오버플로우 발생 후 초기화 시켜주어야 한다. 순천향대학교 정보기술공학부 이 상 정
67
5. 타이머 프로그램 예 3 #include <REG52.H> unsigned int count _at_ 0x30;
main() { /* initialize memory, parallel port */ P0 = count = 0; TMOD = 2; /* mode 2*/ TL0 = TH0 = -20; /* counter initial value */ TF0 = 0; /* clear counter 0 overflow bit */ TR0 = 1; /* start count */ while (1) { while (!TF0) ; /* repeat until overflow */ P0 ^= 0xff; ++count; } 순천향대학교 정보기술공학부 이 상 정
68
순천향대학교 정보기술공학부 이 상 정
69
순천향대학교 정보기술공학부 이 상 정
70
순천향대학교 정보기술공학부 이 상 정
71
순천향대학교 정보기술공학부 이 상 정
72
순천향대학교 정보기술공학부 이 상 정
73
순천향대학교 정보기술공학부 이 상 정
74
순천향대학교 정보기술공학부 이 상 정
75
순천향대학교 정보기술공학부 이 상 정
76
순천향대학교 정보기술공학부 이 상 정
77
순천향대학교 정보기술공학부 이 상 정
78
모드 3 동작 모드 3 동작은 타이머 0에서만 사용 타이머 0에서 모드 3으로 설정하면 TL0과 TH0은 2개의 독립적인 8비트 카운터로 동작 하위 8비트 카운터 TL0에 관련된 기능 타이머 0의 제어 비트들(TR0, TF0 비트나 T0,INT0’ 신호)을 사용 TL0의 입력으로는 내부 클럭이나 외부 신호 T0를 모두 사용 상위 8비트 카운터 TH0에 관련되는 기능 타이머 1의 제어 비트들(TR1, TF1)을 사용 TH0의 입력으로는 내부 클럭만을 사용 오버플로우(TF1=1)시 타이머 1의 인터럽트를 발생 순천향대학교 정보기술공학부 이 상 정
79
모드 3 동작 순천향대학교 정보기술공학부 이 상 정
80
타이머2 80C32에는 타이머 0과 타이머 1에 추가하여 16비트인 타이머 2를 하나 더 가지고 있다.
타이머 2는 항상 16비트로 동작하고 업/다운 카운터로 동작할 수도 있다. 레지스터 T2CON, T2MOD 제어 레지스터 TL2,TH2, RCAP2L, RCAP2H 레지스터 타이머 2에는 모두 5가지의 동작 모드 순천향대학교 정보기술공학부 이 상 정
81
타이머2 순천향대학교 정보기술공학부 이 상 정
82
타이머2 16비트 자동 재로드 모드 16비트 캡쳐 모드(capture mode)
특정한 조건에서 16비트 카운터에 RCAP2H 및 RCAP2L 레지스터의 값을 로드하는 모드 16비트 캡쳐 모드(capture mode) 외부의 T2EX 신호에 의하여 현재의 타이머 레지스터 값을 캡쳐하는 모드 16비트 보레이트 발생기 모드(baud rate generator mode) T2CON 레지스터에서 TCLK이나 RCLK 비트를 최소한 1개만 세트시켜도 설정 16비트 프로그래머블 클럭 출력 모드(programmable clock-out mode) 보레이트 발생기 모드에서 발생되어 직렬 포트에 제공되는 주파수 신호를 외부 단자로 출력할 수 있는 기능 순천향대학교 정보기술공학부 이 상 정
83
프로그램 과제 프로그램 1-5를 실행하라. 프로그램 5의 C 프로그램을 어셈블리 버전으로 변경하여 작성하여라
프로그램 5를 변경하여 우선순위 3의 인터럽트로 처리하는 프로그램을 작성하라. 순천향대학교 정보기술공학부 이 상 정
Similar presentations