📄 comm.h
字号:
#define RELOAD_HIGH 0x3C
#define RELOAD_LOW 0xD2
unsigned char Com_buf; //串口数据寄存器
/********************************************************************
函 数 名:INIT_SCI()
功 能:初始化串口
说 明:
调 用:
入口参数:
返 回 值:
设 计:hare 日 期:2008-09-28
修 改: 日 期:
***********************************************************************/
void INIT_SCI()
{
SCON=0X50; //串口的工作方式,设置为方式1
ES=1; //开串口中断
EA=1; //开总中断
}
/********************************************************************
函 数 名:INIT_TMR()
功 能:初始化定时器
说 明:
调 用:
入口参数:
返 回 值:
设 计:hare 日 期:2008-09-28
修 改: 日 期:
***********************************************************************/
void INIT_TMR(void)
{
TL2C=0XD8; //AT89S52还有个定时器2,是16位定时计数器,我们这里就用定时器2来产生波特率,
//为何我们不用定时器2呢,是因为我们用的晶振有关,你们可以计算下,12M的频率用定时器1是难以
//产生我们串口软件所要的比如9600,4800等波特率,所以这里我们用到了定时计数器2
//下面是产生9600波特率的初值,你们可以用工式计算下:16位计数为65536-12000000/12/32/9600
TH2C=0XFF;
TL2=0XD8;
TH2=0XFF;
T2CON=0X34; //此寄存器为设置定时器3做波特率发生器,
//是一个开关,默认为定时器2,所以我们要设置它
//初始化定时器0
ET0=1;
TH0=RELOAD_HIGH; //设定重装值
TL0=RELOAD_LOW;
TMOD=0x11; //设置定时器模式
TCON=0x11;
}
/********************************************************************
函 数 名:com_send()
功 能:通过串口发送字节
说 明:
调 用:
入口参数:sdata 要发送的字节
返 回 值:无
设 计:hare 日 期:2008-09-28
修 改: 日 期:
***********************************************************************/
void com_send(unsigned char sdata)
{
SBUF=sdata;
while(TI==0){}
TI=0;
}
/********************************************************************
函 数 名:serial_int(void) interrupt 4
功 能:串口中断响应程序
说 明:接收数据帧,并判断是否是有效数据。
调 用:
入口参数:
返 回 值:无
设 计:hare 日 期:2008-09-28
修 改: 日 期:
***********************************************************************/
void serial_int(void) interrupt 4//中断4表示串口中断
{
ES=0;
if(RI==0)
{
while (1){}
RI=0;
Com_buf=SBUF ;
SBUF=0x0f;
while(!TI){}
TI=0;
}
ES=1;
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -