打印

说说 无中断PIC编程构架

[复制链接]
2855|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
5_0_5|  楼主 | 2008-2-24 18:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

俺先抛块转头,各位有什么好的方法希望不要吝啬,一块来聊聊:

无中断PIC程序的书写,比较麻烦的就是时间的调度,俺采用的方法是:在主循环的起始位置,放置Function1ms(),记录TMR0的某一位的变化以起到计时的作用。

要求是:FunctionOther()的执行周期必须少于Function1ms()的调度时间,可以通过把程序切割分段,然后分时(如用switch)调用来达到目的;

例子如下:

#define        TMR0_4        (TMR0&0x04)
void main(void)
{
    FunctionMainInitial();//初始化:256分频,4M工作频率
    while(1)
    {
        Function1ms();
        FunctionOther();
    }
void Function1ms(void)
{
    if(TMR0_4)
    {
        while(TMR0_4)
        {
            ;//工作没有到1MS,等待
        }
    }
    else
    {
        while(!TMR0_4)
        {
            ;//工作没有到1MS,等待
        }
    }
}

沙发
5_0_5|  楼主 | 2008-2-24 19:04 | 只看该作者

没人回,俺自己顶个

相信至少对与新手应该有点用吧

使用特权

评论回复
板凳
yewuyi| | 2008-2-25 08:31 | 只看该作者

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

使用特权

评论回复
地板
zhaoyu2005| | 2008-2-25 08:41 | 只看该作者

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

如果只是简单的控制,对时间要求不严的话倒没什么,一旦对时间要求稍严就麻烦了

使用特权

评论回复
5
5_0_5|  楼主 | 2008-2-25 12:27 | 只看该作者

谢谢

俺手头做过的两个小项目用的就是PIC的这类单片机,之前没有什么经验,所以提出来,希望能跟大家交流交流

使用特权

评论回复
6
xieyuanbin| | 2008-2-26 21:09 | 只看该作者

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

还不是一样有人用。楼主的想法是对的,最小循环应该至少是最小分辨率的1/10时间。

使用特权

评论回复
7
lanyong| | 2008-2-27 12:41 | 只看该作者

?

如果,一个事件发生,我要去马上处理这个事件.无中断的话,延时是不是太长.

microchip在硬件中加中断处理很费钱吗?想不通哦.

使用特权

评论回复
8
yewuyi| | 2008-2-27 13:06 | 只看该作者

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

不需要去考虑多少强实时的任务。

使用特权

评论回复
9
5_0_5|  楼主 | 2008-2-27 18:07 | 只看该作者

请教xieyuanbin

请解释下为什么:

最小循环应该至少是最小分辨率的1/10时间

按照采样定理来说,应该是1/2才对啊,您这是不是考虑到如果有输入时的抗干扰问题啊

使用特权

评论回复
10
xieyuanbin| | 2008-2-28 08:12 | 只看该作者

回9楼

不错。一般的防抖抗干扰我的基本做法是至少3次数值一样才会真,如果时间足够,比如采样按键之类的,我会采样10次全部一致才会有动作

使用特权

评论回复
11
工控秀才| | 2008-2-29 17:33 | 只看该作者

看看我的东西

你的东西太不好用了,看看我的多核心,就知道,用中断反而麻烦了.

使用特权

评论回复
12
5_0_5|  楼主 | 2008-2-29 20:21 | 只看该作者

这就叫“一心一意”

秀才大哥的心真多啊,呵呵,没用过,不知道价位和现在主要的应用方向,秀才大哥有空介绍介绍哟

不过俺认为这个也不错啊,这个叫一心一意,一心多用

使用特权

评论回复
13
hotpower| | 2008-3-10 23:58 | 只看该作者

哈哈~~~玩玩可以

使用特权

评论回复
14
alexshao19| | 2008-3-11 15:12 | 只看该作者

完全不对!!!

void    main(void)
{
    for    (;;)
    {
        if    (TMR0 < 20)
        {
            TMR0 += 156;
            
            NOP();            
        }
    }
}


这样的框架才对,nop里面自己做多任务分时,这个是100us时基的。

使用特权

评论回复
15
ayb_ice| | 2008-3-13 10:37 | 只看该作者

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

使用特权

评论回复
16
5_0_5|  楼主 | 2008-3-15 13:53 | 只看该作者

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

楼上的大哥,能讲讲前后台系统怎么作么,谢谢

使用特权

评论回复
17
奥卡姆剃刀| | 2016-3-22 08:49 | 只看该作者
学习一下!

使用特权

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

本版积分规则

17

主题

402

帖子

2

粉丝