/********************************************************************************************************
*********************************************************************************************************
*
* File                : RS232.c
* Hardware Environment:	easyPIC pro v2
* Build Environment   : MPLAB V8.66 + PIC32 V2.01
* Microcontroller     : PIC32MX795F512L
* Version             : V1.0
* By                  : JEFF
* DATE				  : 20150320
*
*(c) Copyright 2010-2018, Logifind Tech CO.,LTD
*http://www.logifind.com
*All Rights Reserved
*
*********************************************************************************************************
********************************************************************************************************/
//实验描述：单片机 AN14 采集 电位器 电压，同时串口发出10位AD数据;
//          LED、LCD 显示AD值,LED7 运行指示
//
//波 特 率：9600  N 8 1   内部FRC
//
//注意事项：RS232 采用交叉线

#include <plib.h>
#include <p32xxxx.h>                 //调用头文件


// POSCMOD = XT, FNOSC = PRIPLL, FWDTEN = OFF
// PLLIDIV = DIV_2, PLLMUL = MUL_20
// PBDIV = 4 (default)
// Main clock = 4MHz /2 * 20    =  40MHz
// Peripheral clock = 40MHz /4  =  10MHz
// SYSCLK = 40 MHz (4MHz Crystal/ FPLLIDIV * FPLLMUL / FPLLODIV)
// PBCLK  = 10 MHz
// WDT OFF


#pragma config FPLLMUL  = MUL_20     //PPL 倍频比
#pragma config FPLLIDIV = DIV_2      //输入分频比
#pragma config FPLLODIV = DIV_1      //输出分频比
#pragma config FWDTEN   = OFF        //关闭看门狗
#pragma config POSCMOD = XT          //主振荡器  
#pragma config FNOSC   = PRIPLL      //倍频模式 
#pragma config FPBDIV  = DIV_4       //外设时钟
    

void Delay_xmS(unsigned int i)                     //延时程序
{
	unsigned int j;
	for(;i>0;i--)
	{
		Nop();
		for(j=0;j<255;j++)
		{
			Nop();
			ClearWDT();
		}
	}	
}
	
void UART1_Init(void)
{
	U1MODEbits.STSEL = 0;            // 1个停止位
	U1MODEbits.PDSEL = 0;            // N , 8, 1
	U1MODEbits.ABAUD = 0;            // 自动波特率禁止
	U1MODEbits.RTSMD = 1;            // 引脚处于单工模式
	U1MODEbits.BRGH  = 0;            // 16x标准波特率

	U1BRG = 64;                      // PBCLK 10MHz  N 8 1 9600 BRG = 64;

	U1STAbits.UTXISEL1 = 1;          // 发送一个字符后中断
	U1STAbits.UTXISEL0 = 0;
	                                                 
	U1STAbits.URXISEL1 = 0;          // 接收一个字符后中断
	U1STAbits.URXISEL0 = 0;
	
	U1STAbits.UTXEN   = 1;           // 使能发送器
	U1STAbits.URXEN   = 1;           // 使能发送器
	
	U1MODEbits.ON  = 1;              // 使能串口
	
	IEC0bits.U1RXIE = 1;             // 允许接收中断
	IEC0bits.U1TXIE = 0;             // 允许发送中断
	
	INTEnableSystemMultiVectoredInt(); //使能中断多向量表
}

void __attribute__((interrupt(IPL4)))__attribute__ ((vector(24)))_U1RXInterrupt(void)
{
	U1TXREG = U1RXREG;               // 发送所接收到的数据
	IFS0bits.U1RXIF = 0;
}

//void __attribute__((interrupt(IPL4)))__attribute__ ((vector(24)))_U1TXInterrupt(void)
//{
//	IFS0bits.U1TXIF = 0;
//}

void UART1_Send_byte(unsigned char temp)        // 发送一个字节
{ 
	while(U1STAbits.UTXBF);                     //等待发送完成
	U1TXREG = temp;	
}

void UART1_Send_char(unsigned char *buffer)     // 发送一个字符串
{
	char * temp_ptr = (char *)(buffer);
	while(*temp_ptr != '\0')
	{
		while(U1STAbits.UTXBF);       //等待发送完成
		U1TXREG = *temp_ptr++;        //地址加1
	}
}



unsigned char line1[] = "www.logifind.com";       //字符串
unsigned char line2[] = "logifind tech co.,ltd";       //字符串
unsigned char line3[] = "easyPIC PRO V1";       //字符串
unsigned char line4[] = "SKYPE:love100mhz";       //字符串

int main(void)
{
	unsigned char temp = 0;
	unsigned int ADCValue = 0;
	AD1PCFG = 0xFFFF;             //所有引脚为数字I/O
	TRISB = 0xFFDF;               //设置B端口为输入
	TRISG = 0x0000;               //设置G端口为输出
	TRISE = 0xFF00;               //设置E端口为输出
	TRISD = 0xF1FF;               //设置D端口为输出
	
	
	UART1_Init();                 //串口通信初始化             

	
	LATE = 0x00FF;                //点亮 D0 - D7
	Delay_xmS(800);
	LATE = 0x0000;                //关闭 D0 - D7
	Delay_xmS(800);
	LATE = 0x00FF;                //点亮 D0 - D7
	Delay_xmS(800);
	LATE = 0x0000;                //关闭 D0 - D7
	Delay_xmS(800);

	while(1)
	{

		
		UART1_Send_char(line1);  //发送字符串	
		UART1_Send_byte('\r');     //回车换行1次
		UART1_Send_byte('\n');
		UART1_Send_byte('\r');     //回车换行2次
		UART1_Send_byte('\n'); 
		Delay_xmS(600);

		UART1_Send_char(line2);  //发送字符串	
		UART1_Send_byte('\r');     //回车换行1次
		UART1_Send_byte('\n');
		UART1_Send_byte('\r');     //回车换行2次
		UART1_Send_byte('\n'); 
		Delay_xmS(600);

		UART1_Send_char(line3);  //发送字符串	
		UART1_Send_byte('\r');     //回车换行1次
		UART1_Send_byte('\n');
		UART1_Send_byte('\r');     //回车换行2次
		UART1_Send_byte('\n'); 
		Delay_xmS(600);

		UART1_Send_char(line4);  //发送字符串	
		UART1_Send_byte('\r');     //回车换行1次
		UART1_Send_byte('\n');
		UART1_Send_byte('\r');     //回车换行2次
		UART1_Send_byte('\n'); 
		Delay_xmS(600);



	}
}