텍스트형 LCD 모듈 응용 프로그램
본 자료는 7페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
해당 자료는 7페이지 까지만 미리보기를 제공합니다.
7페이지 이후부터 다운로드 후 확인할 수 있습니다.

목차

없음

본문내용

HOME2 ” label로 간다.
CALLLCD_STRING ; “ LCD_STRING ” label로 간다.
.db" VR1 = 0.0[V] ",0,0 ; " VR1 = 0.0[V] " 출력
CALLD1SEC ; “D1SEC” 라벨로 간다.(1s 딜레이 됨)
LDIAL,0b00000011 ; AL에 0b00000011을 저장
; select ADC3 with external Aref
OUTADMUX,AL ; ADMUX에 AL값 저장
CALLD200US ; “D200US”라벨 로간다.(200us시간지연)
READ_AD:LDICL,16 ; CL에 16 저장(read ADC by 16 times)
CLRBH ;BH를 0으로clear
CLRBL ;BL을 0으로 clear
READ_A1:LDIAL,0b11000111 ; AL에 0b11000111을 저장
; ADC start with 125kHz
OUTADCSRA,AL ; ADCSRA에 AL에 저장
NOP ; no operation(연산하지 않는다.)
READ_A2:SBISADCSRA,ADIF;만약 ADCSRA(ADIF)값이 1이면 PC에 2나 3을 더한다. ; conversion complete ?
JMPREAD_A2 ; “READ_A2”라벨로 넘어간다.
INAL,ADCL ; ADCL를 AL으로 넣는다.
; ADCL must be read first, then ADCH
INAH,ADCH ; ADCH를 AH에 넣는다.
ADDBL,AL ; BL과 AL을 더하여 BL에 넣는다.(add data 16 times)
ADCBH,AH ;BH,AH,캐리를 더하여 BH에 넣는다.
CALLD1MS ; “D1MS”라벨로 간다.(1ms 시간지연)
DECCL ; CL에 CL-1의 값을 넣는다.
BRNEREAD_A1 ; 만약 Z=0 이라면 “READ_A1” label로 감
LSRBH ; BH(n+1)을 BH(n)에 넣고 BH(7)에 0을 넣는다.
(divide sum by 16)
RORBL ; 캐리어를 BL(7)에 넣고 BH(n)에 BH(n+1)을 넣고, BH(0)을 캐리어 비트에 저장한다.
LSRBH ; BH(n+1)을 BH(n)에 넣고 BH(7)에 0을 넣는다.
RORBL ; 캐리어를 BL(7)에 넣고 BH(n)에 BH(n+1)을 넣고, BH(0)을 캐리어 비트에 저장한다.
LSRBH ; BH(n+1)을 BH(n)에 넣고 BH(7)에 0을 넣는다.
RORBL ; 캐리어를 BL(7)에 넣고 BH(n)에 BH(n+1)을 넣고, BH(0)을 캐리어 비트에 저장한다.
LSRBH ; BH(n+1)을 BH(n)에 넣고 BH(7)에 0을 넣는다.
RORBL ; 캐리어를 BL(7)에 넣고 BH(n)에 BH(n+1)을 넣고, BH(0)을 캐리어 비트에 저장한다.
LDILCD_BUFFER,0xC8 ; LCD_BUFFER에 0xC8를 저장한다.
; display VR1 in voltage(X.X)
CALLLCD_COMMAND ; “LCD_COMMAND” 라벨로 이동한다.
LDIAH,high(50) ; AH(=r17) 에 0x10 가 저장( Volt = ADC3*5/1024)
LDIAL,low(50) ; AL(=r16) 에 0xFF가 저장
CALLMUL16 ; “MUL16”라벨로 이동한다.
LDIDH,high(1024) ; AH(=r17) 에 0x10 가 저장
LDIDL,low(1024) ; AL(=r16) 에 0xFF가 저장
CALLDIV16 ; “DIV16” 라벨로 이동한다.
LDIBL,10 ; BL에 10을 저장한다.(calculate X.X)
CALLDIV8 ; “DIV8” 라벨로 이동한다.
MOVLCD_BUFFER,AL ; LCD_BUFFER에 AL를 저장한다.
ORILCD_BUFFER,'0' ;LCD_BUFFER와 0을 OR하여 LCD_BUFFER에 저장한다.
CALLLCD_DATA ; “LCD_DATA” 라벨로 이동한다.
LDILCD_BUFFER,'.' ; LCD_BUFFER에 ‘.’을 저장한다.
CALLLCD_DATA ; “LCD_DATA” 라벨로 이동한다.
MOVLCD_BUFFER,AH ; LCD_BUFFER에 AH를 저장한다.
ORILCD_BUFFER,'0' ; LCD_BUFFER와 0을 OR하여 LCD_BUFFER에 저장한다.
CALLLCD_DATA ; “LCD_DATA” 라벨로 이동한다.
CALLD200MS ; “D200MS”라벨로 이동한다.(200ms시간지연)
CALLD100MS ; “D100MS”라벨로 이동한다.(100ms시간지연)
JMPREAD_AD ; “READ_AD” 라벨로 이동한다.
;===================================================================
;Include User Subroutine File
;====================================================================.include "OK128SUB.INC"; include OK-128 subroutine file
->A/D 변환 결과의 0x000~0x3FF(0~1023)는 0.0~5.0V의 전압에 대응한다. 따라서, A/D 컨버터로 읽은 값 x가 얼마의 전압에 대응하는지를 계산하려면 비례식으로부터 얻을 수 있다. 그러나, 이 결과는 일반적으로 0.0~5.0 범위의 부동 소수점으로 나오기 때문에 이를 소수점아래의 첫째 자리까지 표시하려면 그 결과에 10을 곱하여 0~50으로 만들고 이를 10으로 나눈 몫을 정수부로 하고 나머지를 소수부로 처리하면 된다. 물론, 소수점 아래의 둘째 자리까지 표시하고 싶다면 위의 식에 100을 곱하여 0~500으로 만들면 된다.
이와 같이 실수에 10의 누승을 곱하여 소수부를 정수화시키면 모든 것을 정수 연산으로 처리할 수 있으므로 편리하다. 위의 예제 프로그램에서는 x에 5를 곱하는 과정에서 50을 곱하였으므로 10을 더 곱해 정수화 시킨 것으로 된다. 또한, A/D 변환값을 16번 읽어서 평균을 취한 것은 A/D 컨버터에서 아날로그 입력신호가 전원의 불안정이나 잡음에 매우 민감하여 변환 결과값이 흔들리는 것을 방지하기 위함이다.

키워드

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