IAR 串口调试,基于新唐n76e003的双串口透传程序设计

IAR 串口调试,基于新唐n76e003的双串口透传程序设计

5 1 期间在解决好多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;
    }

}
代码片

学习之路艰难,会越来越好滴…

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值