회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
109 PADS HOTpads 9.2 설치 도중에 에러 발생. 하경철 2522 2011.06.13
108 PADS HOT패즈 9.3 크랙파일 부탁드려요1 BOHEM 2916 2011.06.10
107 PADS HOTpads 9.2에서 만든 여러 거버 파일들을 merge하는 방법 알려주세요 빵돼지 2582 2011.06.09
106 PADS HOT크아악.. 설치 자동종료 됩니다. ㅠ1 칠흑광자 1897 2011.06.08
105 PADS HOTPAD 설치 5번째 오류중 .ㅠㅠ1 칠흑광자 1996 2011.06.06
104 PADS HOTpads 9.3 설치방법 사이다522 4222 2011.06.03
103 PADS HOTPADS9.3 설치관련 문의 드립니다. 사랑연인 4616 2011.06.02
102 PADS HOTPads layout에서 decal 불러오기 어떻게 하나요?1 난리법석 4194 2011.06.01
101 PADS HOT빌드업pcb 라우팅할대 via 설정 방법점 알려주세요~~~ 난몰라 2281 2011.05.31
100 PADS HOTcopper pour 수정하는 방법 좀...1 만내 3198 2011.05.26
99 PADS HOT안녕하세요...3 단추스프 1250 2011.05.25
98 PADS HOTPADS 9.3 설치방법 도움 부탁드립니다.2 shinjy82 3168 2011.05.20
97 PADS HOTorcad와 pads 의연동되는 프로그램이 있어 소개해드립니다.3 수내아트원 1637 2011.05.14
96 PADS HOTLibrary생성 시 필요한 조건은 어떤게 있을까요.2 깡생깡사 1978 2011.05.13
95 PADS HOTcopper Pour 시 Text 무시하는 방법좀 알려주세요~~2 스코프 1650 2011.05.12
94 PADS HOTPADS 9.3 라이센스 까지 팁!12 컴맹 14411 2011.05.11
93 PADS HOTPADS9.3 나도 설치 완료 앗싸 !!!1 빼빼로 4521 2011.05.09
92 PADS HOTPADS 9.3 Project2 컴맹 1885 2011.05.01
91 PADS HOTpads 9.3 설치법 부탁드립니다. 빅스 2092 2011.04.29
90 PADS HOTPADS 데칼 만들기 문위요^^2 컴맹 2423 2011.04.27
Prev 1 ... 4 5 6 7 8 9 10 11 12 13 14 Next
  • 우리의 인내가 우리의 힘보다 더 많은 것을 성취할 것이다.
    - 버크
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.