关于串口1,串口0中断的相关寄存器配置请看N76E003双串口中断配置、问题及解决方法
完整代码已在本文中贴出,如出现无法编译的问题,可以考虑下载本文的工程文件
工程文件在此下载
串口1控制寄存器与串口0命名上后置”_1”再次不再赘述,官方技术手册表述如下
N76E003包含两个具备增强的自动地址识别和帧错误检测功能的全双工串口。由于两个串口的控制位是
一样的,为了区分两个串口控制位,串口1的控制位以“ _1”结尾(例如SCON_1)
此外,请注意debug与串口1不可同时使用
N76E003 UART1 pin also occupied by debug pin,
please remove Nu-link or not in debug mode to test UART1 function.
External UART1 connect also disturb debug download
#include "N76E003.h"
#include "SFR_Macro.h"
#include "Function_define.h"
#include "Common.h"
#include "Delay.h"
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar IRCOM[7];
uchar ZTJ=0,flag=0,count=0;
uchar UART0_RX_BUF[2],UART1_RX_BUF[2];//串口0,串口1数据接收缓冲区
uchar UART0_RX_STA=0,UART1_RX_STA=0;//串口0,串口1接收计数器
bit riflag;
void delay(uchar x)
{
uchar y;
while(x--)
{
for(y = 0; y<158; y++)
{
_nop_();
}
}
}
/**********************************************************/
//等待延时程序,注意如果使用官方延时程序,可能会与其他中断程序冲突
void delay1(int ms)
{
unsigned char y;
while(ms--)
{
for(y = 0; y<250; y++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/******************************************************************/
int main()
{
Set_All_GPIO_Quasi_Mode;
//——————串口0,串口1引脚初始化--------------
set_P02;
set_P06;
set_P07;
set_P16;
//----------串口1、串口0配置----------------
IE = 0x90;//允许总中断中断,串口0中断
set_ES_1;//开启串口1中断使能
InitialUART0_Timer1(9600);
InitialUART1_Timer3(9600);
//在不配置SM1,SM2寄存器的情况下,默认工作在模式0(半双工)
//---------输入你自己的代码-------------------
while(1)
{
}
}
/******************中断服务程序*****************************/
/****************串口0中断服务程序***************************/
void Uart0_test() interrupt 4
{
if(RI)//串口0接收中断标志(有数据时,硬件置1)
{
RI=0;//软件置0
UART0_RX_BUF[UART0_RX_STA]=SBUF ;//从SBUF缓存中读取接收到的数据
UART0_RX_STA++ ; //计算接收长度
// if(){}//进行数据校验,通过RX_BUF&RX_STA
UART0_RX_STA=0;//清空接收计数器
// Send_Data_To_UART0();//发送函数,该函数自动对TI清空(TI寄存器在发送完成后硬件置位)
}
}
/****************串口1中断服务程序***************************/
void Uart1_test() interrupt 15
{
if(RI_1)//进中断
{
RI_1=0;
UART1_RX_BUF[UART1_RX_STA]=SBUF ;//从SBUF缓存中读取接收到的数据
UART1_RX_STA++ ; //计算接收长度
// if(){}//进行数据校验,通过RX_BUF&RX_STA
UART1_RX_STA=0;//清空接收计数器
// Send_Data_To_UART1();//发送函数,该函数自动对TI_1清空
}
}