打印

请教10f200看门狗问题

[复制链接]
2426|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sxy9150|  楼主 | 2008-11-29 00:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位:
    下午刚写了一个比较简单的小程序,本意是想在TxPort(GP1)上输出一串波形(编码格式跟红外有此类似)。
    有按键按下时,唤醒MCU并输出波形,再Sleep。Sleep时,WDT也会唤醒MCU并判断键是否还被按下,若按下则再输出波形。
    但现在出现当波形输出完毕后,仅100ms左右,GP1又输出波形了,这与我程序设置不符合,程序里设置看门狗唤醒的分频为1:128,应该2.3S后才会出现波形才对。
    下面是完整的原程序,是我哪里欠考虑,到现在还没想出之所以然来,请各位帮帮忙,先谢过了。
#include <pic.h>

__CONFIG(MCLRDIS & WDTEN & PROTECT);
#define    Key                GP0
#define    TxPort            GP1


const unsigned char IdCode[]={0xff,0xff,0xff,0xff};

void delay(unsigned char DlyCnt){
    for(;DlyCnt>0;DlyCnt--){
        asm("nop");
        asm("nop");
        asm("nop");
        asm("nop");
        asm("nop");
        asm("nop");
        asm("nop");
        asm("nop");
    }
}

void tx_head(void){
    TxPort=1;
    delay(250);
    delay(250);
    delay(250);
    TxPort=0;
    delay(50);
}

void tx_1(void){
    TxPort=1;
    delay(150);
    TxPort=0;
    delay(50);
}

void tx_0(void){
    TxPort=1;
    delay(50);
    TxPort=0;
    delay(50);
}

void delay_10ms(void){
    unsigned char DlyCnt;
    for(DlyCnt=4;DlyCnt>0;DlyCnt--)
        delay(250);
}

void transmit_data(){
    unsigned char TxCnt,TxBitCnt,TxData;
    tx_head();
    for(TxCnt=0;TxCnt<4;TxCnt++){
        TxData=IdCode[TxCnt];
        for(TxBitCnt=0;TxBitCnt<8;TxBitCnt++){
            if((TxData & 0x01)==0x01) tx_1();
            else tx_0();
            TxData>>=1;
        }
    }    
}

void main(){
    GPIO=0x00;
    TRISGPIO=0x0d;            //0x09;            //GP0及GP3为输入
    asm("clrwdt");
    OPTION=0x5f;            //使能引脚电平变化
    delay(100);
    if(!Key){
        delay_10ms();
        if(!Key){
            asm("clrwdt");
            transmit_data();
        }
    }
    asm("sleep");
    asm("sleep");
    asm("sleep");
}
沙发
sxy9150|  楼主 | 2008-12-1 22:56 | 只看该作者

请教10f200看门狗问题

今天试下来,10F200在执行SLEEP后不光将预分器给清0了,也次预分频给清0了。这跟16F616好像有点差别的。

各位是否有其它意见???

使用特权

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

本版积分规则

15

主题

64

帖子

1

粉丝