RS-232C 직렬통신 프로그램
본 자료는 9페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
해당 자료는 9페이지 까지만 미리보기를 제공합니다.
9페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

RS-232C 직렬통신 프로그램에 대한 보고서 자료입니다.

본문내용

==============
;-------------------------------------------------------------------
;Transmit string by USART0
;-------------------------------------------------------------------
TX0_STRING:
MOVWORDH,ZH; ZH의 값을 WORDH에 저장
MOVWORDL,ZL; ZL의 값을 WORDL에 저장
; 문자열 주소를 읽어 옴
POPZH; STACK에 저장된 값을 ZH에 저장
POPZL; STACK에 저장된 값을 ZL에 저장
; 즉, PC(문자열 시작주소)를 Z에 저장
LSLZL; C <- (ZL)7, (ZL)N+1 <- (ZL)N, (ZL)0 <- 0
ROLZH; C <- (ZH)7, (ZH)N+1 <- (ZH)N, (ZH)0 <- C
; 즉, ZH:ZL로 봤을 때 비트를 왼쪽으로 한칸씩 shift 되는데
; Carry에는 MSB, LSB에는 0을 넣음(∵LPM명령수행을위해)
TX0_STR1:LPMTX0_BUFFER,Z+ ; Program memory 에서 Z의 주소가 가르키는 값
; 단, (ZL)0 = 0 이라면 0x0000 ~ 0x7FFF 주소의
; 7~0번 비트의 값이 TX0_BUFFER의 값이 되고
; (ZL)0 = 1 이라면 0x0000 ~ 0x7FFF 주소의
; 15~8번 비트의 값이 LCD_BUFFER의 값이 됨
; TX0_BUFFER에 값이 저장이 되면 Z값이 1증가 ; 즉, 문자의 아스키코드값을 읽어서 TX0_BUFFER에 저장
MOVAL,TX0_BUFFER; AL에 TX0_BUFFER값 저장
CPIAL,0; TX0_BUFFER의 값과 0 의 차가 0 이면 Z=1,
; 0 이 아니면 Z=0 이 됨
; 즉, 문자가 끝났는지 검사하기 위해서
BREQTX0_STR2; 만약 Z=1 이면 \"TX0_STR2\" subroutine로 가고
; 즉, 문자가 끝났으면 \"TX0_STR2\" subroutine로 감
CALLTX0_CHAR; Z=0 이면 현재 PC를 STACK에 저장해놓고
; “TX0_CHAR” subroutine로 감
; 즉, 문자가 끝나지 않았으면 “TX0_CHAR” subroutine로 감
RJMPTX0_STR1; “TX0_STR1” subroutine로 감
TX0_STR2:SBRCZL,0; 만약 (ZL)0=0 이라면 PC <- PC+2
; 즉 \"LPM TX0_BUFFER,Z+\" 라인 skip
LPMTX0_BUFFER,Z+; (ZL)0 = 1 이라면 0x0000 ~ 0x7FFF 주소의
; 15~8번 비트의 값이 TX0_BUFFER의 값이 됨
; TX0_BUFFER에 값이 저장이 되면 Z값이 1증가
LSRZH; 0 -> (ZH)7, (ZH)N+1 -> (ZH)N, (ZH)0 -> C
RORZL; C -> (ZL)7, (ZL)N+1 -> (ZL)N, (ZL)0 -> C
; ZH:ZL로 봤을 때 비트가 오른쪽으로 한칸씩 shift 되는데
; MSB에는 0을 넣고, Carry에는 LSB를 넣음
PUSHZL; ZL의 값을 STACK에 저장
PUSHZH; ZH의 값을 STACK에 저장
; 즉, 새로운 복귀주소를 STACK에 저장
MOVZH,WORDH; WORDH의 값을 ZH에 저장
MOVZL,WORDL; WORDL의 값을 ZL에 저장
RET; STACK에 저장된 값이 현재의 PC가 됨
;-------------------------------------------------------------------
;Transmit a Character(TX0_BUFFER) by USART0
;-------------------------------------------------------------------
TX0_CHAR:SBIS UCSR0A,UDRE0 ; UCSR0A(UDRE0) = 1이라면(송신 데이터를 받을
;준비가 되어 있다면) “RJMP TX0_CHAR”라인 Skip
RJMPTX0_CHAR ; UCSR0A(UDRE0) = 0이라면 “TX0_CHAR\" subroutine로 감
OUTUDR0,TX0_BUFFER; UDR0에 TX0_BUFFER 값 저장
RET; STACK에 저장된 값이 현재의 PC가 됨
;-------------------------------------------------------------------
;Receive a Character(RX0_BUFFER) by USART0
;-------------------------------------------------------------------
RX0_CHAR:SBIS UCSR0A,RXC0; UCSR0A(RXC0) = 1이라면(송신 데이터를 받을
;준비가 되어 있다면) “RJMP RX0_CHAR” 라인 Skip
RJMPRX0_CHAR; UCSR0A(RXC0) = 0이라면 “RX0_CHAR\" ; subroutine로 감
INRX0_BUFFER,UDR0; RX0_BUFFER에 UDR0값 저장
RET; STACK에 저장된 값이 현재의 PC가 됨
;-------------------------------------------------------------------
;Interrupt Service Routine of USART0
;-------------------------------------------------------------------
USART0RX:PUSHAL; AL값을 STACK에 저장
INAL,SREG; SREG의 값을 AL에 저장 (상태레지스터 저장)
PUSHAL; AL값을 STACK에 저장
INLCD_BUFFER,UDR0; LCD_BUFFER에 UDR0값 저장
CALLLCD_DATA; LCD_BUFFER의 값을 LCD에 출력
INCCL; CL <- CL + 1
CPICL,16; ( CL - 16 ), 이 값이 0이라면 Z=1,
; 0이 아니라면 Z=0 이 됨 (16문자가 들어 왔는지 확인)
BRNEUSART0RX1; 만약 Z=0 이라면 “USART0RX1” subroutine로 감
(16 문자가 다 표시 안

키워드

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