본문내용
)
movFND+2,#50H;백의 자리 7-세그먼트 값 초기화(0)
movFND+3,#70H;천의 자리 7-세그먼트 값 초기화(0)
movFND+4,#90H;만의 자리 7-세그먼트 값 초기화(0)
movFND+5,#0B0H;십만 자리 7-세그먼트 값 초기화(0)
cjne A,#01H,MainLoop1
jmp Result_PLUS
;ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
;덧셈 결과 FND에 Display
;ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
Result_PLUS clr A ;A 초기화
mov B,#10 ;레지스터B에 10을 저장한다.
mov A,F2nd ;십의 자리를 A에 저장한다.
mul AB ;A와 레지스터B를 곱한다.
add A,F1st ;그 값에 일의 자리를 더한다.
mov R5,A
clr A ;A 초기화
mov B,#10 ;레지스터B에 10을 저장한다.
mov A,F5th ;십의 자리를 A에 저장한다.
mul AB ;A와 레지스터B를 곱한다.
add A,F4th ;그 값에 일의 자리를 더한다.
add A,R5 ;각각 구해진 값을 더한다.
mov B,#100 ;레지스터B에 100을 저장한다.
div AB ;A / B 를 연산한다.
add A,#50H
mov FND+2,A ;백의 자리를 표시한다.
clr A ;A 초기화
mov A,B
mov B,#10
div AB ;A / B 를 연산한다.
add A,#30H
mov FND+1,A ;십의 자리를 표시한다.
clr A ;A 초기화
mov A,B
add A,#10H
mov FND,A ;일의 자리를 표시한다.
clr A ;A 초기화
jmp MainLoop1
;ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
;타이머/카운터 0의 인터럼트 처리 프로그램
;레지스터 뱅크 1의 R1를 7-세그먼트 표시 포인터로 사용
;ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
Tmr0IntSrcmovTH0,#Tmr0Val;TH0 초기값 재설정
pushACC;어큐뮬레이터 저장
pushPSW;PSW 저장
setbRS0;레지스터 뱅크 1로 설정
movA,#FND;7-세그먼트 데이터 시작주소->ACC
addA,R1;시작주소+포인터->ACC
movR0,A;R0<-표시할 7-세그먼트 데이터 주소
movFndPort,@R0;((R0))->7-세그먼트 포트
incR1;7-세그먼트 포인터 업데이트
cjneR1,#FndDigit,ExtTmr0Int
movR1,#00H;표시 포인터 초기화
ExtTmr0IntdecDelayReg;지연시간 레지스터 업데이트
popPSW;PSW 복원
popACC;어큐뮬레이터 복원
reti;메인 프로그램으로 복위
;----------------------------------------------------------------------------------------------
END
movFND+2,#50H;백의 자리 7-세그먼트 값 초기화(0)
movFND+3,#70H;천의 자리 7-세그먼트 값 초기화(0)
movFND+4,#90H;만의 자리 7-세그먼트 값 초기화(0)
movFND+5,#0B0H;십만 자리 7-세그먼트 값 초기화(0)
cjne A,#01H,MainLoop1
jmp Result_PLUS
;ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
;덧셈 결과 FND에 Display
;ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
Result_PLUS clr A ;A 초기화
mov B,#10 ;레지스터B에 10을 저장한다.
mov A,F2nd ;십의 자리를 A에 저장한다.
mul AB ;A와 레지스터B를 곱한다.
add A,F1st ;그 값에 일의 자리를 더한다.
mov R5,A
clr A ;A 초기화
mov B,#10 ;레지스터B에 10을 저장한다.
mov A,F5th ;십의 자리를 A에 저장한다.
mul AB ;A와 레지스터B를 곱한다.
add A,F4th ;그 값에 일의 자리를 더한다.
add A,R5 ;각각 구해진 값을 더한다.
mov B,#100 ;레지스터B에 100을 저장한다.
div AB ;A / B 를 연산한다.
add A,#50H
mov FND+2,A ;백의 자리를 표시한다.
clr A ;A 초기화
mov A,B
mov B,#10
div AB ;A / B 를 연산한다.
add A,#30H
mov FND+1,A ;십의 자리를 표시한다.
clr A ;A 초기화
mov A,B
add A,#10H
mov FND,A ;일의 자리를 표시한다.
clr A ;A 초기화
jmp MainLoop1
;ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
;타이머/카운터 0의 인터럼트 처리 프로그램
;레지스터 뱅크 1의 R1를 7-세그먼트 표시 포인터로 사용
;ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
Tmr0IntSrcmovTH0,#Tmr0Val;TH0 초기값 재설정
pushACC;어큐뮬레이터 저장
pushPSW;PSW 저장
setbRS0;레지스터 뱅크 1로 설정
movA,#FND;7-세그먼트 데이터 시작주소->ACC
addA,R1;시작주소+포인터->ACC
movR0,A;R0<-표시할 7-세그먼트 데이터 주소
movFndPort,@R0;((R0))->7-세그먼트 포트
incR1;7-세그먼트 포인터 업데이트
cjneR1,#FndDigit,ExtTmr0Int
movR1,#00H;표시 포인터 초기화
ExtTmr0IntdecDelayReg;지연시간 레지스터 업데이트
popPSW;PSW 복원
popACC;어큐뮬레이터 복원
reti;메인 프로그램으로 복위
;----------------------------------------------------------------------------------------------
END