在解决好多bug后终于实现了双串口之间的相互收发,但是主管说写的程序很垃圾,但是终于能用了,还是很开心,在指导下会进一步修改,如果只是完成作业的话可以借鉴一下,话不多说,继续码上
在这里插入
//***********************************************************************************************************
// File Function: N76E003 UART-0 Mode1 demo code
//***********************************************************************************************************
/*
* @file name: UART
* @decrption: 串口0的数据转发的串口1,注意发送时间间隔,缓存数组自定义大小再使用哦
* @author: 1027朵玫瑰花
* @date: 2020-5-1
* @history:
*/
#include "N76E003_iar.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"
#define BUFFER_SIZE 16
#define UART0_BAUD 115200
#define UART1_BAUD 115200
UINT8 UART_BUFFER[BUFFER_SIZE];
UINT8 riflag; //判断标志位
UINT8 riflag_1;
UINT8 TI_flag = 0;
UINT8 TI_1_flag = 0;
UINT8 flag; //检验标志位
UINT8 flag_1;
UINT8 buffer[40] = {0}; //缓存数组
UINT8 buffer_1[40] = {0};
UINT8 i = 0;
UINT8 j = 0;
void main (void)
{
P15_PushPull_Mode; // For I/O toggle display
InitialUART0_Timer1(UART0_BAUD);//初始化
InitialUART1_Timer3(UART1_BAUD);
printf_UART("lun"); //个人小标记
set_ES; //For interrupt enable
set_ES_1;
set_EA;
while (1)
{
if (flag != 0)
{
clr_ES_1; //关闭串口1中断,实测两个中断不能同时使用
riflag = flag;
Timer0_Delay1ms(100); //发送的一个行为结束
P15 = ~P15; //呼吸灯指示
while (riflag = flag) //开始转发
{
for(i = 0; i < flag; i++)
{
TI_1_flag = 0;
SBUF_1 = buffer[i];
while (!TI_1_flag);
clr_TI_1;
}
i = 0;
flag = 0;
riflag = 0;
}
set_ES_1;
}
if (flag_1 != 0)
{
clr_ES;
riflag = flag_1;
Timer0_Delay1ms(100);
P15 = ~P15;
while (riflag = flag_1)
{
for(j = 0; j < flag_1; j++)
{
TI_flag = 0;
SBUF = buffer_1[j];
while (!TI_flag);
clr_TI;
}
j = 0;
flag_1 = 0;
riflag = 0;
}
set_ES;
}
}
}
#pragma vector = 0x23
__interrupt void SerialPort_ISR (void)
{
if (RI)
{
clr_RI;
buffer[i] = SBUF;
i++;
flag++;
}
if (TI)
{
TI_flag = 1;
clr_TI;
}
}
#pragma vector = 0x7b
__interrupt void SerialPort1_ISR (void)
{
if (RI_1)
{
clr_RI_1;
buffer_1[j] = SBUF_1;
j++;
flag_1++;
}
if (TI_1)
{
TI_1_flag = 1;
clr_TI_1;
}
}
上一篇:新唐N76E003ISP串口下载轻体验
下一篇:史上最全新唐 ISP烧录教程
推荐阅读最新更新时间:2024-11-04 04:39