목차
타이머 카운터 인터럽트 프로그램
1. 실험 목적
2. 실험도구
3. 실험 소스 코드 분석
4. 실험 예상
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에 타이머가 출력 될 것이다.
;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.3.4세대 컴퓨터
- 컴퓨터의 이해 문제풀이 레포트
- 20세기에 영향을 끼친 인물 - 빌게이츠
- MS사의 독점 (마이크로 소프트)
- [레지스트리의 의미][레지스트리의 구조][레지스트리의 백업][레지스트리의 복구][레지스트리...
- 컴퓨터 공학과의 진보적 입장
- 전공 컴퓨터와 기초 - 7~80만우너 조립컴퓨터 구성, 인터넷 사기
- [Bill-Gates부터Steven-Ballmer까지]Microsoft의 성장과 Leadership의 변화
- 마이크로소프트 (MS : Microsoft) - 마이크로소프트 기업분석, 마이크로-소프트 창업, MS 운...