求助,有人能帮小弟写一个简单的接收一个字节和多个字节的串口通讯代码?
我写了这个代码接收到的数据经常会变成FF不是我要接收的数据.友人能帮我写一个很简单的例子谢谢.#pragma interrupt INTSR6 uart_rxdend
void uart_rxdend()
{
TADE=RXB6;
while(!SBRF6);}
接收到的数据怎么是FF大家帮忙看看 用的是9234的片子 随便找本AVR书上面就有. 看我前面的 串口 程序 帖子9234的 http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=1427477&bbs_page_no=1&bbs_id=3013 这个程序里面只有发送的,没有接收的,发送的没有问题 /*
*******************************************************************************
** 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');
}
}
} 这样说明该明白了吧
页:
[1]