极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10704|回复: 3

USART 串口通信

[复制链接]
发表于 2014-4-29 17:20:50 | 显示全部楼层 |阅读模式
我想操作寄存器直接实现USART接收,而不是通过arduino的库函数Serial.read()。用查询的方式可以实现,但是用中断的方式怎么也不行,接收始终无法进入接收中断程序ISR( USART0_RXC_vect)。实在不知道哪里错了,请大家帮忙看看。
程序代码见附件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2014-4-29 21:49:32 | 显示全部楼层
你这附件只有一个项目文件,没有源代码,没法帮你看啊~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-30 11:25:37 | 显示全部楼层
哦,我已经解决了,能够进中断了,就是把中断函数的参数向量改为了ISR( USART_RX_vect)就好了,下面的这是完整的代码,但是感觉这块还有很多东西不甚清楚,比如说什么时候会进中断,中断执行后芯片会重启吗??或者还是返回中断点继续向下执行,以及在中断程序中如何设置延时??如何保证接收和发送的无差错??还望有心人指教

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2014-4-30 12:38:30 | 显示全部楼层
本帖最后由 pathletboy 于 2014-4-30 12:40 编辑

推荐你看下C:\Program Files\Arduino\hardware\arduino\cores\arduino\HardwareSerial.cpp这个文件,看下arduino是如何封装的。
你的问题可以总结为
1、什么是中断
2、中断如何执行
前2者自己百度上搜索,“中断”
3、中断中不该带有任何延时程序,中断应该设计的短小精悍,能不放中断的就别放中断,中断中一般不处理逻辑代码,只是单纯的把数据收下来放到缓冲,然后在主循环,也就是Arduino的loop()中进行逻辑处理,包括延时发送等。
4、发送接收无差错需要自定义协议,只有自定义协议才能保证数据的正确完整性,可以参考下TCP/IP协议,自己实现一个简单的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-6 01:15 , Processed in 0.035780 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表