lovelypea 发表于 2007-5-4 01:43:01

请教马老师:串口没有输出 PC上没有显示为什么阿?

马老师,我搭了个很小的电路采集数值,想先在PC上看看数值,可是串口精灵上没有收到任何数据,郁闷,我也是第一次用串口,初始化我是用CVAVR自动生成的。即相当于用的他的应用范例。

#include



#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<#define PARITY_ERROR (1<#define DATA_OVERRUN (1<#define DATA_REGISTER_EMPTY (1<#define RX_COMPLETE (1<

// USART0 Receiver buffer

#define RX_BUFFER_SIZE0 8

char rx_buffer0;

unsigned char rx_wr_index0,rx_rd_index0,rx_counter0;

// This flag is set on USART0 Receiver buffer overflow

bit rx_buffer_overflow0;



// USART0 Receiver interrupt service routine

#pragma savereg-

interrupt 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 ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)

   {

       rx_buffer0=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

       popr26

       outsreg,r26

       popr31

       popr30

       popr27

       popr26

#endasm

}

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

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

#asm("cli")

    --rx_counter0;

#asm("sei")

return data;

}

#pragma used-

#endif



// USART0 Transmitter buffer

#define TX_BUFFER_SIZE0 8

char tx_buffer0;

unsigned char tx_wr_index0,tx_rd_index0,tx_counter0;



// USART0 Transmitter interrupt service routine

#pragma savereg-

interrupt void uart0_tx_isr(void)

{

#asm

      push r26

      push r27

      push r30

      push r31

      in   r26,sreg

      push r26

#edasm

if (tx_counter0)

{

         --tx_counter0;

       UDR0=tx_buffer0;

       if (++tx_rd_index0 == TX_BUFFER_SIZE0) tx_rd_index0=0;

   };

#asm

      popr26

      outsreg,r26

      popr31

      popr30

      popr27

      popr26

#endasm

}

#pragma savereg+



#ifndef _DEBUG_TERMINAL_IO_

// Write a character to the USART0 Transmitter buffer

#define _ALTERNATE_PUTCHAR_

#pragma used+

void putchar(char c)

{

while (tx_counter0 == TX_BUFFER_SIZE0);

#asm("cli")

   if (tx_counter0 || ((UCSR0A & DATA_REGISTER_EMPTY)==0))

   {

       tx_buffer0=c;

       if (++tx_wr_index0 == TX_BUFFER_SIZE0) tx_wr_index0=0;

       ++tx_counter0;

   }

   else

       UDR0=c;

#asm("sei")

}

#pragma used-

#endif



// Standard Input/Output functions

#include



// Declare your global variables here



void main(void)

{



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



      };

}





以上为模板程序,我只不过加了一句话:

while (1)

      {

         printf ("hello world!");

      };



编译是肯定没有问题的,可是PC上没有输出。。请问马老师这是为什么阿

lovelypea 发表于 2007-5-4 18:23:51

我又加了一句 DDRD=0xFF;设置PD口为输出,还是不对.

machao 发表于 2007-5-8 13:50:23

看样子你是学软件的?不关注硬件?你必须证明你的硬件没问题,才能调试软件中的问题。

lovelypea 发表于 2007-5-10 02:43:56

确实是硬件问题........惭愧,巨惭愧.........
页: [1]
查看完整版本: 请教马老师:串口没有输出 PC上没有显示为什么阿?