250 likes | 748 Views
타이머. 8051 타이머 타이머 설정 및 모드. dolicom@naver.com http://blog.naver.com/dolicom. 카운터의 원리와 디지털회로. 2 진 카운터 (Binary Counter) 디지털 회로에 의해 이루어 진다 . 정해진 초기 값으로 부터 1 증가 하거나 1 감소 한다 . 설계 시 카운터 비트 수가 결정되어 있어 그 비트수가 지정할 수 있는 최대 범위가 넘으면 0 으로 간다 .
E N D
타이머 8051 타이머 타이머 설정 및 모드 dolicom@naver.com http://blog.naver.com/dolicom
카운터의 원리와 디지털회로 • 2진 카운터 (Binary Counter) • 디지털 회로에 의해 이루어 진다. • 정해진 초기 값으로 부터 1증가 하거나 1감소 한다. • 설계 시 카운터 비트 수가 결정되어 있어 그 비트수가 지정할 수 있는 최대 범위가 넘으면 0으로 간다. • (예) 4비트 2진 카운터는 0부터 15까지 16 상태로 카운터 된다. 0 → 1 → 2 → … → 14 → 15 → 0 → 1 → …
Q Q Q D D D > > > CLK CLK CLK Q Q Q 카운터는 클럭에 의해 상태가 바뀐다. 0 1 2 3 4 5 6 7 0 Q2 0 0 0 0 1 1 1 1 0 조합 논리 회로 0 0 1 1 0 0 1 1 0 Q1 0 1 0 1 0 1 0 1 0 Q0 CLK CLK
8051 타이머 타이머/카운터
타이머(Timer)와 카운터(Counter) • 타이머(Timer) • 1머신사이클(내부 시스템 클럭 1/12)을 세는 것을 말함 • 카운터(Counter) • 외부 핀에 입력되는 클럭 또느 이벤트를 세는것을 말함. 이것을 타이머와 구별없이 혼용해서 사용. • 방법 • 타이머/카운터 0는 SFR영역의 TH0,TL0 • 타이머/카운터 1는 SFR영역의 TH1,TL1 • 클럭이 입력될 때, +1 증가하는 업카운터(up counter)
타이머의 구조 XTAL 인터럽트 카운터 (디지털 카운터) 오버플로 플래그 설정 시스템 클럭 클럭 발생 외부 핀 입력
타이머의 사용 • 타이머 레지스터가 오버플로 (0xFFFF->0x0000)가 발생하면, TCON 레지스터내의 TF(Timer Overflow)가 셋된다. • Timer 0 -> TF0, Timer 1 -> TF1 • 타이머 2은 시리얼 포트의 보레이트 제너레이터(Baud rate gererator)로 동작 시킬 수 있다. • 4개의 타이머는 TMOD와 TCON을 사용하여 프로그램 한다.
TMOD 레지스터 7 6 5 4 3 2 1 0 GATE C/T M1 M0 GATE C/T M1 M0 Timer 1 Timer 2 • GATE : 외부 인터럽트 핀(INT1, INT0)을 이용해서, 타이머를 정지/동작을 제어 한다. • 1. GATE=1, TR0=1 : INT0=1 –타이머1 동작, INT0 –정지 • GATE=1, TR1=1 : INT1=1 –타이머2 동작, INT1 –정지 • 2. GATE=0 : INT0,INT1 핀을 사용하지 않으며, TCON내의 TR0, TR1에 • 따라 동작/정지 된다. • C/T (Counter/Timer selector) : 카운터/타이머 모드를 결정 • 1. C/T=1 : 카운터 모드 –입력 핀 T0, T1에서 들어오는 펄스를 센다. • C/T=0 : 타이머 모드 –시스템 클럭/12을 센다. • M1:M0 : 동작 모드 설정 • 4가지 모드를 지원 한다.
타이머 클럭 구조 XTAL oscillator ÷ 12 C/T = 0 C/T = 1 T0 핀(P3.4) TR0(TCON) GATE(TMOD) INT0핀(P3.2)
타이머로 사용 –시스템 클럭 사용 XTAL oscillator ÷ 12 C/T = 0 C/T = 1 T0 핀(P3.4) 1=동작 1 TR0(TCON) 1 1 0 GATE(TMOD) INT0핀(P3.2)
타이머 사용 – 시스템 클럭 사용 XTAL oscillator ÷ 12 C/T = 0 C/T = 1 T0 핀(P3.4) 1=동작 1 TR0(TCON) 1 0 1 GATE(TMOD) 1 INT0핀(P3.2)
타이머로 사용 –외부 클럭 사용 XTAL oscillator ÷ 12 C/T = 0 C/T = 1 T0 핀(P3.4) 1=동작 1 TR0(TCON) 1 1 0 GATE(TMOD) INT0핀(P3.2)
TCON 레지스터 7 6 5 4 3 2 1 0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 Timer2 Timer1 Interrupt • TR1/TR0 : 타이머/카운터 동작/정지 제어 한다. • TR0=1 : 타이머/카운터 0 동작 • TR0=0 : 타이머/카운터 0 정지 • TF1/TF0 : 타이머/카운터 오버플로 플래그 • TF0 : 타이머/카운터 0의 카운터 레지스터(TH1, TH0)가 오버플로가 되면 • 셋된다. • *이 때 다음과 같이 인터럽트 처리 된다.. • - 인터럽트 인에이블되어 있고 • - 인터럽트 요청하게 되면 • - 인터럽트 처리가 끝나면 자동으로 클리어 된다
타이머/카운터의 동작 모드 • 4가지 동작 모드 지원 • TMOD의 M1:M0을 이용 설정 • 모드 0~2는 타이머/카운터 1과 2이 똑같이 동작 • 모드 3에서는 모듈1과 2가 다르다.
모드 0 • 32분주 프리스케일러(prescaler)+8비트카운터 TH0: 255→0 TL0: 31→0 오버플로 플래그 ÷ 12 OSC 0→255 카운팅 0→31 카운팅 Interrupt 0x000B TH0(8bit) TL0(5bit) TF0 T1 외부클럭 • 오버플로가 발생하면 • TF0 셋 • 인터럽트 인에이블(enable) 되어 있으면 • 인터럽트 요청 • ISR로 가기전에 TF0를 클리어 하고 • ISR로 들어가서 인터럽트 처리 한다. • 클럭선택(C/T0) • 동작설정 • TR0 • GATE0 • INT0
모드 0의 프로그램 • 우선 TMOD동작 모드 및 동작 설정 한다. TMOD = 0x04; • 타이머 1 • 동작 모드 M1:M0= 00 : 모드 0 • GATE0=0 : 사용 않함 • C/T0 = 1 : 가운터로 동작 –외부클럭 T0 사용 • 타이머 2 • 동작 모드 0, GATE1=0 : 사용 않함 • C/T0 = 0 : 타이머로 동작 –시스템 클럭 사용 • 시정수 결정 TH0=255;- 시정수 256-255=1 : 32x1 TH1=90; - 시정수 256-90=166, 전체 시정수=32x166 • 타이머 동작 시작 TR0=1; TR1=1; - 타이머1/2 동작시작
모드 1 • 16비트 카운터 : 8비트 + 8비트 TH0: 255→0 TL0: 255→0 오버플로 플래그 ÷ 12 OSC 0→255 카운팅 0→255 카운팅 Interrupt 0x000B TH0(8bit) TL0(8bit) TF0 T1 외부클럭 • 클럭선택(C/T0) • 동작설정 • TR0 • GATE0 • INT0 • 모드 0와 모든 동작은 같고 • 5비트 대신 8비트로 바뀜
모드 2 • 8비트카운터 : Auto Reload TH0(8bit) TL0: 255→0 Auto reload 오버플로 플래그 ÷ 12 OSC Interrupt 0x000B TL0(8bit) TF0 TH0→255 카운팅 T1 외부클럭 TL0: 255→0 • 클럭선택(C/T0) • 동작설정 • TR0 • GATE0 • INT0
모드 3 –타이머 1 • 8비트카운터 – TH0, TL0 카운터 Interrupt 0x001B • 동작설정 • TR1 TF1 TH0(8bit) ÷ 12 OSC Interrupt 0x000B TL0(8bit) TF0 TH0→255 카운팅 T1 외부클럭 • 클럭선택(C/T0) • 동작설정 • TR0 • GATE0 • INT0
모드 3 –타이머 2 • 8비트카운터 – TF1은 사용 불가능 TH1(8bit) ÷ 12 OSC TL1(8bit) Serial Port 클럭 TH0→255 카운팅 T1 외부클럭 • 클럭선택(C/T1) • 동작설정 • TR1 • GATE1 • INT1
8051 타이머 Timer2
T2CON 레지스터 0xC8 7 6 5 4 3 2 1 0 TF2 EXF2 RCLK TCLK EXEN2 TR2 CP/T2 CP/RL2 • TF2 : Overflow가 되면 1로 되고 SW로 지움. RCLK/TCLK=1이면 동작 안함. • EXF2 : Capture/Reload일 때, T2EX가 오면 1로 됨. EXEN2=1일때 동작. • - 인터럽트 요청 EXF2=1이면 Timer2 Vector로 처리-인터럽트 루틴 실행. • - DCEN=1로 Up/Down Counter Mode에서 동작 안함. • RCLK : Serial Mode1/3에서 Receive clock으로 사용. • TCLK : Serial Mode1/3에서 Transmit clock으로 사용. • EXEN2 : Timer2 External 동작. • TR2 : Timer2의 동작 시작/멈춤 설정. • CP/T2 : Timer/ Counter(외부입력 사용) 설정. • CP/RL2 : Capture/Reload 선택.
Timer2 동작 모드 • 16비트 자동 재로드 모드 • 특정한 조건에서 16비트 카운터에 RCAP2H 및 RCAP2L 레지스터의 값을 로드 • 16비트 캡쳐 모드(capture mode) • 외부의 T2EX 신호에 의하여 현재의 타이머 레지스터 값을 캡쳐 • 16비트 보레이트 발생기 모드 (Baud Rate Generator Mode) • T2CON 레지스터에서 TCLK이나 RCLK 비트를 최소한 1개만 세트시켜도 설정 • 16비트 프로그래머블 클럭 출력 모드 (Programmable Clock-Out Mode) • 보레이트 발생기 모드에서 발생되어 직렬 포트에 제공되는 주파수 신호를 외부 단자로 출력할 수 있는 기능