搜索
bottom↓
回复: 3

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

[复制链接]

出0入0汤圆

发表于 2007-5-4 01:43:01 | 显示全部楼层 |阅读模式
马老师,我搭了个很小的电路采集数值,想先在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[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;



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

}

#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



// USART0 Transmitter buffer

#define TX_BUFFER_SIZE0 8

char tx_buffer0[TX_BUFFER_SIZE0];

unsigned char tx_wr_index0,tx_rd_index0,tx_counter0;



// USART0 Transmitter interrupt service routine

#pragma savereg-

interrupt [USART0_TXC] 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[tx_rd_index0];

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

   };

  #asm

      pop  r26

      out  sreg,r26

      pop  r31

      pop  r30

      pop  r27

      pop  r26

  #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[tx_wr_index0]=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上没有输出。。请问马老师这是为什么阿

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2007-5-4 18:23:51 | 显示全部楼层
我又加了一句 DDRD=0xFF;设置PD口为输出,还是不对.

出0入0汤圆

发表于 2007-5-8 13:50:23 | 显示全部楼层
看样子你是学软件的?不关注硬件?你必须证明你的硬件没问题,才能调试软件中的问题。

出0入0汤圆

 楼主| 发表于 2007-5-10 02:43:56 | 显示全部楼层
确实是硬件问题........惭愧,巨惭愧.........
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 02:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表