请教串口程序问题
#include <reg52.h>#define uchar unsigned char#define uint unsigned intunsigned char flag,a,i;uchar code table[]="I get ";void init(){ TMOD=0x20; //确定T1的工作方式 TH1=0xfd; //计算T1的初值,装载TH1,TL1 TL1=0xfd; TR1=1; //启动T1 REN=1; //确定串行口的工作方式 SM0=0; SM1=1; EA=1; ES=1;}void main(){ init(); while(1) { if(flag==1) { ES=0; //关闭串口中断,否则发送数据时同样申请中断,程序进入死循环 for(i=0;i<6;i++) { SBUF=table[i]; while(!TI); TI=0; } SBUF=a; while(!TI); //发送完毕后,TI会被硬件置1,跳出循环,说明数据发送完毕 TI=0; // ES=1; flag=0; } }}void ser() interrupt 4{ RI=0; //接受数据完成后,内部硬件置1,进入串口中断函数后 a=SBUF; //必须有软件清0 flag=1; //将flag置1,方便在主程序中检测}
char revbuff[1000000]void ser() interrupt 4{ static int len=0; RI=0; //接受数据完成后,内部硬件置1,进入串口中断函数后 unsigned char a=SBUFF; if(a=='\r'||a=='\n') {flag=1;revbuff[len]=0;} else revbuff[len++]=a; }在main内部void main(){ ... if(flag) { flag=0; strcpy(buff+6,revbuff); uartouts(buff); } ...}
[解决办法]
楼主用个数组不就可以了么?随便你收几个字符。
[解决办法]
#ifndef _SERIAL_CONFIG_H_#define _SERIAL_CONFIG_H_#include "const.h"#include "oscfrequencydef.h"#ifndef OSC_FREQUENCY#error undefined OSC_FREQUENCY#endif/***********************************************************************仅限于串口方式1的工作模式,即1位起始位,8位数据位和1位停止位,无校验位波特率不倍增************************************************************************/typedef enum tagBAUD{ b_1200 = 1200, b_2400 = 2400, b_4800 = 4800, b_9600 = 9600, b_14400 = 14400, b_19200 = 19200, b_28800 = 28800, b_38400 = 38400, b_56000 = 56000, b_57600 = 57600, //注意:115200已经超过两个字节的范围 INVALID_BAUD,}BAUD;typedef void (*RECVPROC)(BYTE byte);BOOL OpenSerial(BAUD Baud, RECVPROC pRecvFunc);void SendData(const BYTE* pData, BYTE nSize);void CloseSerial();#endif