社区
其他硬件开发
帖子详情
如何实现串口中断接收数据???(急!!!)散分
jessiepan
2003-04-16 04:45:40
你好!
我现在在做开发,用的是Z-World公司推出的LP3500单板机,有没有哪位大虾也在用,或是曾经用过。可以切磋切磋吗?
我现在需要通过LP3500的板子上面的Serial Port与外界通讯,如何编程实现中断接收数据,是中断方式接收!!! 急。
我的联系方式:pan-guo@163.net 或 panguo@yeah.net
...全文
100
6
打赏
收藏
如何实现串口中断接收数据???(急!!!)散分
你好! 我现在在做开发,用的是Z-World公司推出的LP3500单板机,有没有哪位大虾也在用,或是曾经用过。可以切磋切磋吗? 我现在需要通过LP3500的板子上面的Serial Port与外界通讯,如何编程实现中断接收数据,是中断方式接收!!! 急。 我的联系方式:pan-guo@163.net 或 panguo@yeah.net
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
时间都去哪了呀
2003-05-26
打赏
举报
回复
LP3500的板子,不像在PC上的。得先把资料看清楚啊!!
whose
2003-05-11
打赏
举报
回复
接分快乐!!!
支持大散分!!!
大手散分,大气大气!!!
散分兄弟姐妹快快乐乐!!!!!
liangsiyuan
2003-05-09
打赏
举报
回复
我以前写的程序
**********************************************************************
void receive(void) interrupt 4 using 0
{
RI = 0; /*清接收中断标志*/
//这个地方可能有问题,怎么能够先接收数据再置XX为接收态?
//Stanley将SN65LBC184的处理改为在系统刚刚启动时设置为接收态;发送之前会改为发送态,发送完毕恢复为接收态
/*如果通信标志为0并且SN65LBC184为接受态,则做接收数据桢的初始化处理*/
if((!communicating) && (!RW) && (!received))
{
rs_buffer[0] = SBUF;
/*接收到前导字节,唤醒UART。
因为前导字节的发送要进行1--4次,所以要过滤掉前导字节*/
if((rs_buffer[0] == 0xfe) && (!RW))/**/
{
SM2 = 0; /*设置SM2=0以便接收*/
pointer = 0; /*设置缓冲区的头指针*/
}
/*接收到桢起始符0x68*/
else if((rs_buffer[0] == 0x68) && (!RW))
{
communicating = 1; /*设置通信标志为1*/
pointer = 0; /*设置缓冲区的头指针*/
}
return;
}
/*如果通信标志为1,则认为开始接收数据桢*/
else if(communicating && (!RW) && (SM2 == 0) && (!received))
{
/*指针超出了缓冲区的范围,停止通信*/
if(pointer > RS_BUFFER_COUNT)
{
uart_end(); /*结束通信*/
}
/*接收地址(6字节)+0x68(1字节)+控制码(1字节)+数据长度(1字节) = 9字节*/
else if(pointer < 9)
{
rs_buffer[pointer++] = SBUF;
}
/*接收数据(rs_buffer[8]中保存的字节个数)+CS(1字节)*/
else if (pointer < rs_buffer[8] + 10)
{
rs_buffer[pointer++] = SBUF;
}
/*接收桢结束标志0x16(1字节)*/
else if (pointer = rs_buffer[8] + 10)
{
rs_buffer[pointer] = SBUF;
if(!(rs_buffer[pointer] == 0x16))
uart_end(); /*结束通信*/
else
{
received = 1; /*接收完必*/
SM2 = 1;/*如果已接收完所有数据桢,则此次通信结束,置SM2=1准备下一次通信*/
}
}
/*pointer指向非法的区域,则放弃此桢
正常情况下是不会执行到这里的*/
else
{
uart_end(); /*结束通信*/
}
}
else
{
uart_end();
}
}
void send(void) interrupt 4 using 0
{
TI = 0; /*清发送中断标志位,并修改发送缓冲区当前位置指针*/
RW = 1; /*设置SN65LBC184为发送态*/
pointer++;
/*如果全部发送完毕则返回,否则发送一桢数据*/
if(pointer >= RS_BUFFER_COUNT) return;
else
{
TB8 = checkout_byte(rs_buffer[pointer]); /*设置数据桢标志*/
SBUF = rs_buffer[pointer]; /*启动发送*/
}
}
jessiepan
2003-04-17
打赏
举报
回复
谢谢上面的那位兄弟先!!!
我现在暂时先不管寄存器,移位那些东西,最主要的是如何在LP3500这块板子上做一个中断程序出来,对串口进行数据接收操作。
itofly
2003-04-16
打赏
举报
回复
▓▓▓▓▓ ▓▓▓ ▓▓▓▓
▓ ▓ ▓ ▓ ▓ ▓ ▓
▓ ▓ ▓ ▓ ▓
▓ ▓ ▓ ▓▓▓
▓ ▓ ▓ ▓
▓ ▓ ▓ ▓
▓ ▓ ▓ ▓
▓▓▓ ▓▓▓ ▓▓▓
▓▓▓▓▓ ▓▓▓ ▓▓▓▓
▓ ▓ ▓ ▓ ▓ ▓ ▓
▓ ▓ ▓ ▓ ▓
▓ ▓ ▓ ▓▓▓
▓ ▓ ▓ ▓
▓ ▓ ▓ ▓
▓ ▓ ▓ ▓
▓▓▓ ▓▓▓ ▓▓▓
▓▓▓▓▓ ▓▓▓ ▓▓▓▓
▓ ▓ ▓ ▓ ▓ ▓ ▓
▓ ▓ ▓ ▓ ▓
▓ ▓ ▓ ▓▓▓
▓ ▓ ▓ ▓
▓ ▓ ▓ ▓
▓ ▓ ▓ ▓
▓▓▓ ▓▓▓ ▓▓▓
rtm
2003-04-16
打赏
举报
回复
你是要写一个UART的driver吗?
如果你的单片机的数据寄存器是8位,要有移位,合并等操作。发送建议用轮询的方式。
这些操作可以放在中断服务程序里面。但是中断服务程序最好短一些。
最少应该有下列源文件:
test.c
ISR.asm
driver.c
把你写的函数放在driver.c里面,为了好修改,建议少用全局变量。
我再帮你看看。
wesenn@yahoo.com.cn
hal库
实现
stm32
串口中断
接收数据
该函数功能为开启串口接收中断,并指定存储
接收数据
的缓存区,设置从串口接收的数据大小。这里要特别注意,该函数只有从串口接收到Size个数据后才会返回,不然会阻塞。 HAL_UART_Receive_IT(&huart1, multiInOne...
STM32_
串口中断
接收数据
_空闲中断
STM32_
串口中断
接收数据
_空闲中断
串口中断
接收数据
方式
所以中断函数的编写尽量简单明了快速,下面以串口接收中断为例来说明中断处理函数的写法。 1.设置一个全局标志,触发中断之后在中断函数内把该标志设置为1,清除中断标志位,然后退出中断。在主函数内判断该标志.....
STM32 DMA加串口空闲中断
接收数据
STM32使用DMA加串口空闲中断
接收数据
STM32中,需要用串口
接收数据
,是使用
串口中断
来
接收数据
。但是用这种方法的话,就要频繁进入
串口中断
,然后处理,效率就比较低。于是就想到用DMA来接收串口数据,这个STM32...
串口接收进入中断+串口接收不进入中断
串口接收进入中断:串口数据寄存器接收到数据,会置一个
接收数据
寄存器非空标志位,如果使能了中断会进入中断,在中断函数里读取数据寄存器,状态标志位自动清0,在中断函数中读取数据寄存器可以防止程序打扰串口...
其他硬件开发
2,432
社区成员
4,281
社区内容
发帖
与我相关
我的任务
其他硬件开发
硬件/嵌入开发 其他硬件开发
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 其他硬件开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章