初级会员
- 积分
- 156
- 金钱
- 156
- 注册时间
- 2015-4-11
- 在线时间
- 12 小时
|
1金钱
以下程序用中断接收两个字节时,只接收到第一个,第二个乱码,波特率9600,为什么啊???接收问题?还是接收和发送没有配合好???请帮忙看看
#include "DrvConfig.h"
#include "SM39R08A3.h"//"SM39R08A5.h"
#include "global.h"
#include "absacc.h"
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#define d_S0RELH 0x03
#define d_S0RELL 0xB8
#define UART_BUFFERSIZE 2
u8 table[UART_BUFFERSIZE];
u8 Byte,UART_Buffer_Size=0,UART_Input_First=0;
//===============================================================
//GLOBAL VARIABLE
//===============================================================
bit read_flag=0;
bit send_flag=0;
bit chang_flag=0;
/********************************************************************************/
/*******************************串口功能*****************************************/
void init_UART0(void)
{
S0RELH = d_S0RELH;
S0RELL = d_S0RELL;
AUX |= 0x80; // BRS = 1
PCON |= 0x80; // SMOD =0,波特率4800
IEN0 |= 0x90; // EA=1, ES0=1, interrupt enable
S0CON = 0x50; // mode 1, SM20=0, Revice enable
TI=0;
}
//发送数据
void send_char(unsigned char n_temp0)
{
send_flag = 1;
S0BUF = n_temp0;
while(send_flag);
{
;
}
}
//向串口发送一个长度为strlen的字符串
void send_str(u8 *str,u16 strlen)
{
u16 k=0;
do
{
send_char(*(str+k));
k++;
}
while(k<strlen);
}
void main(void)
{
EA=0;
init_UART0();
EA=1;
while(1)
{
if(read_flag)
{
read_flag=0;
UART_Buffer_Size =0;
if(table[1]=='c')
{
send_str("serial succeed to recvive 4 byte",33);
}
send_str(table,2);
memset(table,0,2*sizeof(unsigned char));
}
}
}
void serial() interrupt 4
{
if(RI)
{
RI = 0;
if( UART_Buffer_Size == 0)
{ // 如果是第一位
UART_Input_First = 0;
}
Byte = S0BUF; // 读取串口值
if (UART_Buffer_Size < UART_BUFFERSIZE)
{
table[UART_Input_First] = Byte; // 保存数据到数组中
++UART_Buffer_Size; // 等待下一位
++UART_Input_First; // 更新计数
}
else
{
read_flag=1; //接收完成
}
}
else
{
send_flag=0;
TI=0;
}
}
|
|