본문내용
P4 MOV R3,#80H ;레지스터5에 00H값을 저장
MOV FND+4,R3 ;레지스터5의 값을 FND+3에 표시
DEC R2 ;레지스터2에 들어있는 값을 1비트 증가
CJNE R2,#0A0H,XALOOP5;레지스터2의 값이 AAH와 같을 때까지 XALOOP5으로 이동
JMP XBLOOP5
XALOOP5 MOV FND+5,R2 ;레지스터2의 값을 FND+1에 표시
CALL LedOnTime1 ;LedOnTime1 호출
CJNE R2,#0A0H,XLOOP6 ;레지스터2의 값이 AAH와 같을 때까지 XLOOP6으로 이동
XBLOOP5 JMP main
;ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
; TIMER를 이용한 LED 지연 (TIMER MODE 0) (0.1s)
;ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
LedOnTime1 MOV TMOD,#00H ;타이머/카운터 0을 동작모드 0으로 설정
CLR TR0 ;타이머/카운터 정지시킴
CLR TF0 ;타이머 오브플로우 플래그 0으로 설정
MOV TL0,#00H ;TL0 초기값 설정
MOV TH0,#TmrOVal ;TH0 초기값 설정
SETB ET0 ;타이머/카운터 0 인터럽트 설정
SETB EA ;인터럽트 동작 시작
SETB TR0 ;타이머 0 동작시작
JNB TF0,$ ;오브플로우를 기다림
CLR TF0 ;오브플로우가 발생함
MOV R0,#01H
OnLoop1 JNB TF0,$ ;오브플로우를 기다림
CLR TF0 ;오브플로우가 발생함
DJNZ R0,OnLoop1 ;완료될 때 까지 원하는 주소로 이동
RET
;ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
; TIMER/COUNTER 0의 인터럽트 처리 프로그램
;ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
;레지스터 뱅크 1의 R2를 7-세그먼트 표시 포인터로 사용
;
TmrOIntSrc MOV TH0,#TmrOVal
PUSH ACC
PUSH PSW
SETB RS0
MOV A,#FND
ADD A,R2
MOV R0,A
MOV FndPort,@R0
INC R2
CJNE R2,#FndDigit,ExtTmrOInt
MOV R2,#00H
ExtTmrOInt POP PSW
POP ACC
RETI
;
END
MOV FND+4,R3 ;레지스터5의 값을 FND+3에 표시
DEC R2 ;레지스터2에 들어있는 값을 1비트 증가
CJNE R2,#0A0H,XALOOP5;레지스터2의 값이 AAH와 같을 때까지 XALOOP5으로 이동
JMP XBLOOP5
XALOOP5 MOV FND+5,R2 ;레지스터2의 값을 FND+1에 표시
CALL LedOnTime1 ;LedOnTime1 호출
CJNE R2,#0A0H,XLOOP6 ;레지스터2의 값이 AAH와 같을 때까지 XLOOP6으로 이동
XBLOOP5 JMP main
;ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
; TIMER를 이용한 LED 지연 (TIMER MODE 0) (0.1s)
;ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
LedOnTime1 MOV TMOD,#00H ;타이머/카운터 0을 동작모드 0으로 설정
CLR TR0 ;타이머/카운터 정지시킴
CLR TF0 ;타이머 오브플로우 플래그 0으로 설정
MOV TL0,#00H ;TL0 초기값 설정
MOV TH0,#TmrOVal ;TH0 초기값 설정
SETB ET0 ;타이머/카운터 0 인터럽트 설정
SETB EA ;인터럽트 동작 시작
SETB TR0 ;타이머 0 동작시작
JNB TF0,$ ;오브플로우를 기다림
CLR TF0 ;오브플로우가 발생함
MOV R0,#01H
OnLoop1 JNB TF0,$ ;오브플로우를 기다림
CLR TF0 ;오브플로우가 발생함
DJNZ R0,OnLoop1 ;완료될 때 까지 원하는 주소로 이동
RET
;ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
; TIMER/COUNTER 0의 인터럽트 처리 프로그램
;ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
;레지스터 뱅크 1의 R2를 7-세그먼트 표시 포인터로 사용
;
TmrOIntSrc MOV TH0,#TmrOVal
PUSH ACC
PUSH PSW
SETB RS0
MOV A,#FND
ADD A,R2
MOV R0,A
MOV FndPort,@R0
INC R2
CJNE R2,#FndDigit,ExtTmrOInt
MOV R2,#00H
ExtTmrOInt POP PSW
POP ACC
RETI
;
END