📄 com.c
字号:
//**************************************************************************************************************************
#include <c8051F020.h>
#include "HEAD.H"
//**************************************************************************************************************************
void Com0_Init(void)
{
SCON0 = 0x50; // SCON0: 模式1, 8位UART, 允许RX
TMOD |= 0x20; // TMOD: 定时器1, 模式2, 8位重装
TH1 = -(SYSCLK/BAUDRATE/16); // 按波特率设置定时器1重装值
TR1 = 1; // 起动定时器1
CKCON |= 0x10; // 定时器1使用系统时钟为时基
PCON |= 0x80; // SMOD00 = 1
ES0 = 1; // UART0中断允许
DatLong=0x00;
}
//**************************************************************************************************************************
void Enter_UART0(void) interrupt 4
{
RI0 = 0;
DatPocket[DatLong]=SBUF0;
Timer0_ReSet();
DatLong++;
ComFlag=0x01;
}
//**************************************************************************************************************************
void Com0_Send_Char(unsigned char datas)
{
SBUF0 = datas;
while(!TI0);
TI0=0;
}
//**************************************************************************************************************************
void Com0_Send_String(unsigned char *string,unsigned int bytes)
{
xdata unsigned int i;
for(i=0;i<bytes;i++)
Com0_Send_Char(string[i]);
}
//**************************************************************************************************************************
/*
unsigned char Com0_Get_Char(void)
{
while(RI0 == 0);
RI0 = 0;
return SBUF0;
}
*/
//**************************************************************************************************************************
void Com1_Init(void)
{
SCON1 = 0x50; //"S1MODE - MCE1 REN1 TB81 RB81 TI1 RI1"
TMOD |= 0x20; //Timer1 Mode,"GATE1 C/T1 T1M1 T1M0 GATE0 C/T0 T0M1 T0M0"
TH1 = -(SYSCLK/BAUDRATE/16); // 按波特率设置定时器1重装值
TR1 = 1; // 起动定时器1
CKCON |= 0x10; // 定时器1使用系统时钟为时基
PCON |= 0x80; // SMOD00 = 1
/*
PCON &=~0x80; // 串口波特率加倍使能。0:串口波特率为SCON中的串口方式定义值;1:加倍
// SCON = 0x70; // Mode 1: 8-Bit UART, Variable Baud Rate ,receive enable.
CKCON = 0x00; // Timer 2,1,0 uses the system clock divided by 12.
T2CON |= 0x30; // RCLK和TCLK中有任何一个被置‘1’时,定时器2中断被自动禁止
// 定时器被强制工作于波特率发生器方式并使用SYSCLK/2作为时钟源。
RCAP2H = 0xFF; // 9600=(1/16)*(11059200/2)/(65536-X).0xFFDC=9600,0xFFED=19200,0xFFF7=38400,0xFFFD=115200
RCAP2L = 0xFA;
TR2 = 1; // 时钟2使能
*/
EIE2 |= 0x40;//ES1 = 1;//允许UART1中断
DatLong=0x00;
}
//**************************************************************************************************************************
void Enter_UART1(void) interrupt 20
{
SCON1 &=~0x01;
DatPocket[DatLong]=SBUF1;
Timer0_ReSet();
DatLong++;
ComFlag=0x02;
}
//**************************************************************************************************************************
void Com1_Send_Char (unsigned char data1)
{
SBUF1 = data1;
while(!(SCON1 & 0x02));
SCON1 &=~0x02;
}
//**************************************************************************************************************************
void Com1_Send_String(unsigned char *string,unsigned int bytes)
{
xdata unsigned int i;
xdata unsigned int j;
CTRL485 = 1;
for(j=0;j<200;j++);
for(i=0;i<bytes;i++)
Com1_Send_Char(string[i]);
for(j=0;j<100;j++);
CTRL485 = 0;
}
//**************************************************************************************************************************
void Com_Send_String(unsigned char *string,unsigned int bytes,unsigned char flag)
{
if(flag==0x01)
Com0_Send_String(string,bytes);
else if(flag==0x02)
Com1_Send_String(string,bytes);
}
//**************************************************************************************************************************
// The End
//**************************************************************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -