학습목표    1

학습주제    1

예습내용    1

실습방법    1

        1

AVR PC 통신 (출력제어)

학습목표

PC에서 원거리 보드의 출력을 제어한다.

학습주제

RS232 문자 “0” (0x30) 전송되면 C0 포트로 1 출력하고 그외의 문자가 전송되면 0 출력한다.

PC Install Program (과제)

예습내용

RS232 의한 문자전송

실습방법

   

다음은 AVR소스 프로그램이다. PC 프로그램은 2주차 프로그램을 그대로 사용하면 된다.

 

보기1  AVR 프로그램

 

 

#include <mega128.h>  

#include <delay.h>

#include <stdio.h>

 

char rxd;

 

// USART0 Receiver interrupt service routine

interrupt [USART0_RXC] void uart0_rx_isr(void)

{

   // 전송전 문자를 받는다.

   rxd=getchar();

      

   // 문자"0" 전송되면 C0 1 출력 그렇지 않으면 0 출력

   if(rxd==0x30)

      PORTC=0x01;

   else

      PORTC=0x00;  

 }

 

// Standard Input/Output functions

#include <stdio.h>

 

void main(void)

{

// Port C initialization

// Func0=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=Out Func6=Out Func7=Out

// State0=0 State1=0 State2=0 State3=0 State4=0 State5=0 State6=0 State7=0

PORTC=0x00;

DDRC=0xFF;

 

// USART0 initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART0 Receiver: On

// USART0 Transmitter: On

// USART0 Mode: Asynchronous

// USART0 Baud rate: 9600

UCSR0A=0x00;

UCSR0B=0xD8;

UCSR0C=0x06;

UBRR0H=0x00;

UBRR0L=0x67;

 

// Global enable interrupts

#asm("sei") 

 

while (1)

      {

      // Place your code here

 

      };

}

 

처음

   

과제1

문자”0”=C0 문자”1”=C1 문자”2”=C2 문자”3”=C3 문자”4”=C4 문자”5”=C5 따라 출력을 제어하시오

 

힌트 여기에 문자 4,5 추가 해야 한다.

if(rxd==0x30)

      PORTC=0x01; 

   else if(rxd==0x31)

      PORTC=0x02;

   else if(rxd==0x32)

      PORTC=0x04;

   else if(rxd==0x33)

      PORTC=0x08;

   else

      PORTC=0x00;

 

과제2

오른쪽 그림에서 PC에서 노브에 따라 과제1 문자를 전송해 출력 보드를 제어 하시오

 

[PC프로그램 내려받기]

 

보기2

노브의 값이 변할 그값을 읽어서 해당 문자를 AVR 통신 전송하는 함수

 

 

void CRs232Dlg::OnPointerValueChangedCwknob1(long Pointer, VARIANT FAR* Value)

{

              // TODO: Add your control notification handler code here

              CString strTemp;

 

              if(m_nOut.Value==0)

                             strTemp.Format("%c",0x30);

              else if(m_nOut.Value==1)

                             strTemp.Format("%c",0x31);

              else if(m_nOut.Value==2)

                             strTemp.Format("%c",0x32);

              else if(m_nOut.Value==3)

                             strTemp.Format("%c",0x33);

              else

                             strTemp.Format("%c",0x29);

              m_ComuPort.WriteComm((unsigned char*)(LPCTSTR)strTemp,strTemp.GetLength());

}