타이머 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 → …
카운터는 클럭에 의해 상태가 바뀐다. 0 1 2 3 4 5 6 7 0 Q2 0 0 0 0 1 1 1 1 0 > 조합 논리 0 1 2 3 4 5 6 7 0 D CLK Q > Q2 0 0 0 0 1 1 1 1 0 조합 논리 회로 D CLK Q > Q1 0 0 1 1 0 0 1 1 0 D CLK Q > Q0 0 1 0 1 0 1 0 1 0 CLK CLK
8051 타이머 타이머/카운터
타이머(Timer)와 카운터(Counter) 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 레지스터 GATE C/T M1 M0 GATE C/T M1 M0 Timer 2 Timer 1 7 6 5 4 3 2 1 0 GATE C/T M1 M0 GATE C/T M1 M0 Timer 2 Timer 1 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가지 모드를 지원 한다.
타이머 클럭 구조 T0 핀(P3.4) XTAL ÷ 12 C/T = 0 C/T = 1 TR0(TCON) GATE(TMOD) oscillator ÷ 12 C/T = 0 C/T = 1 T0 핀(P3.4) TR0(TCON) GATE(TMOD) INT0 핀(P3.2)
타이머로 사용 – 시스템 클럭 사용 T0 핀(P3.4) XTAL ÷ 12 C/T = 0 C/T = 1 1=동작 1 oscillator ÷ 12 C/T = 0 C/T = 1 T0 핀(P3.4) 1=동작 1 TR0(TCON) 1 1 GATE(TMOD) INT0 핀(P3.2)
타이머 사용 – 시스템 클럭 사용 T0 핀(P3.4) XTAL ÷ 12 C/T = 0 C/T = 1 1=동작 1 oscillator ÷ 12 C/T = 0 C/T = 1 T0 핀(P3.4) 1=동작 1 TR0(TCON) 1 1 GATE(TMOD) 1 INT0 핀(P3.2)
타이머로 사용 – 외부 클럭 사용 T0 핀(P3.4) XTAL ÷ 12 C/T = 0 C/T = 1 1=동작 1 oscillator ÷ 12 C/T = 0 C/T = 1 T0 핀(P3.4) 1=동작 1 TR0(TCON) 1 1 GATE(TMOD) INT0 핀(P3.2)
TCON 레지스터 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 Timer2 Timer1 Interrupt 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비트카운터 TL0: 31→0 TH0: 255→0 ÷ 12 오버플로 플래그 OSC ÷ 12 오버플로 플래그 0→31 카운팅 0→255 카운팅 Interrupt 0x000B TL0(5bit) TH0(8bit) 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비트 모드 0와 모든 동작은 같고 5비트 대신 8비트로 바뀜 TH0: 255→0 TL0: 255→0 OSC ÷ 12 오버플로 플래그 0→255 카운팅 0→255 카운팅 Interrupt 0x000B TL0(8bit) TH0(8bit) TF0 T1 외부클럭 클럭선택(C/T0) 동작설정 TR0 GATE0 INT0 모드 0와 모든 동작은 같고 5비트 대신 8비트로 바뀜
모드 2 8비트카운터 : Auto Reload TH0(8bit) TL0: 255→0 Auto reload ÷ 12 오버플로 OSC ÷ 12 오버플로 플래그 Interrupt 0x000B TL0(8bit) TF0 TH0→255 카운팅 T1 외부클럭 TL0: 255→0 클럭선택(C/T0) 동작설정 TR0 GATE0 INT0
모드 3 – 타이머 1 8비트카운터 – TH0, TL0 카운터 Interrupt 0x001B TH0(8bit) TF1 ÷ 12 동작설정 TR1 TH0(8bit) TF1 OSC ÷ 12 Interrupt 0x000B TL0(8bit) TF0 TH0→255 카운팅 T1 외부클럭 클럭선택(C/T0) 동작설정 TR0 GATE0 INT0
모드 3 – 타이머 2 8비트카운터 – TF1은 사용 불가능 TH1(8bit) ÷ 12 TL1(8bit) OSC ÷ 12 TL1(8bit) Serial Port 클럭 TH0→255 카운팅 T1 외부클럭 클럭선택(C/T1) 동작설정 TR1 GATE1 INT1
8051 타이머 Timer2
T2CON 레지스터 0xC8 TF2 EXF2 RCLK TCLK EXEN2 TR2 CP/T2 CP/RL2 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비트 캡쳐 모드(capture mode) 16비트 보레이트 발생기 모드 특정한 조건에서 16비트 카운터에 RCAP2H 및 RCAP2L 레지스터의 값을 로드 16비트 캡쳐 모드(capture mode) 외부의 T2EX 신호에 의하여 현재의 타이머 레지스터 값을 캡쳐 16비트 보레이트 발생기 모드 (Baud Rate Generator Mode) T2CON 레지스터에서 TCLK이나 RCLK 비트를 최소한 1개만 세트시켜도 설정 16비트 프로그래머블 클럭 출력 모드 (Programmable Clock-Out Mode) 보레이트 발생기 모드에서 발생되어 직렬 포트에 제공되는 주파수 신호를 외부 단자로 출력할 수 있는 기능
Timer2의 동작 모드 – T2CON TR2 TCLK/RCLK CP/RL2 T2OE 모드 1 16비트 Auto-Reload 모드 16비트 Capture 모드 x 16비트 Baud Rate 발생 모드 1(C/T=0) 16비트 Programmable Clock-Out모드 타이머2 동작 OFF