📄 text1.c
字号:
#include "C8051F340.h"
#include <stdio.h>
#include <intrins.h>
// Peripheral specific initialization functions,
// Called from the Init_Device() function
void Reset_Sources_Init(void);
void Timer_Init(void);
void UART_Init(void);
void EMI_Init(void);
void Port_IO_Init(void);
void Oscillator_Init(void);
void Interrupts_Init(void);
void SendCommBuffer(unsigned char *base, unsigned int size);
#define DB_SENDMAXSIZE 10
#define DB_RECMAXSIZE 10
bit CommRecDataOverflowFlag,FlagRecComm,SendbufferOver;
unsigned int SendSize;
unsigned char CommSendBufferHead, CommSendBufferTail;
unsigned char xdata CommSendBuffer[DB_SENDMAXSIZE];
unsigned char CommRecBufferHead, CommRecBufferTail;
unsigned char xdata CommRecBuffer[DB_RECMAXSIZE];
void main()
{
PCA0MD &= ~0x40;
Port_IO_Init();
Oscillator_Init();
Reset_Sources_Init();
Timer_Init();
Interrupts_Init();
UART_Init();
EMI_Init();
TR1 = 1;
SendCommBuffer("1234567890987654\n",17);
SendCommBuffer("liaoww12345\n",12);
SendCommBuffer("liqiao ai liaowuwu\n",19);
while(1);
}
void Reset_Sources_Init()
{
int i = 0;
VDM0CN = 0x80;
for (i = 0; i < 350; i++); // Wait 100us for initialization
RSTSRC = 0x86;
}
void Timer_Init()
{
TMOD = 0x22;
CKCON = 0x00;
TL1 = 0xD0;
TH1 = 0xD0;
}
void UART_Init()
{
SCON0 = 0x10;
SBRLL1 = 0xD0;
SBRLH1 = 0xFF;
SCON1 = 0x10;
SBCON1 = 0x43;
}
void EMI_Init()
{
EMI0CF = 0x43;
}
void Port_IO_Init()
{
P0MDIN = 0x3F;
P0MDOUT = 0x0F;
P0SKIP = 0xC8;
P1SKIP = 0xF9;
XBR0 = 0x09;
XBR1 = 0x70;
XBR2 = 0x01;
}
void Oscillator_Init()
{
int i = 0;
OSCXCN = 0x67;
for (i = 0; i < 3000; i++); // Wait 1ms for initialization
while ((OSCXCN & 0x80) == 0);
CLKSEL = 0x01;
OSCICN = 0xA3; //内部振荡器使能,但不接USB时不工作
CLKMUL = 0x80;
for (i = 0; i < 20; i++); // Wait 5us for initialization
CLKMUL |= 0xC0;
while ((CLKMUL & 0x20) == 0);
REG0CN = 0xB0;
}
void Interrupts_Init()
{
EIE1 = 0x02;
EIE2 = 0x02;
IE = 0x90;
}
void SendCommBuffer(unsigned char *base, unsigned int size)
{
unsigned int i,k;
unsigned char j,t;
i = 0;
j = 0;
k = DB_SENDMAXSIZE;
if (!size) { return; }
SendSize = size;
if (!(size%DB_SENDMAXSIZE))
t = size/DB_SENDMAXSIZE;
else
t = size/DB_SENDMAXSIZE+1;
for (j =0 ;j<t;j++)
{
while (i < k)
{
CommSendBuffer[CommSendBufferTail]=base[i];
i++;
CommSendBufferTail++;
}
SBUF0=CommSendBuffer[CommSendBufferHead];
while (!SendbufferOver);
SendbufferOver = 0;
k = DB_SENDMAXSIZE+k;
CommSendBufferTail = 0;
}
CommSendBufferHead =0;
CommSendBufferTail = 0;
}
void CommISR(void) interrupt 4
{
if (TI0 == 1)
{
TI0 = 0;
if (SendSize--) //SendSize--和--SendSize效果一样
{
CommSendBufferHead++;
if (CommSendBufferHead==DB_SENDMAXSIZE)
{
CommSendBufferHead=0;
SendbufferOver = 1;
}
else
{
SBUF0=CommSendBuffer[CommSendBufferHead];
}
}
else
{
SendbufferOver = 1;
}
}
if (RI0 == 1)
{
RI0 = 0;
if (CommRecBufferTail==CommRecBufferHead)
{
CommRecDataOverflowFlag=1; //接收缓冲区溢出
}
CommRecBuffer[CommRecBufferTail]=SBUF0; //receive data
CommRecBufferTail++;
if (CommRecBufferTail==DB_RECMAXSIZE)
{
CommRecBufferTail=0;
}
FlagRecComm=1;
}
}
//-----------------------------------------------------------------------------
// End Of File
//-----------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -