【问题标题】:controlling a dc motor using microprocessor使用微处理器控制直流电机
【发布时间】:2015-10-13 07:37:36
【问题描述】:

MTS-88.C 板有一个英特尔 8255 PPI,与地址为 000100xxb 的微处理器 8088 相连。板的顶部包括连接器 CN01-CN09 和 LED01 –LED08。 LED01 在内部连接到 CN0(i+1)。 CN02-CN09各有两个接线端子,一个直接接GND,另一个通过按钮开关接+12v电源。

PBi 连接到 LED (16-i),继电器 RLi 连接到 CN (9+i)。所以 PBi 控制 CN (17-i)。 CN10 到 CN17 中的每一个都包含三个连接端子——标记为 NO(常开)、COM 和 NC(常闭)。 NO接GND,NC接+12V电源,COM端子可用于驱动12V直流或步进电机或其他需要12V供电的设备。

以下装配程序通过按键(三个按钮)控制直流电机的旋转方向,方式如下:

P1:顺时针

P2:逆时针

P3:停止

组装程序:

Address     Assembly Code   
0000:0400       MOV AL,90   
0000: 0402      OUT 13,AL   
0000: 0404      MOV AL,00   
0000: 0408      IN AL,10    
0000: 040A      CMP AL,FE   //what are we checking here?
0000: 040C      JNE 419 
0000: 040E      MOV AL,00  //why are we assigning 00?   
0000: 0410      OUT 11,AL   
0000: 0412      MOV AL,02  //why are we using 02?
0000: 0414      OUT 11,AL   
0000: 0416      JMP 500 
0000: 0419      CMP AL,FB   //what are we checking here?    
0000: 041B      JNE 428 
0000: 041D      MOV AL,00   //why are we assigning this?    
0000: 041F      OUT 11,AL   
0000: 0421      MOV AL,01   //why are we using 01?
0000: 0423      OUT 11,AL   
0000: 0425      JMP 500 
0000: 0428      CMP AL,FD   //what are we checking here?    
0000: 042A      JNE 408 
0000: 042C      MOV AL,00   
0000: 042E      OUT 11,AL   
0000: 0430      JMP 500 
0000: 0433      INT 3
0000: 0500      MOV CX,100  
0000: 0503      LOP 0503    
0000: 0505      JMP 408 
0000: 0508      INT 3   

我对上面代码中通过 cmets 标记的代码有些困惑。我的另一个问题是电机是如何顺时针和逆时针移动的?如果在这里中继有什么作用?

【问题讨论】:

    标签: assembly microcontroller intel microprocessors


    【解决方案1】:

    我添加了一些 cmets

    Address     Assembly Code   
    0000:0400       MOV AL,90   
    0000: 0402      OUT 13,AL   
    0000: 0404      MOV AL,00   
    0000: 0408      IN AL,10    
    0000: 040A      CMP AL,FE   // check "Forward" key press (active low)
    0000: 040C      JNE 419 
    0000: 040E      MOV AL,00   // turn off outputs (active high)
    0000: 0410      OUT 11,AL   
    0000: 0412      MOV AL,02   // turn on output 2 (active high)
    0000: 0414      OUT 11,AL   
    0000: 0416      JMP 500 
    0000: 0419      CMP AL,FB   // check "Reverse" key press (active low)
    0000: 041B      JNE 428 
    0000: 041D      MOV AL,00   // turn off outputs (active high)
    0000: 041F      OUT 11,AL   
    0000: 0421      MOV AL,01   // turn on output 1 (active high)
    0000: 0423      OUT 11,AL   
    0000: 0425      JMP 500 
    0000: 0428      CMP AL,FD   // check "Stop" key press (active low)
    0000: 042A      JNE 408 
    0000: 042C      MOV AL,00   // turn off outputs (active high)
    0000: 042E      OUT 11,AL   
    0000: 0430      JMP 500 
    0000: 0433      INT 3
    0000: 0500      MOV CX,100  // software delay
    0000: 0503      LOP 0503    
    0000: 0505      JMP 408 
    0000: 0508      INT 3   
    

    【讨论】:

    • 开启/关闭输出是什么意思?按下按钮时电机如何顺时针和逆时针移动?你能解释一下吗? @风向标
    • 就像一个灯泡:打开/关闭:我想有一个“正向”输出和一个“反向”输出。我还猜想代码在启用另一个之前关闭所有输出,是为了确保正向和反向之间永远不会有任何“战斗”。
    • 这里逆时针移动的基本原理是什么?当我按下按钮 2 时这是如何工作的?@Weather Vane
    • 我建议你拿出一个'范围,看看引脚水平。我没有你要显示代码的硬件。
    • 当我使用 MOV AL,01 或 MOV AL,02 打开输出 1 或 2 时,我只是每次在端口 B 上设置一个位.. 对吗?但为什么只有一点? @风向标
    猜你喜欢
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    相关资源
    最近更新 更多