회원가입 ID/PW 찾기
AA

안녕하세요

컴퓨터 keyboard를 통해 led제어 를 usart통신으로하려합니다

그런데 하이퍼터미널까지는 했는데요

제어가 되지않습니다

그냥 불만 들어옵니다..

어떤 포트에는 불이 들어오지 않지만 어떤 포트에는 불이 들어옵니다

무엇이 잘못된건지몰라서 질문 올립니다

혹시 소스보시고 아시는분은 빨리 답변좀 해주세요ㅠ

 

 

 

 

 

#include <avr/io.h>
#include <avr/interrupt.h>
#include "d:/WinAVR-20100110/avr/include/avr/iom128.h"
#include <stdio.h>

void tx0Char(char message);
void tx1Char(char message);


//int putchar(char c);
//int getchar(void);
void port_init(void);
void uart0_init(void);
void uart1_init(void);
void init_devices(void);
void delay(int n);
static int Putchar(char c, FILE *stream);

static int Putchar(char c, FILE *stream)
{
 tx0Char(c);
    tx1Char(c);
 return 0;
     
}

/*
// printf 함수에서 사용할 putchar 에 UART0와 UART1으로
// 데이터를 보내도록 하였다.
int putchar(char c)
{
    tx0Char(c);
    tx1Char(c);
 return c;
}*/

// UART0 을 이용한 출력
void tx0Char(char message)
{
 while (((UCSR0A>>UDRE0)&0x01) == 0) ;  // UDRE, data register empty       
    UDR0 = message;
}

// UART1 을 이용한 출력
void tx1Char(char message)
{
 while (((UCSR1A>>UDRE1)&0x01) == 0) ;  // UDRE, data register empty       
    UDR1 = message;
}

void USART_Transmit(unsigned char data)
{
 /*wait for empty transmit buffer*/
 while(!(UCSR0A & (1<<UDRE)));

 /*put data into buffer, sends the data*/

 UDR0 = data;

}

unsigned char USART_Receive(void)
{
int toggle=1;

 char temp;
 int shift = 0;
 /*wait for data to be received*/

 while(!(UCSR0A & (1<<RXC)));

 /*Get and return received data from buffer*/
 temp = UDR0 & 0xff;

 return temp; 

}


void port_init(void)
{
 PORTA = 0x00;
 DDRA  = 0x83;//83
 PORTB = 0x00;
 DDRB  = 0x00;
 PORTC = 0x00; //m103 output only
 DDRC  = 0x00;
 PORTD = 0x00;
 DDRD  = 0x00;
 PORTE = 0x02;
 DDRE  = 0x00;
 PORTF = 0x00;
 DDRF  = 0xff;//ff
 PORTG = 0x00;
 DDRG  = 0x03;//03
}


//UART0 initialize
// desired baud rate: 9600
// actual: baud rate:9615 (0.2%)
// char size: 8 bit
// parity: Disabled
void uart0_init(void)
{
 UCSR0B = 0x00; //disable while setting baud rate
 UCSR0A = 0x00;
 UCSR0C = 0x06;
 UBRR0L = 0x67; //set baud rate lo
 UBRR0H = 0x00; //set baud rate hi
 UCSR0B = 0x18;
}

//UART1 initialize
// desired baud rate:9600
// actual baud rate:9615 (0.2%)
// char size: 8 bit
// parity: Disabled
void uart1_init(void)
{
 UCSR1B = 0x00; //disable while setting baud rate
 UCSR1A = 0x00;
 UCSR1C = 0x06;
// UBRR1L = 0x2F; //set baud rate lo 7.3728 MHz
// UBRR1L = 0x47; //set baud rate lo 11.0592 Mhz
 UBRR1L = 0x67; //set baud rate lo 16Mhz
 UBRR1H = 0x00; //set baud rate hi
 UCSR1B = 0x18;
}

//call this routine to initialize all peripherals
void init_devices(void)
{
 //stop errant interrupts until set up
 cli(); //disable all interrupts
 XDIV  = 0x00; //xtal divider
 XMCRA = 0x00; //external memory
 port_init();
 uart0_init();              // UART 0 초기화
 uart1_init();              // UART 1 초기화
 fdevopen(Putchar,0);  

 MCUCR = 0x00;
 EICRA = 0x00; //extended ext ints
 EICRB = 0x00; //extended ext ints
 EIMSK = 0x00;
 TIMSK = 0x00; //timer interrupt sources
 ETIMSK = 0x00; //extended timer interrupt sources
 sei(); //re-enable interrupts
 //all peripherals are now initialized
}


// 시간 지연 함수
void delay(int n)
{
 volatile int i,j;

 for(i=1;i<n;i++)
 {
     for(j=1;j<600;j++);
 }
}


int main (void)
{

 init_devices();

 volatile unsigned char receive = 0;
 
 //insert your functional code here...
 printf("\n\r\ntesting...\n\r");
 printf("printf 테스트 프로그램...\n\r");


  printf("1. LED_ON / OFF 제어(q,w)\n");
  printf("2. 커텐온오프(a,s)\n");
  printf("3. 보안 온오프(z,x)\n");
  printf(" : ");
 

 do
 {
  receive = USART_Receive();
  
  switch (receive)
  {
   case 'q' :
   
    PORTD = 0xff;
   
   break;

   case 'w' :    /*js :빠져서추가*/ 
    
    PORTD = 0x00;   

   break;


   case 'a' :
   
    PORTA =  PORTA  | 0x01;   // 0000 0001
   
    delay(100);
    
    PORTA = PORTA & 0xfe;
   break;

   case 's' :
    PORTA = PORTA | 0x02;    // 0000 0010

    delay(100);

    PORTA = PORTA & 0xfd;   // 1111 1101
   break;

   case 'z' :
   //  PORTA_temp = PORTA_temp | 0x04;        //   0000 0100
   PORTA = PORTA | 0x04;
   break;

   case 'x' :

   PORTA = PORTA & 0xfc;   // 1111 1011

   break;

   default : break;


  }

     }while(1);

 


 

 

 

 return 0;
}

댓글 1
  • No Profile

    이소스를 한가히 분석하고 답을 드리긴 쉽지않겠죠.. 기본적으로 PC에서 보내는 직렬신호는 들어오는지..문자는 수신이 됬는지는 확인하셨나요?

하드웨어 설계 및 개발에 대하여 개발자들이 자유롭게 토론하는 공간입니다.
- Q&A, 자유주재 토론, 관련 정보 공유
- 분야 : 마이크로프로세서 응용, 전기/전자(아날로그/디지털) 회로 설계, C/C++ 프로그래밍, 펌웨어,
         PCB Artwork, 트러블슈팅 등 하드웨어 설계에 관한 전반인 내용
※ 게시글에 맞는 분류를 선택하여 글을 작성해 주시면 쾌적한 사이트 운영에 많은 도움이 됩니다.
※ 하드웨어 인사이트는 회원들간의 거래정보를 게재할 뿐이지, 그 어떤 책임과 의무도 가지지 않습니다.

search
번호 분류 제목 글쓴이 조회 수 날짜
274 PADS HOTPads layout에서 decal 불러오기 어떻게 하나요?1 난리법석 4193 2011.06.01
273 PADS HOT빌드업pcb 라우팅할대 via 설정 방법점 알려주세요~~~ 난몰라 2281 2011.05.31
272 PADS HOTcopper pour 수정하는 방법 좀...1 만내 3198 2011.05.26
271 PADS HOT안녕하세요...3 단추스프 1250 2011.05.25
270 Allegro & OrCAD HOTnever0682..orcad sst가 안보여여....4 개여울 1693 2011.05.24
269 PADS HOTPADS 9.3 설치방법 도움 부탁드립니다.2 shinjy82 3168 2011.05.20
268 Allegro & OrCAD HOTorcad 10.5에 대해 궁금한 점이 있습니다.4 궁금한학생 2269 2011.05.20
267 Allegro & OrCAD HOTOrcad 16.2 PCB edit componet 교체방법 가르쳐주세요 빼빼로 1967 2011.05.18
266 PADS HOTorcad와 pads 의연동되는 프로그램이 있어 소개해드립니다.3 수내아트원 1637 2011.05.14
265 PADS HOTLibrary생성 시 필요한 조건은 어떤게 있을까요.2 깡생깡사 1978 2011.05.13
264 PADS HOTcopper Pour 시 Text 무시하는 방법좀 알려주세요~~2 스코프 1649 2011.05.12
263 PADS HOTPADS 9.3 라이센스 까지 팁!12 컴맹 14410 2011.05.11
262 Allegro & OrCAD HOTORCAD Portable 버전 특징2 안전제일 4834 2011.05.11
261 PADS HOTPADS9.3 나도 설치 완료 앗싸 !!!1 빼빼로 4521 2011.05.09
260 ECAD 아무거나 HOT회로도 제작조언 및 제작부탁요청요!4 쏘주한잔 6084 2011.05.03
259 PADS HOTPADS 9.3 Project2 컴맹 1885 2011.05.01
258 PADS HOTpads 9.3 설치법 부탁드립니다. 빅스 2092 2011.04.29
257 PADS HOTPADS 데칼 만들기 문위요^^2 컴맹 2423 2011.04.27
256 PADS HOTorcad와 pads 하늘사랑73 2327 2011.04.27
255 PADS HOTpads 공부용 책 문의 건입니다... 2권중 선택시 고민되네요1 쿠헬헬 2394 2011.04.27
Prev 1 ... 14 15 16 17 18 19 20 21 22 23 ... 32 Next
  • 인간은 입이 하나 귀가 둘이 있다. 이는 말하기보다 듣기를 두 배 더하라는 뜻이다.
    - 탈무드
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.