타이머 카운터 인터럽트 프로그램 [마컴 예비레포트]
본 자료는 5페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
해당 자료는 5페이지 까지만 미리보기를 제공합니다.
5페이지 이후부터 다운로드 후 확인할 수 있습니다.

목차

타이머 카운터 인터럽트 프로그램

1. 실험 목적

2. 실험도구

3. 실험 소스 코드 분석

4. 실험 예상

본문내용

===
;R26 = second low byte
;R27 = second high byte
;R28 = minute
;R29 = hour
;------------------------------------------------
;Display Time
;------------------------------------------------
DSP_TIME:LDILCD_BUFFER,0xC2; display hour
CALLLCD_COMMAND//두번째 줄 2째칸에 시간을 표시
MOVLCD_BUFFER,R29
CALLLCD_2DIGIT//2자리 디지털로 출력
LDILCD_BUFFER,0xC5; display minute
CALLLCD_COMMAND//두번째 줄 5째칸에 분을 표시
MOVLCD_BUFFER,R28
CALLLCD_2DIGIT
MOVAH,R27; second*100/100
MOVAL,R26
LDIBL,100
CALLDIV8; AL=quotient, AH=remainder
LDILCD_BUFFER,0xC8; display second
CALLLCD_COMMAND// 두 번째 줄 8번째 칸에 초를 표시
MOVLCD_BUFFER,AL
CALLLCD_2DIGIT
LDILCD_BUFFER,0xCB; display 1/100 second
CALLLCD_COMMAND// 1/100초 단위를 표시
MOVLCD_BUFFER,AH
CALLLCD_2DIGIT
RET
;------------------------------------------------
;Display 2-digit Decimal Number
;------------------------------------------------
LCD_2DIGIT:
PUSHAH//현재 프로그램카운터에 저장된 번지를 Stack에 저장
PUSHBL
MOVAL,LCD_BUFFER; AH:AL / BL
CLRAH
LDIBL,10
CALLDIV8; AL = quotient, AH = remainder
MOVLCD_BUFFER,AL; display 10^1
ORILCD_BUFFER,'0'
CALLLCD_DATA
MOVLCD_BUFFER,AH; display 10^0
ORILCD_BUFFER,'0'
CALLLCD_DATA
POPBL
POPAH
RET
;------------------------------------------------
;Initialize Timer/Counter1 and OC1A Interrupt
;------------------------------------------------
SET_TIMER1:
LDI AL,0b00000000 ; CTC mode(4), don't output OC1A
OUT TCCR1A,AL
LDI AL,0b00001100 ; interrupt = 16MHz/256/(1+624) = 100Hz
OUT TCCR1B,AL
LDI AL,0b00000000
STS TCCR1C,AL
LDI AL,high(624)
OUT OCR1AH,AL
LDI AL,low(624)
OUT OCR1AL,AL
LDI AL,0x00 ; clear Timer/Counter1
OUT TCNT1H,AL
OUT TCNT1L,AL
LDI AL,0b00010000 ; enable Timer/Counter1 OC1A interrupt
OUT TIMSK,AL
LDI AL,0b00000000
STS ETIMSK,AL
LDI AL,0b00000000 ; clear all interrupt flags
OUT TIFR,AL
LDI AL,0b00000000
STS ETIFR,AL
RET
;====================================================================
;Interrupt Service Routine of OC1A
;====================================================================
TIMER1_COMPA:
PUSH AL ; store registers
IN AL,SREG
PUSH AL
ADIW R26,1 ; increment 1/100 second
CPIR27,high(6000); second = 60 ?
BRNETIMER1_RET
CPIR26,low(6000)
BRNETIMER1_RET
CLRR27; if yes, second = 0
CLRR26
INCR28; and increment minute
CPIR28,60; minute = 60 ?
BRNETIMER1_RET
CLRR28; if yes, minute = 0
INCR29; and increment hour
CPIR29,100; hour = 100 ?
BRNETIMER1_RET
CLRR29; if yes, hour = 0
TIMER1_RET:
CALLDSP_TIME; display time
POP AL ; restore registers
OUT SREG,AL
POP AL
RETI
;====================================================================
;Include User Subroutine File
;====================================================================
.include "OK128SUB.INC"; include OK-128 subroutine file
4. 실험 예상
⑴ Exp04.1.asm
텍스트 LCD 두 줄에 짧은 글이 출력되고 LED4에 깜빡거리는 점등이 될 것이다.
⑵ Exp04.2.asm
1번과 마찬가지로 텍스트 LCD에 글이 출력되고 LED3에 점등이 될 것인데 깜빡거림이 더욱 빨라 질 것이다.
⑶ Exp04.3.asm
텍스트 LCD 두 줄에 각각 숫자가 빠르게 올라가고 LED 3번은 Timer3에 반응하여 빠르게 반응하고 LED4번은 Timer1에 반응하여 천천히 반응 할 것이다.
⑷ Exp04.4.asm
스톱 워치로서 스위치 1,3,4 번이 각각 리셋, 정지, 시작의 역할을 하며 텍스트 LCD에 타이머가 출력 될 것이다.

키워드

  • 가격2,000
  • 페이지수15페이지
  • 등록일2012.05.22
  • 저작시기2011.5
  • 파일형식한글(hwp)
  • 자료번호#748638
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니