dsPIC33F串口通讯中断接收发送数据UART

发布者:数字驿站最新更新时间:2016-06-14 来源: eefocus关键字:dsPIC33F  串口通讯  中断  接收发送数据 手机看文章 扫描二维码
随时随地手机看文章
/*
 功能描述: 串行通讯程序,DSP中断收到8个数据后,将收到的8个数
据以中断发送方式返送回发送方。
* */
#include	"p30f6014.h"				//ds30f6014头文件
unsigned	int		receive[8];  		// 接收数据数组
unsigned	int		send[8];			// 发送数据数组
unsigned	int		receive_count=0;		// 接收数据个数计数
unsigned	int		send_count=0;		// 发送数据个数计数
unsigned	int		*pointer;			// 发送指针
unsigned	int		Receiveflag;		// =1,接收到8个数据
/* 
 函 数 名: Uart_Initial()
 功能描述: 232串行通讯初始化子程序,设置中断优先级
* */
void	Uart_Initial()
{
	IFS0bits.U1TXIF=0;			//复位发送中断标志位
	IFS0bits.U1RXIF=0;			//复位接收中断标志位  
	IPC2bits.U1RXIP=1;			//收中断优先级:1级  
	IPC2bits.U1TXIP=1; 
	U1MODE=0x8000; 			//UART使能,8位数据,无奇偶校验 	
	U1STA=0x0000;			//当一个字符被传输到发送移位寄存器(发送缓冲器中
					//至少还有一个字符)产生中断,当接收到一个字符时,//中//断标志位置位
	U1BRG=0X34;			//U1BRG=Fcy/(16*波特率)-1,此处波特率为9600
}
/* 
 函 数 名: __attribute__((__interrupt__)) _U1RXInterrupt()
 功能描述: 中断子程序:232接收中断
* */
void __attribute__((__interrupt__)) _U1RXInterrupt()
{
	while(U1STAbits.URXDA==1)  
	{IFS0bits.U1RXIF=0;
	receive[receive_count]=U1RXREG;		// 接收数据并存储
	send[receive_count]=receive[receive_count];
	receive_count++;				// 接收计数器加1
	if(receive_count>7)			// 如果已经接收到8个数据
	{
	receive_count=0;				// 接收计数器清0
	Receiveflag=1;				// 置接收到数据标志
	}
}
}
/* 
 函 数 名: __attribute__((__interrupt__)) _U1TXInterrupt()
 功能描述: 中断子程序:232发送中断
* */
void __attribute__((__interrupt__)) _U1TXInterrupt()
{	
	IFS0bits.U1TXIF=0;	
	if(send_count>7)				//如果发送数据个数大于7
	{
	send_count=0;				//发送数据个数清零
	U1STAbits.UTXEN=0;				//已经发送到最后一个数,发送不使能		
	return;
	}		
	else
	{
	send_count++;				// 否则,发送计数器加1 
	U1TXREG=send[send_count];
	}
}
main()
{
Uart_Initial();					// 串行通讯初始化子程序
IEC0bits.U1RXIE=1; 				//UART1接收和发送中断使能
IEC0bits.U1TXIE=1;
while(1)
{
	if(1==Receiveflag)				// 是否接收到通信数据
	{
	Receiveflag=0;				// 清接收标志
	U1STAbits.UTXEN=1;				// 使能发送
	U1TXREG=send[0];				//先发送第一个数据
	}
}
}
关键字:dsPIC33F  串口通讯  中断  接收发送数据 引用地址:dsPIC33F串口通讯中断接收发送数据UART

上一篇:STM8L101F3P6查询发送中断接收
下一篇:CC2530串口接收发送数据

推荐阅读最新更新时间:2024-03-16 14:57

STM32外部中断和IWDG
实验平台:正点原子战舰开发板 系统:windows 7 64位 编译器:MDK 4.72a 参考例程:ATK串口例程,野火ISO串口例程 外部中断 中断主要分为两种: 1、系统异常中断也可以说的内核异常,这类异常中断有些是不可以控制的,如RESET,NMI,FAULT. 2、外部中断,这些中断都是可以设置的,每个GPIO都可以被设置为中断。 一、NVIC控制器 当要使用中断时候都要对NVIC进行设置 void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct); NVIC_IRQChannel 需要配置的中断线 NVIC_IRQChannelCmd 使能或关闭相应中断向量的
[单片机]
ARM Linux中断分析
简介:linux在初始化的时候已经把每个中断向量的地址准备好了!就是说添加中断服务程序的框架已经给出,当某个中断发生时,将会到确定的地址处去找指令,所以我们做驱动程序时,只需要经过request_irq来挂接自己编写的中断服务程序即可。 ARM体系结构中,把复位、中断、快速中断等都看作‘异常’,当这些‘异常’发生时,CPU会到固定地址处去找指令,他们对应的地址如下: 地址 异常类型 进入时的工作模式 0x00000000 Reset Supervisor 0x00000004 Und Undefined 0x00000008 Soft interupt Supervisor 0x0000000c Abort(prefetc
[单片机]
如何判断CPU是否正在执行中断函数?
1.这是一个有许多经验的攻城狮都遇到过的坑,本文教你正确绕过这个坑; 2.教大家了解__get_CONTROL的用法,及xQueueSend和xQueueSendFromISR的区别; Ⅰ 问题来源 今天在FreeRTOS系统上移植了部分别人写的代码,移植前仔细看了下源码,确认没问题后,编译,下载,运行,突然“死机了”······ 于是,我又再次确认了移植的代码,没有发现Bug所在。此时,我开启了在线调试功能,发现程序死在了“vPortEnterCritical”函数中的断言语句里。如下: Ⅱ 解决问题的过程 我解决问题还是按照常规思维,一步一步跟踪,很多问题其实都是类似道理,有规律可循
[单片机]
如何判断CPU是否正在执行<font color='red'>中断</font>函数?
MSP430 G2553 Timer 中断总结
目前总共用到了四个中断向量,我觉得已经把G2553的所有定时器中断都用到了。 定时器有两个,TA0与TA1,每个定时器又有两个中断向量 1,CCR0到达时的中断,在计数模式时候很有用,平时定时器的基本功能。 2,CCR1,CCR2,以及 overflow时候的中断向量,这里面又有三个中断标志。 #define TIMER0_A1_VECTOR (8 * 2u) /* 0xFFF0 Timer0)A CC1, TA0 */ #define TIMER0_A0_VECTOR (9 * 2u) /* 0xFFF2 Timer0_A CC0 */ . . #define TIMER1_A1_VECTOR (12 *
[单片机]
定时中断30秒倒计时闹铃程序
定时中断30秒倒计时闹铃程序 #include reg52.h char shuju ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0--9 char a=3,b=0,i=0; char flag; sbit f=P3^7; /********* 延时子程序 *********/ void delay(unsigned int x) { while(x--); } void  FM qdelay(unsigned int t) {  unsigned int i,j;   for(i=0;i t*5;i++)    for(j=0;j 255;j++); } /*
[单片机]
CH375在机车智能测温系统中的应用
0 引 言 本文来源于一机车智能测温项目(功能模块如图1所示)。在列车或其他重要电工场合,重要部件的温度变化是极需重视的安全参数,必须为其设计智能温度监测系统。当温度超标时,不但要能及时报警,还要实时记录并保存精确的时间、温度数据。通过对危险时刻及该时刻对应温度数据进行统计分析,可以检出不安全因素发生的规律,以制定有效的预防措施。 在图1中,数据存储模块采用USB总线接口方式,主要是由于USB具有可“热插拔”的特性,使保存数据的操作更为简便。采用CH375作USB接口芯片,则是基于以下因素的考虑。 一般情况下,单片机或嵌入式系统处理USB存储设备的文件系统需要实现USB-HOST硬件接口数据交换层、传输协议层、SCSI
[测试测量]
关于Stm32内核外设Systick与普通外设中断优先级的比较
有网友经实验验证,Systick虽然作为与CPU紧耦合的内核外设,但其中断优先级并不比普通外设要高,并不因为它是内核外设而特殊,它还是遵循中断优先级高低的规则来响应。 https://blog.csdn.net/To_be_a_fisher/article/details/84986790 Systick优先级是最低的 https://www.cnblogs.com/jieruishu/p/4444701.html Systick虽然作为与CPU紧耦合的内核外设,但其中断优先级并不比普通外设要高,并不因为它是内核外设而特殊,它还是遵循中断优先级高低的规则来响应。 NVIC_SetPriority (SysTi
[单片机]
51单片机边沿触发中断响应时刻的测量
MCS51单片机系列属于8位单片机,它是Intel公司继MCS48系列的成功设计之后,于1980年推出的产品。由于MCS51系列具有很强的片内功能和指令系统,因而使单片机的应用发生了一个飞跃,这个系列的产品也很快成为世界上第二代的标准控制器。51系列单片机有5个中断源,其中有2个是外部输入中断源INT0和INT1。可由中断控制寄存器TCON的IT1(TCON.2)和IT0(TCON.1)分别控制外部输入中断1和中断0的中断触发方式。若为0,则外部输入中断控制为电平触发方式;若为1,则控制为边沿触发方式。这里是下降沿触发中断。 1 问题的引出 几乎国内所有的单片机资料对单片机边沿触发中断的响应时刻方面的定义都是不明确的或者是错误
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved