//=====main.c===================
#include <avr/io.h>
#define CPU_CLOCK 16000000
#define BAUD_RATE 19200
#define BAUD_RATE_L (CPU_CLOCK/(16l*BAUD_RATE))-1
#define BAUD_RATE_H ((CPU_CLOCK/(16l*BAUD_RATE))-1)>>8
//통신속도의 결과 값을 입력하기 위해 상하위 비트로 구분
//16l(소문자L)은 16+L이며,연산시 값이 너무 커져 overflow가 발생하므로 32비트 연산을
//위해 16에 Long을 의미하는 l을 붙인다.
unsigned char USART_Receive(void)
{
while(!(UCSR1A&(1<<RXC)));
return UDR1;
}
unsigned char USART_Transmit(ch)
{
while(!(UCSR1A&(1<<TXC)));
return UDR1;
}
int main(void)
{
DDRF=0xff;
PORTF=0xff;
PINC=0x00;
UBRR1L=(unsigned char)BAUD_RATE_L; //BAUD RATE 설정
UBRR1H=(unsigned char)BAUD_RATE_H;
//no parity,1 stop bit,8bit 설정
UCSR1C=(0<<UPM1)|(0<<UPM0)|(0<<USBS)|(1<<UCSZ1)|(1<<UCSZ0);
//rx/tx interrupt 설정,8bit 설정
UCSR1B=(1<<TXEN)|(1<<RXEN)|(0<<UCSZ2);
/*
for(i=0;i<sizeof(buf);i++) //문자단위로 전체 문자열 전송
{
uart_send_byte(buf[i]); //문자 1개를 직렬포트로 전송
}
*/
while(1)
{
unsigned char ch=USART_Receive();
PORTF=ch^0xff;
USART_Transmit(ch);
asm("NOP");
}
return 1;
}
//============== c++ ======================
#include <stdio.h>
#include <windows.h>
int main(void)
{
char szPort[15];
wsprintf(szPort,"COM%d",1);
HANDLE m_hComm=NULL;
m_hComm=CreateFile(szPort,
GENERIC_READ|GENERIC_WRITE,
0,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,NULL);
if(m_hComm==INVALID_HANDLE_VALUE)
{
printf("(!) Failed to create a Comm Device file");
return FALSE;
}
DCB dcb;
dcb.DCBlength=sizeof(DCB);
GetCommState(m_hComm,&dcb);
dcb.BaudRate=19200;
dcb.ByteSize=8;
dcb.Parity=0;
dcb.StopBits=0;
SetCommState(m_hComm,&dcb);
OVERLAPPED osRead;
OVERLAPPED osWrite;
osWrite.Offset=0;
osWrite.OffsetHigh=0;
osWrite.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
char buf;
while(1)
{
printf("input:");
scanf("%d",&buf);
WriteFile(m_hComm,&buf,sizeof(buf),NULL,&osWrite);
Sleep(1000);
fflush(stdin);
ReadFile(m_hComm,&buf,sizeof(buf),NULL,&osRead);
printf("output:%d\n",buf);
}
CloseHandle(m_hComm);
return 0;
}
'Atmega 128' 카테고리의 다른 글
스탑와치 (0) | 2010.04.20 |
---|---|
타이머 (0) | 2010.04.19 |
StopWatch 실습 (0) | 2010.04.15 |
교육 자료(1장~5장) (0) | 2010.04.15 |