编写单片机串口收发数据的完整程序(C语言编写)

单片机串口编程。串口采用中断法接收数据,并将接受到的数据再通过串口传回去,同时传到P0口显示。条件:晶振11.0592MHz,串口工作在方式1,T1定时器工作在方式2,S... 单片机串口编程。串口采用中断法接收数据,并将接受到的数据再通过串口传回去,同时传到P0口显示。条件:晶振11.0592MHz,串口工作在方式1,T1定时器工作在方式2,SMOD=0,波特率为9600。
要求:
(1)写出串口控制寄存器SCON的值和定时器TMOD的值(十六进制表示)。
(2)编写单片机串口收发数据的完整程序(C语言编写)。
展开
 我来答
惊鸿0506
2017-12-10
知道答主
回答量:2
采纳率:0%
帮助的人:1816
展开全部
我用的新唐芯片,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;
}
}
}
接收
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式