wydking 发表于 2012-5-15 15:11:07

关于Samll rtos(51)使用在STC单片机上

本帖最后由 wydking 于 2012-5-15 15:48 编辑

关于Samll rtos(51)使用在STC单片机上,消息对列定义在xdata里,使用OSQPend函数时在P0口P2口为高电平的IO口上有干扰脉冲输出的问题。

脉冲的产生定位在下面这段代码中

/* 把任务加入等待任务队列 */
#if OS_MAX_TASKS < 9
    s1=0;//使用示波器观察时做同步信号用
Buf |= OSMapTbl;
s1=1;   
#else

汇编后的代码


             S1=0;
C:0x013E    C2C3   CLR      s1(0xC0.3)
146:   Buf |= OSMapTbl;
C:0x0140    8D82   MOV      DPL(0x82),R5
C:0x0142    8C83   MOV      DPH(0x83),R4
C:0x0144    A3       INC      DPTR
C:0x0145    A3       INC      DPTR
C:0x0146    A3       INC      DPTR
C:0x0147    C083   PUSH   DPH(0x83)
C:0x0149    C082   PUSH   DPL(0x82)
C:0x014B    E0       MOVX   A,@DPTR
C:0x014C    FF       MOV      R7,A
C:0x014D    E524   MOV      A,OSTaskID(0x24)
C:0x014F    900B16   MOV      DPTR,#OSMapTbl(0x0B16)
C:0x0152    93       MOVC   A,@A+DPTR
C:0x0153    FE       MOV      R6,A
C:0x0154    EF       MOV      A,R7
C:0x0155    4E       ORL      A,R6
C:0x0156    D082   POP      DPL(0x82)
C:0x0158    D083   POP      DPH(0x83)
C:0x015A    F0       MOVX   @DPTR,A
          S1=1;
C:0x015B    D2C3   SETB   s1(0xC0.3)


(编译的结果Program Size: data=52.1 xdata=416 code=2842
creating hex file from "..\output\LO"...
"..\output\LO" - 0 Error(s), 0 Warning(s).)
图片中的黄线是s1同步信号,蓝线是P2^5输出的干扰信号。说明干扰脉冲是在s1为低电平期间输出的。具体是那条指令输出的脉冲在C语言里就不太好跟踪了。
根据STC的指令表查到MOVX @DPTR A 指令需要7个周期。时钟用11.0592MHz,7个周期为7 * (1/11.0592)us=0.6329us。看下图两个标线的之间的时间差不多就是7个周期的时间。所以判断是在MOVX @DPTR A这条指令产生的干扰(PC值不要看,这里是用AT89S51的器件模拟KEIL编译的)。在Xdata只有416个小于1k时是片内的(AUXR=0x15; //波特率1T计数      ),不用总线的。怎么会有脉冲呢
试将程序改为


uchardata   temp
……
                /* 把任务加入等待任务队列 */
#if OS_MAX_TASKS < 9
    s1=0;
      temp=OSMapTbl;
    Buf |=temp;
s1=1;
#else


汇编后的代码


   145:   s1=0;
C:0x013E    C2C3   CLR      s1(0xC0.3)
   146:         temp=OSMapTbl;
C:0x0140    E524   MOV      A,OSTaskID(0x24)
C:0x0142    900B08   MOV      DPTR,#OSMapTbl(0x0B08)
C:0x0145    93       MOVC   A,@A+DPTR
C:0x0146    FF       MOV      R7,A
   147:   Buf |=temp;      
C:0x0147    8D82   MOV      DPL(0x82),R5
C:0x0149    8C83   MOV      DPH(0x83),R4
C:0x014B    A3       INC      DPTR
C:0x014C    A3       INC      DPTR
C:0x014D    A3       INC      DPTR
C:0x014E    E0       MOVX   A,@DPTR
C:0x014F    4F       ORL      A,R7
C:0x0150    F0       MOVX   @DPTR,A
   148:         s1=1;
C:0x0151    D2C3   SETB   s1(0xC0.3)


没有用到入栈和出栈。就没有干扰脉冲输出。
页: [1]
查看完整版本: 关于Samll rtos(51)使用在STC单片机上