Presentation is loading. Please wait.

Presentation is loading. Please wait.

KT-M128 Peripheral Device

Similar presentations


Presentation on theme: "KT-M128 Peripheral Device"— Presentation transcript:

1 KT-M128 Peripheral Device
Seven-Segment Timer / Counter0 조 승훈 Reference: AVR ATmega128 정복, ohm사 IAR EWAVR 컴파일러를 이용한 AVR ATmega128 마이크로 컨트롤러, 성안당 ATmega128 Register_ver0.9, 단국대 Electron 조상민 NewTC 강의 자료 (I/O PORT, Timer/Counter, Interrupt),

2 Index Seven-Segment Timer / Counter0 AVR Interrupt Source Code

3 Seven-Segment Overview
7개의 막대형 LED를 사용하여 아라비아 숫자나 간단한 기호 또는 몇 가지의 영문자를 표시 할 수 있도록 만든 LED 복합 소자 FND (Flexible Numerical Display) 라 부름 대부분의 7-Segment는 추가로 dot point를 추가하여 1바이트 디지털 데이터를 사용하여 1글자를 디스플레이 하는데 적합 74LS47 (BCD-to-7-Segment Decoder / Driver)를 사용하면 4비트의 병렬 데이터로 1글자를 보다 쉽게 디스플레이 할 수 있음 공통 애노드형, 공통 캐소드형이 있음 Static Display 구동 방식, Dynamic Display 구동 방식이 있음

4 Seven-Segment 7Segment의 구조 Common Anode형과 Common Cathode형으로 나뉨
어느 방식을 사용할지는 7Segment LED를 제어하는 회로의 출력 단 데이터 논리상태나 각 Segment를 점등하기 위한 Switching 소자의 종류에 따라 결정 Common Cathode형 제어회로 출력 단의 논리상태가 L일 때 제어하기 편함 Common Anode형 제어회로 출력 단의 논리상태가 H일 때

5 Seven-Segment 7Segment의 구동 방식 Static Display Dynamic Display
각 7Segment 별로 전용 Latch 사용 장점: 소프트웨어적으로 처리가 간편 상대적으로 CPU의 부담이 적음 단점: 항상 켜져 있으므로 전력 소모가 큼 표시 자리가 늘어나면 하드웨어적으로 복잡해짐 Dynamic Display 한번에 한 개의 7Segment를 구동하되, 착시현상을 이용하여 순차적으로 Enable을 인가 장점: 상대적으로 전력 소모가 적음 구동해야 할 7Segment가 많을 때 유리 단점: 상대적으로 CPU의 부담이 큼

6 Seven-Segment KT-M128 7Segment 회로도 한 7Segment의 LED 컨트롤 (Data)
7-Segment의 Digit 컨트롤

7 Seven-Segment KT-M128의 7Segment 메모리 주소
Seven-Segment Data 출력 메모리 번지: 0x8002 (Write 전용) Seven-Segment Digit 출력 메모리 번지: 0x8003 (Write 전용) 7 6 5 4 3 2 1 Data[7] Data[6] Data[5] Data[4] Data[3] Data[2] Data[1] Data[0] Data[7] Seven-Segment – A Segment Data[6] Seven-Segment – B Segment Data[5] Seven-Segment – C Segment Data[4] Seven-Segment – D Segment Data[3] Seven-Segment – E Segment Data[2] Seven-Segment – F Segment Data[1] Seven-Segment – G Segment Data[0] Seven-Segment – Dot Point Segment 7 6 5 4 3 2 1 Digit[3] Digit[2] Digit[1] Digit[0] Digit[n] n번째 자리 수 Enable(H: Disable, L: Enable)

8 Seven-Segment

9 AVR Timer /Counter Timer / Counter Overview 입력으로 들어오는 펄스를 셈하는 장치
AVR ATmega128에는 범용 타이머 / 카운터가 4개 존재 Timer/Counter0 (8bit) Timer/Counter1 (16bit) Timer/Counter2 (8bit) Timer/Counter3 (16bit)

10 AVR Timer /Counter Timer와 Counter의 차이점 Timer / Counter Register Timer
내부 Clock (빠름 / 분주 가능: 범위 내에서 Clock 선택 가능) – 동기모드 타이머는 MCU의 내부 Clock (Clk I/O > 분주기 > ClkT)을 이용 일정시간 간격의 펄스를 만들어 내거나, 일정시간 경과 후에 인터럽트 발생 가능 Counter 외부 Clock (느림 / 분주 불가능: 외부 Clock 그대로 사용) – 비 동기모드 Counter는 외부 핀 (TOSC1, TOSC2, T1, T2, T3)을 통해 들어오는 펄스를 계수 (Edge Detector)하여 Event Counter로서 동작 (Pulse = Event, Counter = Number of Event) Timer / Counter Register Timer / Counter Control Register (TCCRn) Timer / Counter Register (TCNTn) Output Compare Register (OCRn) Interrupt Timer / Counter Interrupt Flag Register (TIFR) Timer / Counter Interrupt Mask Register (TIMSK)

11 AVR Timer /Counter 8Bit Timer / Counter 0 Timer / Counter0의 특징
싱글 채널 카운터 Clear Timer on Compare Match 기능 (Auto Reload 기능) 글리치가 없는 Phase Correct PWM 기능 주파수 발생 기능 10bit 프리스케일러 기능 Timer0 Overflow Interrupt와 Timer0 Compare Match Interrupt I/O Clock과는 별도로 kHz를 인가 가능한 핀 (TOSC1, TOSC2 핀)

12 AVR Timer /Counter BOTTOM : ox00일 경우 카운터가 Bottom에 도달
MAX : 0xFF일 경우 카운터가 MAX에 도달 TOP : Max or OCR0 값에 도달

13 AVR Timer /Counter 프리스케일러 (PreScaler) 전치 분주기 총 8개의 스케일을 가지고 있음
분주비가 1:8일 경우, 시스템 Clock이 8번 들어 올 때, 프리스케일러를 통과한 Clock은 1번의 Clock이 발생 Prescaler for Timer / Counter0 Prescaler for Timer / Counter0 CS02 CS01 CS00 기능 설명 정지 1 CLK CLK / 8 CLK / 32 CLK / 64 CLK / 128 CLK / 256 CLK / 1024 (ASSR[3]) (SFIOR[1]) (TCCR0[2:0])

14 AVR Timer /Counter Timer / Counter 관련 레지스터 (I/O Reg 영역에 Mapping)
SFIOR (Special Function I/O Register) Bit 7 : TSM (Timer / Counter Synchronization Mode) 1: Timer / Counter0의 동기 모드, PSR0와 PSR321에 쓴 값은 유지 됨 0: PSR0와 PSR321에 쓴 값은 하드웨어에 의해 클리어 됨 Bit 1 : PSR0 (Prescaler Reset Timer / Counter0) 1: Timer / Counter0의 Prescaler를 리셋 0: 영향 없음

15 AVR Timer /Counter ASSR (Asynchronous Status Register)
Bit 3 : AS0 (Asynchronous Timer / Counter0) 0: Clock 소스 = ClkI/O (동기 모드) 1: Clock 소스 = TOSC1 (비동기 모드) Bit 2 : TCN0UB (Timer /Counter (TCNT0) Update Busy) 비동기 모드일 때 TCNT0에 새로운 값이 라이트되면 셋 Bit 1 : OCR0UB (Output Compare Register (OCR0) Update Busy) 비동기 모드일 때 OCR0에 새로운 값이 라이트되면 셋 Bit 0 : TCR0UB (Control Register (TCCR0) Update Busy) 비동기 모드일 때 TCCR0에 새로운 값이 라이트되면 셋

16 AVR Timer /Counter TCCR0 (Timer /Count0 Control Register)
Bit 7 : FOC0 (Force Output Compare) 1: 강제로 OC0 단자에 출력 비교가 매치된 신호 출력 (PWM 아닌 경우에 유효) Bit 6 : WGM00 (Waveform Generation Mode) Counter의 카운팅 방향, MAX(TOP) 카운터 값의 소스 및 Mode 선택 Bit 5 – 4 : Com01 - Com00 (Compare Match Output Mode) OC0 핀 기능 설정 Bit 3 : WGM01 (Waveform Generation Mode) Bit 2 – 0 : CS02 – CS00 (Clock Select) Clock의 분주 비율 설정

17 AVR Timer /Counter Waveform Generation Mode Mode WGM01 WGM00
Mode of Operation TOP Update of OCR0 TOV0 Flag Set Normal oxFF Immediate MAX 1 PWM, Phase Correct BOTTOM 2 CTC OCR0 3 Fast PWM Compare Output Mode, non PWM Mode Mode COM01 COM00 설명 PWM모드가 아닌 경우 (Normal / CTC) 범용 입출력포트 (OC0 출력 차단) 1 비교매치 >> OC0 Toggle 출력 비교매치 >> OC0 = 0 출력 비교매치 >> OC0 = 1 출력 Mode COM01 COM00 설명 Phase Correct PWM 범용 입출력포트 (OC0 출력 차단) 1 Reserved 상향카운터 비교매치>> OC0 = 0 출력 하향카운터 비교매치>> OC0 = 1 출력 상향카운터 비교매치>> OC0 = 1 출력 하향카운터 비교매치>> OC0 = 0 출력 Mode COM01 COM00 설명 FAST PWM 범용 입출력포트 (OC0 출력 차단) 1 Reserved 비교매치 >> OC0 = 0 출력 오버플로우 >> OC0 = 1 출력 비교매치 >> OC0 = 1 출력 오버플로우 >> OC0 = 0 출력

18 AVR Timer /Counter TCNT0 (Timer / Counter0 Register)
Timer / Counter0의 8bit 카운터 값을 저장하고 있는 레지스터

19 AVR Timer /Counter OCR0 (Timer / Counter0 Output Control Register)
TCNT0 값과 비교하여 OC0 핀에 출력신호를 발생하기 위한 8bit값을 저장하는 레지스터

20 AVR Timer /Counter TIMSK (Timer / Counter Interrupt Mask Register)
Timer / Countern에서 발생하는 Interrupt의 개별적으로 enable Bit 1: OCIE0 (Timer / Counter0 Output Compare Match Interrupt Enable) OCIE0 bit가 1로 설정되고 SREG의 I비트가 1로 설정되어 있으면 Timer / Counter0의 출력 비교 Interrupt가 enable 이 때, Timer / Counter0 출력비교 Interrupt가 발생하면 TIFR의 OCF0 bit가 1이 되면 이 Interrupt가 처리 됨 Bit 0: TOIE0 (Timer /Counter0 Overflow Interrupt Enable) TOIE0 bit와 I bit가 1로 설정되어 있으면 Overflow Interrupt가 enable 됨 이 때, TIFR의 TOV0 비트가 1이 되면 ISR이 실행 됨

21 AVR Timer /Counter TIFR (Timer / Counter Interrupt Flag Register)
Bit 1: OCF0 (Timer / Counter0 Output Compare Flag) TCNT0과 OCR0의 값을 비교, 같으면 이 bit가 1로 설정되고, 출력비교 Interrupt가 발생, 이 Interrupt가 처리되면 자동으로 0으로 Clear 됨 Bit 0: TOV0 (Timer / Counter0 Overflow Flag) Timer / Counter0에서 Overflow가 발생하면 자동으로 1로 설정 됨 이 bit가 1이 되면 Overflow Interrupt 발생 Interrupt가 처리되면 자동으로 0으로 Clear 됨 Phase PWM Mode에서는 Timer / Counter0이 0x00에서 카운트 방향을 바꿀 때 1로 설정 됨

22 AVR Timer /Counter Timer 각 타이머에서 사용하는 Clock에 대한 설정 필요
프리스케일러(PreScaler) 값으로 조절 가능 프리스케일러 값은 각 타이머의 컨트롤 레지스터(TCCRn)에서 설정 각 타이머 레지스터 (TCNTn)에 얼마마다 한번 씩 인터럽트를 걸게 할 것인지와 관련된 값을 써주면 됨 타이머 인터럽트 관련 레지스터들을 설정 필요 타이머 인터럽트에서는 TIMSK 레지스터만 설정

23 AVR Timer /Counter Timer / Counter0의 Output Compare 장치
8bit 비교기 : 연속해서 TCN0 값과 OCR0 값을 비교 TCNT0 값과 OCR0 값이 같을 때마다 match 신호 발생 match 신호는 Timer Clock의 다음 Cycle에서 OCF (Output Compare Flag) 를 셋 OCIE0 bit와 SREG 레지스터의 I bit가 1로 Set되어 있으면 OCF0는 Output Compare Interrupt 발생 시킴 OCF0 Flag는 Interrupt가 실행되고 나서 자동으로 Clear 됨 (OCF0 bit에 1을 써서 Software적으로 Clear해도 됨)

24 AVR Timer /Counter Timer / Count0 관련 레지스터
TCCR0 (Timer / Counter Control Register) Bit 7 : FOC0 (Force Output Compare) 1: 강제로 OC0 단자에 출력 비교가 매치된 신호 출력 (PWM이 아닌 경우 유효) Bit 6 : WGM00 (Waveform Generation Mode)

25 AVR Timer /Counter Timer / Counter0의 동작 모드
WGM[1:0] (Waveform Generation Mode, TCCR0 Reg)와 COM[1:0] (Compare Output Mode, TCCR0 Reg)에서 설정 WGM : 카운터의 순서에 영향을 비침 COM : PWM 모드에서 (Non)inverting mode를 결정 Non-PWM 모드에서 compare match 시점에서 출력이 1로 Set되는지, 0으로 Clear 되는지, Toggle인지를 결정 4가지 동작 모드 지원 Normal Mode CTC (Clear Timer on Compare Match) Mode Fast PWM Mode Phase Correct PWM Mode

26 AVR Timer /Counter Normal Mode (WGM[1:0] = 0으로 설정) 동작 모드 중 가장 간단한 모드
항상 상향 카운터 카운트 도중 Clear되지 않음 TOP이 oxFF가 되면 다시 BOTTOM(0x00)에서 시작 (Overflow) TOV0 (Timer /Counter Overflow Flag)는 TCNT0 값이 0이 되는 시점에서 1로 Set 됨 비교매치(Compare Match) 인터럽트 발생 파형을 예상하지 못하기 때문에 비 추천

27 AVR Timer /Counter CTC Mode (Compare Timer on Compare Match Mode)
WGM[1:0] = 2로 설정 주파수 분주 기능으로 주로 사용 (PortB4 = OC0) DDR 레지스터 값을 출력으로, COM[1:0]을 1로 설정 항상 상향 카운터 0x00 ~ OCR0 계수 동작 반복 OCR0값과 TCNT0 값이 같으면 카운트 도중 Clear MAX이거나 OCR0 값일 때, Overflow Interrupt 발생 COMP 인터럽트와 동일하게 작동되기 때문에 비 추천 Mode COM01 COM00 설명 PWM모드가 아닌 경우 (Normal / CTC) 범용 입출력포트 (OC0 출력 차단) 1 비교매치 >> OC0 Toggle 출력 비교매치 >> OC0 = 0 출력 비교매치 >> OC0 = 1 출력

28 AVR Timer /Counter FAST PWM 높은 주파수 PWM 파형발생이 필요할 때 사용
상향 카운터 (Single-Slope Operation) 0x00 ~ 0xFF 계수 동작 반복 TCNT0과 OCR0의 Compare Match되면 OC0에 LOW 출력 (COM0[1:0] = 2) oxFF -> 0x00 Overflow되면 OC0에 HIGH 출력 (COM[1:0] = 2) Mode COM01 COM00 설명 FAST PWM 범용 입출력포트 (OC0 출력 차단) 1 Reserved 비교매치 >> OC0 = 0 출력 오버플로우 >> OC0 = 1 출력 비교매치 >> OC0 = 1 출력 오버플로우 >> OC0 = 0 출력

29 AVR Timer /Counter Phase Correct PWM 높은 분해능의 PWM출력 파형을 발생하는데 사용
상향카운터 0x00 -> 0xFF 하향카운터 0xFF -> ox00 0x00 ~ oxFF ~ ox00 계수 동작 반복 상향카운터 비교매치>> OC0 = 0 출력 (COM0 1 : 0 = 2) 하향카운터 비교매치>> OC0 = 1 출력 (COM0 1 : 0 = 2) Mode COM01 COM00 설명 Phase Correct PWM 범용 입출력포트 (OC0 출력 차단) 1 Reserved 상향카운터 비교매치>> OC0 = 0 출력 하향카운터 비교매치>> OC0 = 1 출력 상향카운터 비교매치>> OC0 = 1 출력 하향카운터 비교매치>> OC0 = 0 출력

30 AVR Timer /Counter Match 된 다음 Cycle에 Set
OCIE0 bit와 SREG의 I 비트가 1이면 Output Compare Interrupt 발생 Interrupt가 실행되고 나면 OCF는 자동으로 Clear 동작 모드 비트 Compare Output Mode

31 AVR Timer /Counter 모드의 동작에 따라 ClkTn에서 카운터가 클리어, 증가, 감소
AS0를 이용하여 외부 또는 내부 Clock 소스 설정 CS[2:0]를 설정하여 사용 주파수로 분주 가능 TCCR0 레지스터의 TGM01~00으로 모드 설정 TCNT0과 OCR0는 8bit로 구성 BOTTOM : ox00일 경우 카운터가 Bottom에 도달 MAX : 0xFF일 경우 카운터가 MAX에 도달 TOP : Max or OCR0 값에 도달 CS00~ CS02 AS0

32 Timer / Counter Timer / Counter 0과 2 공통점 차이점 8bit 구조 Overflow
PWM과 유사한 기능 제어방식 차이점 Timer / Counter0은 KHz의 크리스탈을 접속하는 TOSC1 및 TOSC2 단자를 가짐 RTC 기능을 갖도록 할 수 있음 다른 Timer / Counter와는 다르게 내부 클럭을 사용하든 외부 클럭을 사용하든 모두 프리스케일러의 분주 기능 사용가능

33 AVR Timer /Counter Timer / Counter Summary Timer / Counter 1 2 3 기본 구조
1 2 3 기본 구조 8bit 16bit 타이머 입력 clkI/O(=clkCPU) 타이머 프리스케일러 1, 8, 32, 64, 128, 256, 1024 1, 8, 64, 256, 1024 카운터 입력 Oscillator T1 T2 T3 TOSC1 관련 레지스터 TCCR0 TCNT0 OCR0 ASSR SFIOR, TIMSK, TIFR TCCR1A, TCCR1B, TCCR1C TCNT1H/L OCR1AH/L, OCR1BH/L, OCR1CH/L ICR1H/L SFIOR, TIMSK, TIFR, ETIMSK, ETIFR TCCR2 TCNT2 OCR2 TCCR3A, TCCR3B, TCCR3C TCNT3H/L OCR3AH/L, OCR3BH/L, OCR3CH/L ICR3H/L 동작 모드 Normal CTC Normal Fast PWM Phase Correct PWM - Phase and Frequency Correct PWM Phase and Frequency Correct PWM 입력 신호 TOSC1, TOSC2 T1, ICP1 T3, ICP3 출력 신호 OC0 OC1A, OC1B, OC1C OC2 OC3A, OC3B, OC3C 인터럽트 Overflow Output Compare Match Match A/B/C Output Compare Match A/B/C Input Capture 기타 RTC 기능 타이머 및 카운터 모두 프리스케일러 사용 Capture 기능

34 AVR Interrupt Interrupt Overview
CPU가 현재 처리하고 있는 일보다 급하게 처리해야 할 사건이 발생 했을 때, 현재 수행중인 일을 잠시 중단하고 급한 일을 처리한 후 본래의 일을 다시 수행하는 것 프로그램 된 순서대로 일을 처리하는 것이 아니라 발생 시기를 예측 할 수 없는 사건을 처리하는 데 효율적인 방법 인터럽트 처리 과정 인터럽트가 준비된 장치는 인터럽트 요구 플래그 bit를 세트하고 CPU에 인터럽트 요구 CPU는 인터럽트 확인(INTA) 신호를 보내고, INTA를 받은 I/O장치는 인터럽트 요구 삭제 CPU는 PC, PSW, 레지스터 등을 Stack에 저장 CPU는 인터럽트 서비스 루틴(ISR)의 주소를 PC에 적재 인터럽트 서비스 루틴 수행 PSW, 레지스터 등을 Stack으로부터 복귀 본래의 메인 프로그램으로 북귀

35 AVR Interrupt Interrupt Vector Reset 및 Interrupt Vector의 위치 설정
BOOTRST in Fuse High Byte

36 AVR Interrupt Interrupt 관련 Register MCUCR (MUC Control Register)
Bit 1 : Interrupt Vector Select Interrupt Vector 설정 Bit 0 : Interrupt Vector Change Enable 0: Interrupt Vector 바꿈 차단 1: Interrupt Vector 바꿈 허용

37 AVR Interrupt EICRA (External Interrupt Control Register A)
Bit 7 – 6 (External Interrupt 3 Sense Control) 외부 인터럽트 INT3의 트리거 방식 설정 Bit 5 – 4 (External Interrupt 2 Sense Control) 외부 인터럽트 INT2의 트리거 방식 설정 Bit 3 – 2 (External Interrupt 1 Sense Control) 외부 인터럽트 INT1의 트리거 방식 설정 Bit 1 – 0 (External Interrupt 0 Sense Control) 외부 인터럽트 INT0의 트리거 방식 설정 ISOn 1 ISOn0 인터럽트 트리거 방식 Intn 핀의 Low Level 신호 입력이 인터럽트를 트리거 1 - Intn 핀의 Falling Edge 입력이 인터럽트를 트리거 Intn 핀의 Rising Edge 입력이 인터럽트를 트리거

38 AVR Interrupt EICRB (External Interrupt Control Register B)
Bit 7 – 6 (External Interrupt 7 Sense Control) 외부 인터럽트 INT7의 트리거 방식 설정 Bit 5 – 4 (External Interrupt 6 Sense Control) 외부 인터럽트 INT6의 트리거 방식 설정 Bit 3 – 2 (External Interrupt 5 Sense Control) 외부 인터럽트 INT5의 트리거 방식 설정 Bit 1 – 0 (External Interrupt 4 Sense Control) 외부 인터럽트 INT4의 트리거 방식 설정 ISOn 1 ISOn0 인터럽트 트리거 방식 Intn 핀의 Low Level 신호 입력이 인터럽트를 트리거 1 Intn 핀의 Falling Edge 또는 Rising Edge 입력이 인터럽트를 트리거 Intn 핀의 Falling Edge 입력이 인터럽트를 트리거 Intn 핀의 Rising Edge 입력이 인터럽트를 트리거

39 AVR Interrupt EIMSK (External Interrupt Mask Register)
Bit 7 – 0 : External Interrupt Mask Register 1: 각각의 인터럽트 허용 0: 각각의 인터럽트 금지

40 AVR Interrupt EIFR (External Interrupt Flag Register)
Bit 7 – 0 : External Interrupt Flag Register 각각의 인터럽트 발생

41 Source Code #include <avr/io.h> #include <avr/interrupt.h> #define EX_SS_DATA (*(volatile unsigned char *)0x8002) #define EX_SS_SEL (*(volatile unsigned char *)0x8003) void delay(int n); const char segment_data[10] = {63, 6,91,79,102,109,125,39,127,103}; unsigned char display_num[4]={0,0,0,0}; // Seven segment 4자리 숫자 출력 버퍼 void port_init(void) { PORTA = 0x00; DDRA = 0xff; //1출력 0입력 for 7segment PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; //m103 output only DDRC = 0x0f; //Low 8bit output PORTD = 0x00; DDRD = 0x00; PORTE = 0x00; DDRE = 0x00; PORTF = 0x00; DDRF = 0x00; PORTG = 0x00; DDRG = 0x03; //lower 2bit output } //TIMER0 initialize - prescale:64 // WGM: Normal // desired value: 1KHz // actual value: 1.000KHz (0.0%) void timer0_init(void) { TCCR0 = 0x00; //stop ASSR = 0x00; //set async mode TCNT0 = 0x06; //set count OCR0 = 0xFA; TCCR0 = 0x04; //start timer } unsigned char digit_num=0; //#pragma interrupt_handler timer0_ovf_isr:17 ISR(TIMER0_OVF_vect) TCNT0 = 0x06; //reload counter value digit_num++; digit_num = digit_num%4; EX_SS_SEL = 0x0f; EX_SS_DATA = segment_data[display_num[digit_num]]; EX_SS_SEL = ~(0x01 << digit_num);

42 Source Code //call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up asm("cli"); //disable all interrupts XDIV = 0x00; //xtal divider XMCRA = 0x00; //external memory port_init(); timer0_init(); MCUCR = 0x80; //enable int EICRA = 0x00; //ext ints control reg A EICRB = 0x00; //ext ints control reg B EIMSK = 0x00; //ext Int mask reg TIMSK = 0x01; //timer interrupt sources ETIMSK = 0x00; //extended timer interrupt sources asm("sei"); //re-enable interrupts //all peripherals are now initialized } int main(void) { int i=0; init_devices(); while(1){ i++; display_num[0] = (i%10000)/1000; display_num[1] = (i%1000)/100; display_num[2] = (i%100)/10; display_num[3] = (i%10); delay(1000); } void delay(int n) volatile int i,j; for(i=1;i<n;i++) for(j=1;j<600;j++);


Download ppt "KT-M128 Peripheral Device"

Similar presentations


Ads by Google