학습목표    1

학습주제    1

예습내용    1

실습방법    1

        1

AVR PC 통신 (출력제어)

학습목표

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

학습주제

출력포트 하나마다 스위치를 위치시켜 개별적으로 제어한다. 하위4개의 포트만을 제어한다.

 

예습내용

RS232 의한 문자전송

실습방법

   

C1 C3 On으로 했을 때의 예제이다. PC에서 0x0a 전송하고 이값을 AVR C포트로 그대로 출력한다.

포트번호

C3

C2

C1

C0

전송값

스위치상태

On

Off

On

Off

 

출력값

1

0

1

0

0x0a

 

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();

      

   // C포트로 출력을 보낸다.

   PORTC=rxd;  

 }

 

// 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

 

      };

}

 

2. PC 프로그램

전역변수로 char cOut 정의하고 하의 4개의 비트 단위로 cOut값을 결정하여 AVR 전송한다. 아래는 해당 비트를 비트 and 연산으로 0으로 만들고 스위치가 On 해당 비트를 1 만드는 서브 프로그램이다. 이를 스위치의 값이 변할 마다 4개의 스위치 값을 출력하는 PC프로그램이다.

소스프로그램 내려받기

void CRs232Dlg::CheckSwitch()

{

              CString strTemp;

              char cTemp=0x0e;

             

              cTemp=0x0e;

              cOut &= cTemp;

              if(m_nPort0.Value == 1)

                             cOut |= 0x01;

 

              cTemp=0x0d;

              cOut &= cTemp;

              if(m_nPort1.Value == 1)

                             cOut |= 0x02;

 

              cTemp=0x0b;

              cOut &= cTemp;

              if(m_nPort2.Value == 1)

                             cOut |= 0x04;

 

              cTemp=0x07;

              cOut &= cTemp;

              if(m_nPort3.Value == 1)

                             cOut |= 0x08;

 

              strTemp.Format("%c",cOut);

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

 

}

 

처음