//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;
}
//结果