📄 serial.c
字号:
/***************************************************************************************************************8
** 串口通信程序,拨特率可以在初始化端口使用参数从300、600、1200、2400、4800、9600、19200中任意选择
** 作者:谭超
** 仅供学习用,请勿用做商业用途
** 提示:晶体频率为11.0592MHz,12M,24M,33。用#define命选择不同晶体对应的程序,一般在做调试程序的时候用于状态显示
**/
#include<reg52.h>
#define CRY_11_MHz 11
#define CRY_12_MHz 12
#define CRY_24_MHz 24
#define CRY_33_MHz 33
#define Crystal CRY_24_MHz
void Init_Port(unsigned int BordRate)
{
// unsigned char Crystal;
#if Crystal==CRY_11_MHz //如果予定义晶体频率为11MHz
unsigned int x;
if(BordRate>9600) //如果拨特率大于9600,需要设置smod=1,
{
PCON=0X80; // smod=1
x=2*28800/BordRate;
}
else
{
PCON=0X00; // smod=0
x=28800/BordRate;
}
x=256-x;
TH1=TL1=x;
TMOD=0X20;
ET1=0;
TR1=1;
SCON=0X40;
#endif
#if Crystal==CRY_12_MHz
#endif
#if Crystal==CRY_24_MHz
switch(BordRate)
{
case 1200:TH1=TL1=0x98;break;
case 2400:TH1=TL1=0xcc;break;
case 4800:TH1=TL1=0xe6;break;
case 9600:TH1=TL1=0xf3;break;
// case 19200:TH1=TL1=0xf9;break;
// case 38400:TH1=TL1=0xfd;break;
default:break;
}
PCON=0X80;
TMOD=0X20;
ET1=0;
TR1=1;
SCON=0X40;
#endif
#if Crystal==CRY_33_MHz
#endif
}
/*
void ClosePort()
{
TR1=0; //关闭定时器,:)没有拨特率就不会发数据了
}*/
void OutputC(unsigned char Dat)
{
TI=0;
SBUF=Dat;
while(!TI);
}
void OutputH(unsigned char Dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
if((Dat<<i)&0x80)OutputC(0X31); //由于1在电脑上的内码是0X31,所以这里送0X31。先送高位,后送低位。
else OutputC(0X30);
}
}
void OutputS(unsigned char *p)
{
while(*p!=0)
{
OutputC(*p);
p++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -