C51---串口通信---虚拟终端模仿

//C51串口相关寄存器

 

//C51存储类型

//C51    SCON寄存器






//C51  波特率计算




//查询方式1,无奇偶校验
/*
#include <reg51.h>

unsigned char code str[]="Hello World";
unsigned char i=0;

void main()
{
	TMOD=0x20;//定时器1,方式2,8位自动重加载
	TH1=0xFD;
	TL1=0xFD;//19200波特率

	PCON=0x80;//SMOD=1.波特率加倍

	SCON=0x40;//方式1,1位起始位,8位数据位,1位停止位

	TR1=1;//启动定时器1
	
	for(i=0;i<13;++i)
	{
		SBUF=str[i];
		while(0==TI);
		TI=0;
	}
	while(1);
}
*/

/*
//中断方式发送
#include <reg51.h>

unsigned char code str[]="Hello World";
unsigned char i=0;

void main()
{
	TMOD=0x20;//定时器1,方式2,8位自动重加载
	TH1=0xFD;
	TL1=0xFD;//19200波特率

	PCON=0x80;//SMOD=1.波特率加倍

	SCON=0x50;//方式1,1位起始位,8位数据位,1位停止位

	ES=1;//开串口中断
	EA=1;//开总中断

	TR1=1;//启动定时器1
	while(i<12)
	{
		SBUF=str[i];//写入数据
		while(0==TI);//等待发送结束
		TI=0;//清空终端标志位
	}
	while(1);
}

void es_ISR(void) interrupt 4 using 3
{	
	++i;
	//if(i>11)//加上此两行,可循环发送
	//i=0;
}

*/

//波特率2400,方式1带奇偶校验的发送“hello,world!”
//用第7位做奇偶校验位
/*
#include <reg51.h>

unsigned char bdata temp;//可位寻址片内数据存储区0x20--0x2F,允许位与字节混合访问(16字节)
sbit temp_7=temp^7;//取得第7位数据

unsigned char code str[]="Hello World";
unsigned char * p;

void main()
{
	p=str;//获得字符串

	TMOD=0x20;//定时器1,方式2,8位自动重加载
	TH1=0xF4;
	TL1=0xF4;//2400波特率,11.0592MHz

	SCON=0x40;//方式1,1位起始位,8位数据位,1位停止位

	ES=1;//开串口中断
	EA=1;//开总中断

	TR1=1;//启动定时器1
	while(*p!='\0')
	{	
		temp=*p;
		ACC=temp;//数据放到累加器A(ACC)中,默认偶校验
		temp_7=P;//PSW寄存器中自动生成奇偶位P,表征有奇数或偶数个1,当累加器A中1的个数为奇数个时候,P=1
		SBUF=temp;//写入数据
		while(0==TI);//等待发送结束
		TI=0;//清空终端标志位
	}
	while(1);
}

void es_ISR(void) interrupt 4 using 3
{	
	++p;
}
*/




//波特率2400,方式1带奇偶校验的发送“hello,world!”
//用第TB8做奇偶校验位
#include <reg51.h>

unsigned char code str[]="Hello World";
unsigned char * p;

void main()
{
	p=str;//获得字符串

	TMOD=0x20;//定时器1,方式2,8位自动重加载
	TH1=0xF4;
	TL1=0xF4;//2400波特率,11.0592MHz

	SCON=0x40;//方式1,1位起始位,8位数据位,1位停止位

	ES=1;//开串口中断
	EA=1;//开总中断

	TR1=1;//启动定时器1
	while(*p!='\0')
	{	
		ACC=*p;//数据放到累加器A(ACC)中,默认偶校验
		TB8=P;//PSW寄存器中自动生成奇偶位P,表征有奇数或偶数个1,当累加器A中1的个数为奇数个时候,P=1
		SBUF=*p;//写入数据
		while(0==TI);//等待发送结束
		TI=0;//清空终端标志位
	}
	while(1);
}

void es_ISR(void) interrupt 4 using 3
{	
	++p;
}


//结果




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值