/****************************************************************************************
 * KF8F系列单片机KF8F3132开发板演示程序
 * 文件名: main.c
 * 项目名: UART_3132
 * 版 本: v1.0
 * 日 期: 2019年03月28日 20时04分50秒
 * 作 者: 上海芯旺微电子有限公司
 * 功能简述: 使用UART模块实现多字节连续的收发实验。
 * 		   上电时默认配置UART1为波特率9600、8位数据位、1位停止位、无奇偶校验位。
 * 		   按键S2按下时，默认配置UART1为波特率9600、8位数据位、1位停止位、奇校验。
 * 		   按键S1、S2同时按下时，默认配置UART1为波特率9600、8位数据位、1位停止位、偶校验。
 * 		   在配置成对应的模式后，电路板会返回串口接收到的数据。
 * 		   在无校验的模式： 电脑端的串口助手发送十六进制的1H， 开发板返回“HELLO！”。若串口助手发送十六进制的2H，开发板返回“ByeBye！”
 * 跳线说明：实验时，需要用USB—UART转接模块，连接开发板和PC。
 * 		      串口助手设置为对应的模式。
 * 		  USB—UART模块的TX——开发板的P01
 * 		  USB—UART模块的RX——开发板的P00
 * 		  USB—UART模块的GND——开发板的GND
 * 		  USB—UART模块的5V——开发板的VCC
 ****************************************************************************************/
#include"main.h"

volatile uchar  Rev_Temp=0, Mode=0;
uchar BUF1[10]={0}; //发送缓存

//主函数
void main()
{
	Init_osc();
	Init_GPIO();
	if(S2)//按键松开则无校验
	{
		Init_uart(0);
	}
	else//按键按下时开启校验功能
	{
		Init_uart(1);//使能第9位收发，准备进行奇偶校验
		if(S1)//S1按键松开
			Mode=1;//奇校验
		else
			Mode=2;//偶校验
	}

	Init_intrup();

	while(1)
	{
		if(Rev_Temp==1)//收到十六进制的1H时，返回“HELLO！”
		{
			Write_hello();
			Uart_send(7);
			Rev_Temp=0;
		}

		if(Rev_Temp==2)//收到十六进制的1H时，返回“ByeBye！”
		{
			Write_Bye();
			Uart_send(8);
			Rev_Temp=0;
		}
	}
}
//中断函数0:0X04入口地址
void int_fun0() __interrupt (0)
{
	if(RC1IF)
	{
		if(OVFER1==1)
		{
			CRXEN1=0;       // 清溢出错误
			CRXEN1=1;       // 重新使能接收
		}
		switch(Mode)
		{
			case 0:
			Rev_Temp=RXSDR1;  // 清零 RXIF
			TXSDR1=Rev_Temp;//原值返回
			while(TXSRS1==0);
			break;

			case 1:
			Rev_Temp =Rec_Byte(Mode);//奇校验
			UartPutchar(Rev_Temp,Mode);
			Rev_Temp =0;
			break;

			case 2:
			Rev_Temp =Rec_Byte(Mode);//偶校验
			UartPutchar(Rev_Temp,Mode);
			Rev_Temp =0;
			break;
		}
	}
}


//中断函数1:0x14入口地址
void int_fun1() __interrupt (1)
{

}
