Weight_Bed/Uart_Init.c

157 lines
3.1 KiB
C
Raw Permalink Normal View History

2024-05-17 15:11:04 +08:00
#include "H/Function_Init.H"
void Uart_Init(uint Freq,unsigned long int baud);
long Cclt_Power(uchar a, long b);
bit UartSendFlag = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־λ
bit UartReceiveFlag = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־λ
//<2F>˷<EFBFBD>a<EFBFBD>ݣ<EFBFBD>b<EFBFBD><62>
long Cclt_Power(uchar a, long b)
{
uchar i;
long temp;
temp = 1;
for(i=0;i<a;i++)
temp = temp*b;
return temp;
}
/*****************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>void Uart_Test(void)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>Uart<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void
*<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void
*****************************************************/
void Uart_Test(void)
{
Uart_Init(32,9600);
}
/*****************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>void Uart_Init(uint Freq,unsigned long int baud)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>Uart<EFBFBD>жϳ<EFBFBD>ʼ<EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Freq-<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>baud-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void
*****************************************************/
void Uart_Init(uint Freq,unsigned long int baud) //ѡ<><D1A1>Timer1<72><31>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>źŷ<C5BA><C5B7><EFBFBD><EFBFBD><EFBFBD>
{
P2CON &= 0xFC; //TX/RX<52><58><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
P2PH |= 0x03;
SCON |= 0X50; //<2F><><EFBFBD><EFBFBD>ͨ<EFBFBD>ŷ<EFBFBD>ʽΪģʽһ<CABD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TXCON |= 0X03; //UART0ʱ<30><CAB1><EFBFBD><EFBFBD>ԴΪ<D4B4><CEAA>ʱ<EFBFBD><CAB1>1
TH1 = (Freq*1000000/baud)>>8; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪT1<54><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>
TL1 = Freq*1000000/baud;
TR1 = 0; //SC95F761xBϵ<42><CFB5>UARTOʹ<4F>ö<EFBFBD>ʱ<EFBFBD><CAB1>1<EFBFBD><31>Ϊʱ<CEAA><CAB1>Դ<EFBFBD><D4B4>TR1Ϊ0
ET1 = 0;
EUART = 1; //<2F><><EFBFBD><EFBFBD>Uart<72>ж<EFBFBD>
EA = 1;
}
/*
void Uart_Init(uint Freq,unsigned long int baud) //ѡ<><D1A1>Timer2<72><32>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>źŷ<C5BA><C5B7><EFBFBD><EFBFBD><EFBFBD>
{
P2CON &= 0xFC; //TX/RX<52><58><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
P2PH |= 0x03;
SCON |= 0X50; //<2F><><EFBFBD><EFBFBD>ͨ<EFBFBD>ŷ<EFBFBD>ʽΪģʽһ<CABD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TXINX = 0x02;
TMCON |= 0X04;
TXMOD = 0X00;
TXCON = 0X30;
RCAPXH = Freq*1000000/baud/256;
RCAPXL = Freq*1000000/baud%256;
TRX = 0;
ET2 = 0;
EUART = 1; //<2F><><EFBFBD><EFBFBD>Uart<72>ж<EFBFBD>
EA = 1;
}
*/
/*****************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>void UartInt(void) interrupt 4
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>Uart<EFBFBD>жϺ<EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void
*<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void
*****************************************************/
void UartInt(void) interrupt 4
{
if(TI) //UART0<54><30><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
{
TI = 0;
UartSendFlag = 1;
}
if(RI) //UART0<54><30><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
{
RI = 0;
UartReceiveFlag = 1;
}
}
void UART_SendByte(uchar Byte)//<2F>ֽڷ<D6BD><DAB7><EFBFBD>
{
SBUF = Byte;
while(!UartSendFlag);
UartSendFlag = 0;
}
void UART_SendLong(long Dat)//32λ<32>Ӹߵ<D3B8><DFB5>ͷ<EFBFBD><CDB7><EFBFBD>
{
uchar i;
uchar temp[4];
temp[0] = (Dat >> 24) & 0xFF;
temp[1] = (Dat >> 16) & 0xFF;
temp[2] = (Dat >> 8) & 0xFF;
temp[3] = Dat & 0xFF;
for(i=0;i<4;i++)
{
UART_SendByte(temp[i]);
}
}
void UART_Send_VOFA(long uart_buff)
{
uchar j;
uchar buff;
uchar vofa_buff[8];
bit negative=0;
if(uart_buff<0)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>תԴ<D7AA><D4B4>
{
uart_buff=~uart_buff+1;
negative = 1;
}
for(j=0;j<8;j++)
{
vofa_buff[j] = (uart_buff % Cclt_Power(j+1,10)) / Cclt_Power(j,10);//16<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת10<31><30><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>˷<EFBFBD><CBB7><EFBFBD><E6A3AC>λ<EFBFBD>ڵ<EFBFBD><DAB5>ֽ<EFBFBD>
}
if(negative)
UART_SendByte(45);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for(j=0;j<8;j++)
{
buff = vofa_buff[7-j]+48;//<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>͸<EFBFBD>λ
UART_SendByte(buff);
}
}
void UART_SendAll(long* Dat)//4<><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼ<D4AD><CABC><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD><EFBFBD><EFBFBD>
{
uchar i,j;
uchar temp[4];
for(j=0;j<4;j++)
{
temp[0] = (Dat[j] >> 24) & 0xFF;
temp[1] = (Dat[j] >> 16) & 0xFF;
temp[2] = (Dat[j] >> 8) & 0xFF;
temp[3] = Dat[j] & 0xFF;
for(i=0;i<4;i++)
{
UART_SendByte(temp[i]);
}
}
}