说说 无中断PIC编程构架

[复制链接]
4107|17
 楼主| 5_0_5 发表于 2008-2-24 18:00 | 显示全部楼层 |阅读模式
<br />俺先抛块转头,各位有什么好的方法希望不要吝啬,一块来聊聊:<br /><br />无中断PIC程序的书写,比较麻烦的就是时间的调度,俺采用的方法是:在主循环的起始位置,放置Function1ms(),记录TMR0的某一位的变化以起到计时的作用。<br /><br />要求是:FunctionOther()的执行周期必须少于Function1ms()的调度时间,可以通过把程序切割分段,然后分时(如用switch)调用来达到目的;<br /><br />例子如下:<br /><br />#define&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TMR0_4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(TMR0&0x04)<br />void&nbsp;main(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;FunctionMainInitial();//初始化:256分频,4M工作频率<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Function1ms();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FunctionOther();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />void&nbsp;Function1ms(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;if(TMR0_4)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(TMR0_4)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//工作没有到1MS,等待<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!TMR0_4)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//工作没有到1MS,等待<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />
 楼主| 5_0_5 发表于 2008-2-24 19:04 | 显示全部楼层

没人回,俺自己顶个

相信至少对与新手应该有点用吧
yewuyi 发表于 2008-2-25 08:31 | 显示全部楼层

~~新手不建议用无中断的MCU学习

  
zhaoyu2005 发表于 2008-2-25 08:41 | 显示全部楼层

无中断的对新手来说确实麻烦

如果只是简单的控制,对时间要求不严的话倒没什么,一旦对时间要求稍严就麻烦了
 楼主| 5_0_5 发表于 2008-2-25 12:27 | 显示全部楼层

谢谢

俺手头做过的两个小项目用的就是PIC的这类单片机,之前没有什么经验,所以提出来,希望能跟大家交流交流
xieyuanbin 发表于 2008-2-26 21:09 | 显示全部楼层

12系列和16X5X都没有中断。

还不是一样有人用。楼主的想法是对的,最小循环应该至少是最小分辨率的1/10时间。
lanyong 发表于 2008-2-27 12:41 | 显示全部楼层

?

如果,一个事件发生,我要去马上处理这个事件.无中断的话,延时是不是太长.<br /><br />microchip在硬件中加中断处理很费钱吗?想不通哦.
yewuyi 发表于 2008-2-27 13:06 | 显示全部楼层

不加中断的芯片都定位在低档芯片上

不需要去考虑多少强实时的任务。<br /><br />
 楼主| 5_0_5 发表于 2008-2-27 18:07 | 显示全部楼层

请教xieyuanbin

请解释下为什么:<br /><br />最小循环应该至少是最小分辨率的1/10时间<br /><br />按照采样定理来说,应该是1/2才对啊,您这是不是考虑到如果有输入时的抗干扰问题啊
xieyuanbin 发表于 2008-2-28 08:12 | 显示全部楼层

回9楼

不错。一般的防抖抗干扰我的基本做法是至少3次数值一样才会真,如果时间足够,比如采样按键之类的,我会采样10次全部一致才会有动作
工控秀才 发表于 2008-2-29 17:33 | 显示全部楼层

看看我的东西

你的东西太不好用了,看看我的多核心,就知道,用中断反而麻烦了.<br />
 楼主| 5_0_5 发表于 2008-2-29 20:21 | 显示全部楼层

这就叫“一心一意”

秀才大哥的心真多啊,呵呵,没用过,不知道价位和现在主要的应用方向,秀才大哥有空介绍介绍哟<br /><br />不过俺认为这个也不错啊,这个叫一心一意,一心多用
hotpower 发表于 2008-3-10 23:58 | 显示全部楼层

哈哈~~~玩玩可以

  
alexshao19 发表于 2008-3-11 15:12 | 显示全部楼层

完全不对!!!

void&nbsp;&nbsp;&nbsp;&nbsp;main(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;&nbsp;&nbsp;&nbsp;(;;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;&nbsp;(TMR0&nbsp;&lt&nbsp;20)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TMR0&nbsp;+=&nbsp;156;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NOP();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br />这样的框架才对,nop里面自己做多任务分时,这个是100us时基的。
ayb_ice 发表于 2008-3-13 10:37 | 显示全部楼层

可以利用查询定时器来做基于时间片的前后台系统

  
 楼主| 5_0_5 发表于 2008-3-15 13:53 | 显示全部楼层

谢谢大叔,谢谢楼上两个大哥

楼上的大哥,能讲讲前后台系统怎么作么,谢谢
奥卡姆剃刀 发表于 2016-3-22 08:49 | 显示全部楼层
学习一下!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

402

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部