如何实现串口中断接收数据???(急!!!)散分

jessiepan 2003-04-16 04:45:40
你好!
我现在在做开发,用的是Z-World公司推出的LP3500单板机,有没有哪位大虾也在用,或是曾经用过。可以切磋切磋吗?

我现在需要通过LP3500的板子上面的Serial Port与外界通讯,如何编程实现中断接收数据,是中断方式接收!!! 急。

我的联系方式:pan-guo@163.net 或 panguo@yeah.net
...全文
95 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
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

2,425

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 其他硬件开发
社区管理员
  • 其他硬件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧