📄 uart0_f340.c
字号:
#include <c8051f340.h>
#include <string.h>
#include "uart0_f340.h"
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
//??????
//P0.4棗 MCU TXD;
//P0.5棗MCU RXD;
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
//????
static char Byte; //???????(1??)
bit read_flag= 0 ; //???????
HexTable[]={'0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F'};//??????
/*--------------------------------------------------------------*/
/***********************************************************
????:Oscillator_Init
????:???????24M????????
????:?
????:?
? ?:
??:Oscillator_Init();
***********************************************************/
void Oscillator_Init()//???????24M????????
{
int i = 0;
CLKMUL = 0x80;
for (i = 0; i < 20; i++); // Wait 5us for initialization
CLKMUL |= 0xC0;
while ((CLKMUL & 0x20) == 0);
CLKSEL = 0x02;
OSCICN = 0x83;
}
/***********************************************************
????:UART_Init
????:UART0????8?UART?
????:?
????:?
? ?:??: UART_Init();
***********************************************************/
void UART_Init()
{
SCON0 = 0x10; //(SCON0?8?)S0MODE=0 ???????8?UART
//(SCON0?5?)MCE0 =0 ???????????
//(SCON0?4?)REN0 =1 UART0 ????
}
/***********************************************************
????:Interrupts_Init
????:???????UART0??,????,??UART0??????
????:?
????:?
? ?:
***********************************************************/
void Interrupts_Init()
{
IP |= 0x10; // Make UART high priority
//(IP?4?)PS0=1
IE = 0x90; //(IE?7?)EA =1 ???????????????????????
//(IE?4?)ES0=1 ??UART0??
}
/***********************************************************
????:Timer_Init
????:???1????????1???8????,?????
????:?
????:?
? ?: ??:Timer_Init();
***********************************************************/
void Timer_Init()
{
TMOD = 0x20; //???1?????????8???? T1M1-T1M0
//CKCON = 0x01; //12MHZ?,SYSCLK/4
TCON = 0x40; // ????? TCON= 0x40 , START Timer1 ????1
TH1 = 0x98; //24MHZ?,???1?????? ??????9600bps
//TH1 = 0x64; //12MHZ?,???1?????? ??????9600bps
}
/***********************************************************
????:Port_IO_Init
????:??IO??????????
????:?
????:?
? ?:
??:Port_IO_Init();
***********************************************************/
void Port_IO_Init() //??IO??????????
{
PCA0MD &= ~0x40; //????????,???????????
XBR0 = 0x01; //??uart0?IO?
XBR1 = 0x40;
P1MDOUT = 0xFF; //P1???????
P1MDIN = 0XFF;
P2MDOUT = 0xFF; //P2???????
P3MDOUT = 0xff;//P3口推挽输出
P3MDIN = 0Xff;//P3数字输入
}
/***********************************************************
????:Init_Device
????:C8051???
????:?
????:?
? ?: ??:Init_Device();
***********************************************************/
void Init_Device(void)
{
Oscillator_Init(); //???????24M????????
Timer_Init(); //??????
UART_Init(); //UART0???
Interrupts_Init(); //?????
Port_IO_Init(); //IO????
}
/***********************************************************
????:UART0_Interrupt
????:?????????????????,???????RI0,?????????read_flag
????:?
????:Byte
read_flag = 1
? ?: ??:
***********************************************************/
void UART0_Interrupt (void) interrupt 4
{
if (RI0 == 1)
{
RI0 = 0; // ???????RI0
Byte = SBUF0; // ?????????
read_flag= 1 ; //???????
}
}
/***********************************************************
????:UART_Send_Char
????:??????????
????:uchar sendByte ??????(8 bit)
????:?
? ?:??:UART_Send_Char('0');
***********************************************************/
void UART_Send_Char(uchar sendByte)
{
SBUF0=sendByte;
while (TI0== 0); //??????
TI0= 0; //???????TI0
}
/***********************************************************
????:UART_Send_Str
????:??????????
????:char *str ????????
????:?
? ?: ??:UART_Send_Str("START:");
***********************************************************/
void UART_Send_Str(char *s)
{
int len=strlen(s);
int i;
for(i=0;i<len;i++)
UART_Send_Char(s[i]);
}
/********************************************************************
????:UART_Send_10Int
????:??????????????
????:x:???????
? ?:??
? ?: ??: UART_Send_10Int(13252);
********************************************************************/
void UART_Put_Num(unsigned long int x)
{
int i;
uchar display_buffer[10];
for(i=9;i>=0;i--)
{
display_buffer[i]='0'+x%10;
x/=10;
}
for(i=0;i<9;i++)
{
if(display_buffer[i]!='0')break;
}
for(;i<10;i++) UART_Send_Char(display_buffer[i]);
}
/********************************************************************
????:UART_Send_4Hex
????:????????????
????:?????? uint x?
? ?:??
? ?:??:UART_Send_4Hex(65535);
********************************************************************/
void UART_Send_4Hex(uint x)
{
uchar i;
uchar display_buffer[7];
display_buffer[6]=0;
display_buffer[0]='0';
display_buffer[1]='x';
for(i=5;i>=2;i--) //??????4????HEX?
{
display_buffer[i]=HexTable[(x&0xf)];
x>>=4;
}
UART_Send_Str(display_buffer);
}
/********************************************************************
????:UART_Send_8Hex
????:????????????
????:?????? unsigned long x?
? ?:??
? ?:??:UART_Send_8Hex(655351);
********************************************************************/
void UART_Send_8Hex(unsigned long x)
{
uchar i;
uchar display_buffer[11];
display_buffer[10]=0;
display_buffer[0]='0';
display_buffer[1]='x';
for(i=9;i>=2;i--)
{
display_buffer[i]=HexTable[(x&0xf)];
x>>=4;
}
UART_Send_Str(display_buffer);
}
/**************************************************************************
- ????:51????????????
- ????:STC51????
- ????:??,?????
- ????:inf:????????????
dat:????,???????????????????
- ????:?
- ?:???????????????,???????
**************************************************************************/
void UART_Put_Inf(char *inf,unsigned long int dat)
{
UART_Send_Str(inf);
UART_Put_Num(dat);
UART_Send_Str("\r\n");
}
void UART_Send_Enter()
{
UART_Send_Str("\r\n");
}
/****************************end****************************/
/****************************end****************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -