大体流程如下:
handle port = CreateFile("COM1");//关联
SetComState();//设置串口参数
OpenFile();//打开串口
WriteFile();//写入串口
CloseFile();//关闭串口
printf其实不只是输出到屏幕,是输出到stdout,stdout是可以重定向到文件的。就重定向到这个文件即可了。
具体细节查文档或上网查查。
我用的新唐芯片,8051内核,跟51差不多,望采纳
void UART_Initial (void)
{
P02_Quasi_Mode; //Setting UART pin as Quasi mode for transmit
P16_Quasi_Mode; //Setting UART pin as Quasi mode for transmit
SCON_1 = 0x50; //UART1 Mode1,REN_1=1,TI_1=1
T3CON = 0x08; //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1), UART1 in MODE 1
clr_BRCK;
RH3 = HIBYTE(65536 - (1000000/u32Baudrate)-1); /16 MHz /
RL3 = LOBYTE(65536 - (1000000/u32Baudrate)-1); /16 MHz /
set_TR3; //Trigger Timer3
}
以上是初始化的
void Send_Data_To_UART1(UINT8 c)
{
TI_1 = 0;
SBUF_1 = c;
while(TI_1==0);
}
这个是发送
void UART_isr (void) interrupt 4 //串行中断服务程序
{
if (RI_1==1)
{ / if reception occur /
clr_RI_1; / clear reception flag for next reception /
Receive_Date[c] = SBUF_1;
if (Receive_Date[0] == First_Date)
{
c++;
}
else if(Receive_Date_Size > 0 && Receive_Date_Size < 4)
{
c++;
}
else if(Receive_Date[c] == Last_Date && Receive_Date_Size ==4)
{
c = 0;
Flag_Receive_One = 1;
}
else
{
c = 0;
}
}
}
接收
程序如下,只需要修改MSG中需要发送的中文字符就可以了
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN: MOV SCON,#40H ;设置串行口工作方式1
MOV PCON,#0 ;设置波特率4800
MOV TMOD,#20H ;波特率可根据需要自己修改
MOV TL1,#0FAH
MOV TH1,#0FAH
SETB TR1
MOV DPTR,#MSG ;DPTR指向待输出字符串首地址
NEXT: MOV A,#0
MOVC A,@A+DPTR
CJNE A,'$',NEXT1 ;字符串结尾?
AJMP NEXT2
NEXT1: CLR TI
MOV SBUF,A ;发送
JNB TI,$ ;等待发送完成
INC DPTR ;指向下一字符
AJMP NEXT
NEXT2: SJMP $ ;动态暂停
MSG DB '中华人民共和国' ;定义中文字符串
MSGEND DB '$' ;定义字符串结尾字符,自定义
END
根据你贴的寄存器的说明,复位时为0x04,即“0000 0100”,
而你串口读出来的值为0x14,即为“0001 0100”,表明数据的第4位发生了变化,第4位是IdleIRQ,可以查询其对应的说明。
结合这两个,另外检查一下在复位前,前后几行程序做了什么动作,基本可以定位原因。
希望对你有帮助,祝早日解决。
以上就是关于c8051f340 中printf怎么将数据发到串口中用串口调试工具可以看得出来求简单的实例程序全部的内容,包括:c8051f340 中printf怎么将数据发到串口中用串口调试工具可以看得出来求简单的实例程序、编写单片机串口收发数据的完整程序(C语言编写)、求一个51单片机汇编语言 串口输出一行中文的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)