搜索
bottom↓
回复: 7

c程序中有汇编,请高手解读(已解决)

[复制链接]

出0入0汤圆

发表于 2014-6-12 10:18:28 | 显示全部楼层 |阅读模式
本帖最后由 FSL_TICS_ZP 于 2014-7-8 14:51 编辑

asm {
  ldd  temp;   //  带偏移量的间接寻址装载指令
  ldx  #4
  idiv      //    有符号数除法指令IDIV
  stab ctemp
}

出0入0汤圆

发表于 2014-6-12 10:31:43 | 显示全部楼层
大哥,CPU内核型号给出来哇

出0入0汤圆

发表于 2014-6-12 11:28:48 | 显示全部楼层
同问,你的MCU型号是什么啊?

出0入0汤圆

 楼主| 发表于 2014-6-12 12:04:06 | 显示全部楼层
mc9s12hy64

出0入0汤圆

 楼主| 发表于 2014-6-12 12:05:09 | 显示全部楼层
/****************************************************************************
* motor_update(char channel, char dir) -
*
* Description : Control motor drivers and polarity
*                          :  
* Example     : N/A  
* Input           : motor channel
* Output          : MotorCurStyep[?]
* Modify      : Motor driver and polarity
* Return      : N/A
****************************************************************************/
void motor_update(char channel)  //分步方式步进电机刷新程序
{
        volatile unsigned char        ctemp,*motor_channel;
        int                temp,itemp;
       
        itemp=MotorFinalStep[channel]-MotorCurStep[channel];//目标步数值减去了当前步数值
       
        if (itemp!=0)
        {
          if (itemp<0)  MotorCurStep[channel]--;
          else if (itemp>0)  MotorCurStep[channel]++;
       
          //motor_channel=&MCDC0H+channel*4;
          motor_channel=(unsigned char *)((unsigned int)&MCDC0 + (unsigned int)(channel*4));
          
          temp = MotorCurStep[channel];
asm        {
                ldd                temp;   //  带偏移量的间接寻址装载指令
                ldx                #4
                idiv      //    有符号数除法指令IDIV
                stab        ctemp
        }
               
        if(ctemp==0)
            {
              *motor_channel     &=~S0_DTC;        //;Duty cycle channel 0 (A low /A PWM)
              *(motor_channel+2) &=~S0_DTC;        //;Duty cycle channel 1 (B low /B PWM)
            }
            else if(ctemp==1)
            {
              *motor_channel     &=~S0_DTC;        //;Duty cycle channel 0 (A low /A PWM)
              *(motor_channel+2) |=S1_DTC;        //;Duty cycle channel 1 (B PWM /B low)
            }
            else if(ctemp==2)
            {  
              *motor_channel     |=S1_DTC;        //;Duty cycle channel 0 (A PWM /A low)
              *(motor_channel+2) |=S1_DTC;        //;Duty cycle channel 1 (B PWM /B low)
            }
            else if(ctemp==3)
            {
              *motor_channel      |=S1_DTC;                //;Duty cycle channel 0 (A PWM /A low)
              *(motor_channel+2)  &=~S0_DTC;        //;Duty cycle channel 1 (B low /B PWM)
            }                                                  
                                                                     
    }
    else                 
    {
              MotorStatus[channel]=OFF;               
    }
}

出0入0汤圆

 楼主| 发表于 2014-6-12 12:11:39 | 显示全部楼层
单片机是:MC9S12HZ256CPV

出0入0汤圆

发表于 2014-6-12 13:04:12 | 显示全部楼层
查一下对应的汇编指令表,不就知道了?只有几条!

出0入0汤圆

发表于 2014-6-12 13:40:53 | 显示全部楼层
http://wenku.baidu.com/link?url= ... Qjf4OaQ7wymiQu3sfT7
ldd  temp;   将内存单元的内同加载到累加器D
ldx  #4       将内存单元的内容加载到变址寄存器X
idiv            (D)/(X)→X,余数→D;
stab ctemp 将累加器B的内容存储到内存单元

话说本ID怎么觉得这几句汇编内容不全呢? 你确定这玩意能编译通过?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 17:00

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表