怎样编写单片机的串口通信的程序,一般的步骤是怎么样

怎样编写单片机的串口通信的程序,一般的步骤是怎么样,第1张

编写串口通讯程序步骤为:

1、设置波特率

2、设置串口工作方式

3、收发数据

比如:

main()

{

unsigned char dat

TMOD=0x20

TH1=0xfd

TL1=0xfd

TR1=1

SCON=0x50

while(1)

    {

    while(RI==0)

    RI=0

    dat=SBUF

    SBUF=~dat

    while(TI==0)

    TI=0

    }

}

我用的新唐芯片,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

}

}

}

接收

#include <AT89X51.H>//单片机51头文件,存放着单片机的寄存器

unsigned char dat//用于存储单片机接收发送缓冲寄存器SBUF里面的内容

sbit gewei=P2^2//个位选通定义

sbit shiwei=P2^3//十位选通定义

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x77,0x7c,0x39,0x5e,0x79,0x71}

//{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,}// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

void Delay(unsigned int tc) //延时程序

{

while( tc != 0 )

{unsigned int i

for(i=0i<100i++)

tc--}

}

void LED() //LED显示接收到的数据

{

shiwei=0

P0=~table[dat/16]

Delay(8)

shiwei=1

gewei=0

P0=~table[dat%16]

Delay(5)

gewei=1

}

void Init_Com(void)//功能:串口初始化,波特率9600,方式1

{

TMOD = 0x20

PCON = 0x00

SCON = 0x50

TH1 = 0xFd

TL1 = 0xFd

TR1 = 1

}

void main()//主程序功能:实现接收数据并把接收到的数据原样发送回去///////

{

Init_Com()//串口初始化

// P1=0xf0

while(1)

{

if ( RI ) //扫描判断是否接收到数据,

{

dat = SBUF //接收数据SBUF赋与dat

RI=0 //RI清零。

SBUF = dat //在原样把数据发送回去

}

LED()//显示接收到的数据

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7945547.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存