//串口接收程序,P0口显示接收数据, 11.0592MHz,波特率9600bps;

//调试通过;

#include

void serial_port_initial()//

{

PCON=0x00; //波特率bu加倍

SCON = 0x50; //0101,0000

8位可变波特率,无奇偶校验位

TMOD = 0x20; //0011,0001

设置定时器1为8位自动重装计数器

TH1 = 0xfd;

TL1 = 0xfd;

ES = 0; //串口中断关闭

ET1 = 0; //定时器1中断关闭

TR1 = 1; //打开串口

EA = 0; //关总中断

}

void main( void )

{

unsigned char i = 0,a;

serial_port_initial();//初始化串口

while( 1

)

{

a=SBUF; //把接收的数据存于a中

P0=a; //用P0显示接收的数据

if(RI==1) //判断是否接收完毕

{ RI=0;

} //清除接收标志位

}

}

a4c26d1e5885305701be709a3d33442f.png

//串口发送程序

//11.0592MHz,波特率9600bps,循环发送cc[],调试通过;

#include

#define uint unsigned int

uint i, j;

unsigned char cc[]="hello world!";

//也可写为:unsigned char cc[]={‘1’,‘2’,‘a’,'w'};

void delay( uint

a) //延时a

ms

{

for(i=0;i

for(j=0;j<120;j++);

}

void serial_port_initial()//

{

PCON=0x00; //波特率bu加倍

SCON = 0x50; //0101,0000

8位可变波特率,无奇偶校验位

TMOD = 0x20; //0011,0001

设置定时器1为8位自动重装计数器

TH1 = 0xfd; //设置定时器1自动重装数 9600bps

,11.0592MHZ

TL1 = 0xfd;

ES = 0; //串口中断关闭

ET1 = 0; //定时器1中断关闭

TR1 = 1; //打开串口

EA = 0; //开总中断

}

void send_UART(unsigned char i)

{

TI =

0; //软件清零发送中断标志

SBUF =

i ; //发送一帧数据

while( TI == 0 );

//等待发送结束

}

void main( void )

{

unsigned char i = 0;

serial_port_initial();//初始化串口

while( 1

)

{

for(i=0;i<12;i++)

{

delay( 30);

send_UART(cc[i]);

delay( 30 );

}

SBUF = 13; while (TI == 0); TI = 0; //回车

SBUF = 10;

while (TI == 0); TI = 0;//换行

}

}

//注意protus的单片机设为一致11.0592MHZ

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐