标题: 会九齐的进来看看 [打印本页]

作者: 1481509156    时间: 2024-8-26 20:09
标题: 会九齐的进来看看
有谁会写九齐的,接私单的聊下,我这边有几个项目,因为不熟悉有些BUG。

作者: 蓝蓝小星星    时间: 2024-8-27 00:58
发出来看看
作者: 莫忠良    时间: 2024-8-27 09:46
九齐多年,你有什么问题
作者: 大麦豆    时间: 2024-8-27 11:40
有什么问题可以先发出来讨论一下

作者: 1481509156    时间: 2024-8-29 11:34
九齐使用内部1/4通道读取电压,参考电压是2V,怎么得到2V时的ADC值
作者: 1481509156    时间: 2024-8-29 11:36
九齐IC为何&&都用不了?我用定时器给433解码,接收到的32位数据都不准,因为判断时只能用大于或小于,不能局限在一个区间内
作者: 1481509156    时间: 2024-8-29 11:41
莫忠良 发表于 2024-8-27 09:46
九齐多年,你有什么问题

九齐用定时器给433解码,发现截取到的32数值对不上。怀疑是判断问题,问下九齐怎么操作可以&&运算,我之前用定时器同时两个计数,发现对时间有影响,变不准了
作者: Y_G_G    时间: 2024-8-29 13:01
1481509156 发表于 2024-8-29 11:41
九齐用定时器给433解码,发现截取到的32数值对不上。怀疑是判断问题,问下九齐怎么操作可以&&运算,我之 ...

&&这个我一直在用,并没有发现什么问题呀
你首先要了解九齐的硬件资源,它可不是STC或者STM32,片上资源非常有限的,有的RAM才48个字节......,4层硬件堆栈,随便点代码就溢出了
作者: 1481509156    时间: 2024-8-29 15:00
Y_G_G 发表于 2024-8-29 13:01
&&这个我一直在用,并没有发现什么问题呀
你首先要了解九齐的硬件资源,它可不是STC或者STM32,片上资源非 ...

我用定时器计时,用 if(TIMER >10 && TIMER <15)为啥不行?我在同一个定时器里计时两个数,它的定时时间就减少了好多,没有什么规律。而且有临界点。比如取8时计时可能400us,取9时有时会到1.2ms
作者: Y_G_G    时间: 2024-8-29 22:28
1481509156 发表于 2024-8-29 15:00
我用定时器计时,用 if(TIMER >10 && TIMER

九齐不是STC,片上资源是非常有限的,而且,九齐的汇编指令是精简指令,一个简单的C语言运算,它可能要花上几百个时钟来完成的
比如 %取模就很耗时间,所以,能不在中断中处理就尽量不要在中断中处理,特别是uS级别的中断
你贴上完整的代码看一下
作者: 1481509156    时间: 2024-8-30 11:43
Y_G_G 发表于 2024-8-29 22:28
九齐不是STC,片上资源是非常有限的,而且,九齐的汇编指令是精简指令,一个简单的C语言运算,它可能要花上几 ...

void isr(void) __interrupt(0)
{
       
        if(INTFbits.T1IF)                                // 定时器0中断 132 = 1MS
        {
                if(RFDecodeOK == 0)
                {
                        if(!RX_DATA)
                        {
                                IR_Time_L++;
                                IR_Time_H=0;
                                if(JumpFlag && IR_Time_L > 4)
                                {
                                        JumpFlag=0;
                                }
                        }
                        else
                        {
                                IR_Time_H++;
                                if(!JumpFlag && IR_Time_H > 4)
                                {
                                        JumpFlag=1;
                                        soft_decode();
                                        IR_Time_L=0;
                                        IR_Time_H=0;
                                }
                        }
                }       
            INTF= (unsigned char)~(C_INT_TMR1);                     // 清除T0IF标志位
        }

}
/******************************定时器配置*************************************************/
void Timer1_INIT(void)
{
        TMRH = 0;
        TMR1 = 48;                        //50us
        T1CR1 = 0x03;
        T1CR2 = C_TMR1_ClkSrc_Inst | C_PS1_Div4;
        INTE = 0x08;
}
/******************************中断*************************************************/
#define K1_NUM1  0x5A          //短按
#define K1_NUM2  0xA5        //长按
#define K2_NUM1  0X55        //短按
#define K2_NUM2  0XAA          //长按

void soft_decode()                        //解码
{
                static unsigned char RxBitCnt = 0;        //接收数据位
                static unsigned long RxData = 0;        //数据缓冲
                if(IR_State==0)               
                {
                        if((IR_Time_L >= 19) && (IR_Time < 25))
                        {
                                IR_State=1;
                                RxData=0;
                                RxBitCnt=0;
                               
                        }
                        else
                        {
                                IR_State=0;
                        }
                }
                else if(IR_State==1 && RxBitCnt < 32)                       
                {
                       
                        if((IR_Time_L > 6) && (IR_Time_L < 9))  //50us*6=300
                        {
                                RxData = RxData<<1;
                                RxBitCnt++;                       
                        }
                        else if((IR_Time_L > 11) && (IR_Time_L < 14))
                        {
                                RxData = RxData<<1;
                                RxData |=1;
                                RxBitCnt++;               
                        }
                        else
                        {
                                RxBitCnt=0;
                                IR_State=0;
                        }
                        if(IR_cnt>=32)
                        {
                                RxBitCnt=0;
                                IR_State=0;
                                RxUserCode = RxData >> 24;
                                if(RxUserCode == K1_NUM1)
                                {
                                        RFDecodeOK = 1;
                                        RX_flag = 1;
                                }
                                else if(RxUserCode == K1_NUM2)
                                {
                                        RFDecodeOK = 1;
                                        RX_flag = 2;
                                }
                                else if(RxUserCode == K2_NUM1)
                                {
                                        RFDecodeOK = 1;
                                        RX_flag = 3;
                                }
                                else if(RxUserCode == K2_NUM2)
                                {
                                        RFDecodeOK = 1;
                                        RX_flag = 4;
                                }
                        }       
                }
}
void soft_decodetask(void)
{
        static unsigned int RxTimerCnt = 0;
        if(RFDecodeOK)
        {
                RFDecodeOK = 0;
                if(RX_flag==1){LED123=0;}
                if(RX_flag==2){LED123=1;}
                if(RX_flag==3){LED123=0;}
                if(RX_flag==4){LED123=1;}       
        }
        if(RFDecodeOK)
        {
                RxTimerCnt++;
                if(RxTimerCnt >= 2000)
                {
                        RxTimerCnt=0;
                        RFDecodeOK=0;
                }
        }
       
}
作者: 1481509156    时间: 2024-8-30 11:44
Y_G_G 发表于 2024-8-29 22:28
九齐不是STC,片上资源是非常有限的,而且,九齐的汇编指令是精简指令,一个简单的C语言运算,它可能要花上几 ...

大哥,汇编太古老了,我不会啊
作者: Y_G_G    时间: 2024-8-30 14:21
1481509156 发表于 2024-8-30 11:44
大哥,汇编太古老了,我不会啊

不是叫你看汇编,是告诉你工作原理
1: 进入定时器中断之后,要马上清除中断标志位像这样
if(INTFbits.T1IF)                                // 定时器0中断 132 = 1MS
        {
           INTFbits.T1IF = 0;
           TMR1 = 48;    //如果是定时模式,还要写入重载值
         ...........
    }

2:soft_decode();这个函数,想办法放在主函数,不要放在中断中执行




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1