打印

求教单片机如何设置端口读写缓冲的问题

[复制链接]
1116|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
蟑螂不偷油|  楼主 | 2014-8-15 09:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    现有一高低电平的输入信号,从单片机MSP430F149某一端口输入,要想从另一个端口实现延时输出。。。我思路是,用代码写一个缓冲程序,先将输入端口的数据状态等时间间隔采集存放,等软件设置的缓冲区存满之后,再从输出端口以相同的时序释放数据,并且此时输入端口依然在读取数据。。。。诚心求教如何用代码实现。。。

相关帖子

沙发
airwill| | 2014-8-16 07:17 | 只看该作者
这不难, 就是个软件 FIFO 嘛.
如果延迟时间有精确规定, 可以借助定时器来进行.

使用特权

评论回复
板凳
firstblood| | 2014-8-16 20:22 | 只看该作者
这样单片机的资源的米有充分的利用的吧。。

使用特权

评论回复
地板
dirtwillfly| | 2014-8-18 22:27 | 只看该作者
楼主问题解决了吗?

使用特权

评论回复
5
Unshining| | 2014-8-19 23:32 | 只看该作者
以下方法可以让输出端较为精确地输出与输入端波形完全相同,只是延时一段时间的波形。
struct S_Heap{
char Data;
unsigned int Time;
}
struct S_Heap heap[N]; //N要足够大
unsigned int heap_Depth;
假设你想要的延时时间对应的定时器中上限寄存器的值为UPTIME(该值最好远小于该寄存器的最大值)
在端口变化中断中加入以下代码:
if(heap_Depth==0) {heap[0].Data=端口电平; heap[0].Time=0;定时器中上限寄存器=UPTIME;启动并复位寄存器}
else {heap[heap_Depth].Data=端口电平; heap[heap_Depth].Time=定时器中计时器的值;}
heap_Depth++;
在定时器中断中加入以下代码:
heap_Depth--;
if(heap_Depth==0) {输出电平=heap[0].Data; 关闭定时器}
else {输出电平=heap[0].Data; 定时器中上限寄存器=heap[1].Time+UPTIME; 将heap[0]到heap[heap_Depth]中的内容左移}

使用特权

评论回复
6
angerbird| | 2014-8-21 22:20 | 只看该作者
这个不难的啊,报数据处理好了再通过UART口的发送出去的呗。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

11

帖子

0

粉丝