ÇнÀ¸ñÇ¥    1

ÇнÀÁÖÁ¦    1

¿¹½À³»¿ë    1

½Ç½À¹æ¹ý    1

°ú    Á¦    6

Ä«¿îÅÍÁ¦ÀÛ

ÇнÀ¸ñÇ¥

Á¦Ç°ÀÌ »ý»êµÇ´Â °³¼ö¸¦ Æ÷Åä¼¾¼­·Î ¼¼¾î¼­ Åë½Å(RS232)À» ÅëÇÏ¿© Ç¥½ÃÇÑ´Ù.

ÇнÀÁÖÁ¦

1.       Æ÷Åä¼¾¼­·Î AVRÀÇ ¿ÜºÎÀÎÅÍ·´Æ®¿¡ ¿¬°áÇÏ¿© »ó½Â¿¡Áö ¶§ Ä«¿îÆ®ÇÏ´Â ½Ã½ºÅÛÀ» ±¸¼ºÇÑ´Ù.

2.       7¼¼±×¸ÕÆ®·Î ÀÔ·ÂµÈ ¼öÀÚ¸¦ Ç¥½ÃÇÏ´Â ½Ã½ºÅÛÀ» ¸¸µç´Ù.

3.       RS232Åë½ÅÀ¸·Î µÎ ½Ã½ºÅÛÀ» ¿¬°áÇÑ´Ù.

¿¹½À³»¿ë

Æ÷Åä¼¾¼­ ¿ÀÅä´Ð½º BM3M

7¼¼±×¸ÕÆ® ÄÄÆÄÀÏ»ç

½Ç½À¹æ¹ý

¸ñ    Â÷

Ä«¿îÅÍ º»Ã¼ ȸ·Îµµ ÀÌ´Ù. LCD´Â ¸®¾ó½Ã½º ȸ»ç Á¦Ç°À» »ç¿ëÇÑ´Ù. ±×¸®°í ±ÙÁ¢¼¾¼­´Â 24V¸¦ »ç¿ëÇϰí 12V»ç¿ë½Ã¿¡´Â R3,R5ÀÇ Å©±â¸¦ 1/2·Î ÀÛ°Ô ÇÏ¸é µÈ´Ù.

1.       Ä«¿îÅÍ º¸µå Á¦ÀÛ

¾Æ·¡ ±×¸²°ú °°ÀÌ º¸µå¸¦ Á¦ÀÛÇÑ´Ù. ÀÌ ¶§ LCD¸¦ ¡°A¡±Ã¤³Î¿¡ ¿¬°áÇÏ¿© Á¦ÀÛÇÑ´Ù.

2. Ä«¿îÅÍ ÇÁ·Î±×·¥

File->New->Project ¸¦ ¼±ÅÂÇÑ´Ù.

 

 

Ä«¿îÆ® ÇÁ·Î±×·¥

Åë½ÅÀÇ ½ÃÀÛÀº 0x02¸¦ º¸³»°í Ä«¿îÆ® µÈ ¼öÀÚ´Â 4°³ÀÇ ¹®ÀÚ·Î ¹Ù²Ù¾î¼­ Àü¼ÛÇÏ¿© 4°³ÀÇ 7¼¼±×¸ÕÆ®°¡ µ¿ÀÛÇϵµ·Ï ÇÑ´Ù.

#include <mega128.h>

 

// Alphanumeric LCD Module functions

#asm

   .equ __lcd_port=0x1B

#endasm

#include <lcd.h>

 

void SendData();

 

char sbuf[20];

int count0=0;

 

// External Interrupt 0 service routine

interrupt [EXT_INT0] void ext_int0_isr(void)

{

              count0++;     // ÀÌÅÍ·´Æ®°¡ µÉ ¶§¸¶´Ù 1¾¿ Áõ°¡

              SendData();

}

 

// Standard Input/Output functions

#include <stdio.h>

 

// Declare your global variables here

 

void main(void)

{

// Declare your local variables here

 

// Input/Output Ports initialization

// Port A initialization

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

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

PORTA=0x00;

DDRA=0x00;

 

// Port B initialization

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

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

PORTB=0x00;

DDRB=0x00;

 

// Port C initialization

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

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

PORTC=0x00;

DDRC=0x00;

 

// Port D initialization

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

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

PORTD=0x00;

DDRD=0x00;

 

// Port E initialization

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

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

PORTE=0x00;

DDRE=0x00;

 

// Port F initialization

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

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

PORTF=0x00;

DDRF=0x00;

 

// Port G initialization

// Func0=In Func1=In Func2=In Func3=In Func4=In

// State0=T State1=T State2=T State3=T State4=T

PORTG=0x00;

DDRG=0x00;

 

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

// Mode: Normal top=FFh

// OC0 output: Disconnected

ASSR=0x00;

TCCR0=0x00;

TCNT0=0x00;

OCR0=0x00;

 

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer 1 Stopped

// Mode: Normal top=FFFFh

// OC1A output: Discon.

// OC1B output: Discon.

// OC1C output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

OCR1CH=0x00;

OCR1CL=0x00;

 

// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer 2 Stopped

// Mode: Normal top=FFh

// OC2 output: Disconnected

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

 

// Timer/Counter 3 initialization

// Clock source: System Clock

// Clock value: Timer 3 Stopped

// Mode: Normal top=FFFFh

// OC3A output: Discon.

// OC3B output: Discon.

// OC3C output: Discon.

TCCR3A=0x00;

TCCR3B=0x00;

TCNT3H=0x00;

TCNT3L=0x00;

OCR3AH=0x00;

OCR3AL=0x00;

OCR3BH=0x00;

OCR3BL=0x00;

OCR3CH=0x00;

OCR3CL=0x00;

 

// External Interrupt(s) initialization

// INT0: On

// INT0 Mode: Rising Edge

// INT1: Off

// INT2: Off

// INT3: Off

// INT4: Off

// INT5: Off

// INT6: Off

// INT7: Off

EICRA=0x03;

EICRB=0x00;

EIMSK=0x01;

EIFR=0x01;

 

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x00;

ETIMSK=0x00;

 

// 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=0x18;

UCSR0C=0x06;

UBRR0H=0x00;

UBRR0L=0x67;

 

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

// Analog Comparator Output: Off

ACSR=0x80;

SFIOR=0x00;

 

// LCD module initialization

lcd_init(16);

 

// Global enable interrupts

#asm("sei")

 

// ½ÃÀÛÀ» LCD¿¡ Ç¥½Ã

sprintf(sbuf,"START");

lcd_gotoxy(0,0);      

lcd_puts(sbuf);

 

while (1)

      {

      // Place your code here

 

      };

}

 

void SendData()

{

              char string[12]="";

              sprintf(sbuf,"Count:%d",count0);

             lcd_gotoxy(0,0);

             lcd_puts(sbuf);

              

             sprintf(string,"%c%4d",0x02,count0);

             puts(string);

}

 

3. µð½ºÇ÷¹ÀÌ º¸µåÀÇ Á¦ÀÛ

¾Æ·¡ ±×¸²Àº ¼öÀÚÇ¥½Ã º¸µåÀÇ È¸·ÎµµÀÌ´Ù.

 

4. ¼öÀÚÇ¥½Ã ÇÁ·Î±×·¥

A,B,C,DÆ÷Æ®¿Í FÀÇ 0,1,2,3 Æ÷Æ®¸¦ Ãâ·ÂÀ¸·Î ÇÑ´Ù.

RS232¿Í RX ÀÎÅÍ·´Æ® ÇÔ¼ö¸¦ ¸¸µç´Ù.

 

 

¼öÀÚÇ¥½Ã ÇÁ·Î±×·¥

0x02ÀÇ ¹®ÀÚ°¡ ¿À¸é 4°³ÀÇ ¹®ÀÚ¸¦ ¹Þ¾Æ 4ÀÚ¸®ÀÇ 7¼¼±×¸ÕÆ®·Î Ç¥½ÃÇÑ´Ù.

0023°ú °°ÀÌ ¾Õ¿¡ 0ÀÌ ¾Õ¿¡ ¿À¸é À̴ ǥ½ÃÇÏÁö ¾Ê°Ô Çß´Ù.

#include <mega128.h>

#include <stdio.h>

#include <string.h>

#include <delay.h>

#include <stdlib.h>

 

#define RXB8 1

#define TXB8 0

#define UPE 2

#define OVR 3

#define FE 4

#define UDRE 5

#define RXC 7

 

#define FRAMING_ERROR (1<<FE)

#define PARITY_ERROR (1<<UPE)

#define DATA_OVERRUN (1<<OVR)

#define DATA_REGISTER_EMPTY (1<<UDRE)

#define RX_COMPLETE (1<<RXC)

 

void DispalyNumber();

 

// USART0 Receiver buffer

#define RX_BUFFER_SIZE0 8

char rx_buffer0[RX_BUFFER_SIZE0];

unsigned char rx_wr_index0,rx_rd_index0,rx_counter0;

// This flag is set on USART0 Receiver buffer overflow

bit rx_buffer_overflow0;   

 

char rmCount;

int i,j;

char string[4];

 

// USART0 Receiver interrupt service routine

#pragma savereg-

interrupt [USART0_RXC] void uart0_rx_isr(void)

{

char status,data;

#asm

    push r26

    push r27

    push r30

    push r31

    in   r26,sreg

    push r26

#endasm

status=UCSR0A;

data=UDR0;

 

if(data == 0x02) {//Àü¼Û½ÃÀÛ Ç¥½Ã

              rx_wr_index0 = 0;  

              rmCount = 0;

} 

 

if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)

   {

   rx_buffer0[rx_wr_index0]=data;

   if (++rx_wr_index0 == RX_BUFFER_SIZE0) rx_wr_index0=0;

   if (++rx_counter0 == RX_BUFFER_SIZE0)

      {

      rx_counter0=0;

      rx_buffer_overflow0=1;

      };

   };

#asm

    pop  r26

    out  sreg,r26

    pop  r31

    pop  r30

    pop  r27

    pop  r26

#endasm

 

if(rx_buffer0[0]==0x02 && rmCount==5) {

              //ÃʱâÈ­

              for(i=0;i<4;i++)

                             string[i]=0x00;

              j=0;

 

              for(i=0;i<4;i++)

                            if(rx_buffer0[i+1]!=0x20)

                                         string[j++]=rx_buffer0[i+1];

 

              DispalyNumber();

}

rmCount++;

}

#pragma savereg+

 

#ifndef _DEBUG_TERMINAL_IO_

// Get a character from the USART0 Receiver buffer

#define _ALTERNATE_GETCHAR_

#pragma used+

char getchar(void)

{

char data;

while (rx_counter0==0);

data=rx_buffer0[rx_rd_index0];

if (++rx_rd_index0 == RX_BUFFER_SIZE0) rx_rd_index0=0;

#asm("cli")

--rx_counter0;

#asm("sei")

return data;

}

#pragma used-

#endif

 

// Standard Input/Output functions

#include <stdio.h>

 

// Declare your global variables here

 

void main(void)

{

// Declare your local variables here

 

// Input/Output Ports initialization

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

PORTA=0x00;

DDRA=0xFF;

 

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

PORTB=0x00;

DDRB=0xFF;

 

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

 

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

PORTD=0x00;

DDRD=0xFF;

 

// Port E initialization

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

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

PORTE=0x00;

DDRE=0x00;

 

// Port F initialization

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

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

PORTF=0x00;

DDRF=0x0F;

 

// Port G initialization

// Func0=In Func1=In Func2=In Func3=In Func4=In

// State0=T State1=T State2=T State3=T State4=T

PORTG=0x00;

DDRG=0x00;

 

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

// Mode: Normal top=FFh

// OC0 output: Disconnected

ASSR=0x00;

TCCR0=0x00;

TCNT0=0x00;

OCR0=0x00;

 

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer 1 Stopped

// Mode: Normal top=FFFFh

// OC1A output: Discon.

// OC1B output: Discon.

// OC1C output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

OCR1CH=0x00;

OCR1CL=0x00;

 

// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer 2 Stopped

// Mode: Normal top=FFh

// OC2 output: Disconnected

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

 

// Timer/Counter 3 initialization

// Clock source: System Clock

// Clock value: Timer 3 Stopped

// Mode: Normal top=FFFFh

// OC3A output: Discon.

// OC3B output: Discon.

// OC3C output: Discon.

TCCR3A=0x00;

TCCR3B=0x00;

TCNT3H=0x00;

TCNT3L=0x00;

OCR3AH=0x00;

OCR3AL=0x00;

OCR3BH=0x00;

OCR3BL=0x00;

OCR3CH=0x00;

OCR3CL=0x00;

 

// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

// INT2: Off

// INT3: Off

// INT4: Off

// INT5: Off

// INT6: Off

// INT7: Off

EICRA=0x00;

EICRB=0x00;

EIMSK=0x00;

 

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x00;

ETIMSK=0x00;

 

// 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=0x98;

UCSR0C=0x06;

UBRR0H=0x00;

UBRR0L=0x67;

 

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

// Analog Comparator Output: Off

ACSR=0x80;

SFIOR=0x00;

 

// Global enable interrupts

#asm("sei")

 

PORTF=0x0f;

 

while (1)

      {

      // Place your code here

 

      };

}

 

void DispalyNumber()

{

                             //Æ÷Æ® ÃʱâÈ­

      PORTA=0;

      PORTB=0;

      PORTC=0;

      PORTD=0;

     

      PORTA.4=1;

      PORTA.5=1;

      PORTA.6=1;

      

      PORTB.4=1;

      PORTB.5=0;

      PORTB.6=1;

     

      PORTC.4=1;

      PORTC.5=0;

      PORTC.6=1;

     

      PORTD.4=1;

      PORTD.5=0;

      PORTD.6=1;

      

     

      j=strlen(string);

      i=0;  

      while(j>0) {

          switch(i) {

                        case 0 :

                                      PORTA=string[j-1];

                                      break;

                        case 1 :

                                      PORTB=string[j-1];

                                      PORTB.5=1;

                                      break;

                       case 2 :

                                      PORTC=string[j-1];

                                      PORTC.5=1;

                                      break;

                       case 3 :

                                      PORTD=string[j-1];

                                      PORTD.5=1;

                                     break;

          }

          j--;

          i++;

      }

 

}

 

óÀ½

°ú    Á¦