📄 main.c
字号:
/*C语言函数
*/
#define U32 unsigned int
#define U16 unsigned short
#define S32 int
#define S16 short int
#define U8 unsigned char
#define S8 signed char
#include "2410addr.h"
/*定义接收缓冲区*/
volatile U8 RBuff[256];
volatile U8 index;
extern void delay(int time); /*声明汇编函数*/
/*串口发送子程序*/
void UART0_Tx(U8 data)
{
if(rUTRSTAT0 & 0x2) /*判断发送器buffer是否为空*/
{
rUTXH0=data;
}
while(!(rUTRSTAT0 & 0x4)); /*判断发送器buffer和串口移位寄存器是否为空,若不空,表明UART0还在发送数据,于是循环等待*/
}
/*串口接收子程序*/
U32 UART0_Rx(void)
{
while(1)
{
if(rUTRSTAT0 & 0x1)
{
RBuff[index++]=rURXH0;
}
if((rGPFDAT&0x0002)==0 || (index==255)) //若按键4按下或者index=255,则退出串口接收子程序
return 1;
}
}
void Main()
{
U8 i;
rMPLLCON=0x00074012; /*设置MPLL输出为124MHz*/
rCLKCON=0x7fff0; /*使能外围部件时钟,也就是UART0使用的时钟,其实0x7fff0是复位值*/
rCLKDIVN=0x03; /*设置HCLK=FCLK/2,PCLK=HCLK/2,由于寄存器CLKSLOW的默认值使得FCLK=MPLL输出,所以PCLK=124/4=31M */
rGPFCON=0x0; /*设置I/O口的GPF1为输入*/
rGPFUP=0xffff; /*禁止GPF端口的上拉*/
rGPHCON=rGPHCON & (~(0xffff));
rGPHCON=rGPHCON | (0xaaa0);
rGPHUP=0xffff;
rULCON0=0x03; /*设置UART0传输模式:8位数据,一位停止位,无奇偶位*/
rUCON0=0x0245; /*设置UART0工作模式:串口时钟,中断OR DMA方式等等*/
rUFCON0=0x0; /*禁止FIFO*/
rUMCON0=0x0; /*禁止Auto Flow Control(AFC)*/
//rUBRDIV0=0x0f; /*设置UART0的波特率为115200bps */
rUBRDIV0=( (int)(31000000/16./115200+0.5) -1 );
index=0;
while(1)
{
if((rGPFDAT&0x0002)==0) /*若按键S4按下,则调用串口发送子程序*/
{
for(i=0;i<20;i++)
{
UART0_Tx(i);
}
delay(0x3ffff);
}
if((rGPFDAT&0x0001)==0) /*若按键S2按下,则调用串口接收子程序*/
{
index=0;
UART0_Rx();
delay(0x3ffff);
i=index;
index=0;
while(i-- && index!=255)
{
UART0_Tx(RBuff[index]);
index++;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -