zmj521851002 发表于 2008-9-12 15:13:49

求助,有人能帮小弟写一个简单的接收一个字节和多个字节的串口通讯代码?

我写了这个代码接收到的数据经常会变成FF不是我要接收的数据.友人能帮我写一个很简单的例子谢谢.
#pragma interrupt   INTSR6 uart_rxdend
void uart_rxdend()
{
TADE=RXB6;
   while(!SBRF6);}
接收到的数据怎么是FF大家帮忙看看

zmj521851002 发表于 2008-9-12 15:14:29

用的是9234的片子

fsclub 发表于 2008-9-12 15:32:23

随便找本AVR书上面就有.

dongdaxing 发表于 2008-9-12 15:40:18

看我前面的 串口 程序 帖子9234的

dongdaxing 发表于 2008-9-12 15:41:36

http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=1427477&bbs_page_no=1&bbs_id=3013

zmj521851002 发表于 2008-9-12 16:19:03

这个程序里面只有发送的,没有接收的,发送的没有问题

dongdaxing 发表于 2008-9-14 00:24:39

/*
*******************************************************************************
**      daxinganling@hotmail.com
**Filename :      Receive And Send Uart6 in interrupt mode
**Abstract :      This file implements main function.
**APIlib :      NEC78K0SKX1+.lib V1.70
**
**Device :      uPD78F9234
**
**Compiler :      NEC/CC78K0
**
*******************************************************************************
*/
#pragma      interrupt      INTSR6      MD_INTSR6
#pragma      interrupt      INTST6      MD_INTST6

#include "macrodriver.h"
#include "system.h"


/*
*******************************************************************************
**MacroDefine
*******************************************************************************
*/
/*
**---------------------------------------------------------------------------
**
**Abstract:
**      This function implements main function.
**
**Parameters:
**      None
**
**Returns:
**      None
**
**---------------------------------------------------------------------------
*/

extern void hdwinit(void);

bit rx_flag;
bit sd_flag;

unsigned char TEMP;

void UART6_Init( void )
{
      ASIM6 = 1;                                        /* ENABLE INTERNAL CLOCK OPERATION*/

      SetIORBit(P4, 0x08);                /* port setting in transmit/receive mode */
      ClrIORBit(PM4, 0x08);
      SetIORBit(PM4, 0x10);
      
      SetIORBit(ASIM6, 0x04);                /* data length 8 bits */
      SetIORBit(ASIM6, 0x10);                /* odd bits */
      ClrIORBit(ASIM6, 0x02);                /* stop length 1 bit */
      
      SetIORBit(ASICL6, 0x02);      /* LSB-first transfer */

      CKSR6 = 0x1;                  /* baudrate selection 9600*/
      BRGC6 = 0xd0;

      ClrIORBit(IF1, 0x60);
      ClrIORBit(MK1, 0x60);                /* UART6 transmit/receive end interrupt enable */
      SetIORBit(ASIM6, 0x80);
      SetIORBit(ASIM6, 0x60);                /* UART6 transmit/receive mode */
}

bit SENDCHAR(UCHAR TEMP)
{
   sd_flag = 0;
   TXB6 = TEMP;
   while(!sd_flag);   
   return 1;
}


bit SENDSTRING(UCHAR *databuf, UCHAR txnum,UCHAR format)
{
      UCHAR i = 0;
      for(i=0;i<txnum;i++)
      {
                TEMP = *(databuf+i);
                SENDCHAR(TEMP);
      }
      if(format)
      {
                TEMP ='\n';
                SENDCHAR(TEMP);      
      }
      return 1;
}

__interrupt void MD_INTST6( void )
{
      sd_flag = 1;
}

__interrupt void MD_INTSR6( void )
{
      rx_flag = 1;
}

void delay(int ms)
{
      while(ms--);      
}
      
void main( void )
{
      hdwinit();
      
      UART6_Init();
      
      SENDSTRING("HELLO BOY",9,1);
      
      while(1)
      {
                while(rx_flag)//表示有数据收到标志
                {
                        rx_flag = 0;
                        SENDSTRING("RECEIVE DATA:",13,0);
                        SENDCHAR(RXB6);//发送收到的数据
                        SENDCHAR('\n');
                }
      }

}

dongdaxing 发表于 2008-9-14 00:25:04

这样说明该明白了吧
页: [1]
查看完整版本: 求助,有人能帮小弟写一个简单的接收一个字节和多个字节的串口通讯代码?