• PIC汇编入门示例


    顺序程序结构

    将20H单元低4位取出存入21H,高四位取出存入22H
    要点:ANDLW和SWAPF

      MOVF     20H,0      ;将20H单元的内容送人W
      ANDLW    0FH        ;W高四位清零低4位保持不变
      MOVWF    21H        ;将拆分后的低4位送21H
      SWAPF    20H,0      ;将20H单元内容高、低半字节换位后送W
    
      ANDLW    0FH        ;再将W高四位清0低四位保持不变
      MOVWF    22H        ;将拆分后的高四位送22H单元
    

    分支程序结构

    RAM中20H和21H单元存放2个数,找出大着存入22H单元
    要点:两数做减法,判断标志位C的值

    STATUS    EQU      03H      ;定义STATUS寄存器地址为03H
    C         EQU      0        ;定义进位/借位标志C在STATUS中得地址为0
              MOVF     20H 0    ;将20H单元的内容送人W
              SUBWF    21H 0    ;用21H单元的内容减去W中的内容,结果存在W中
              BTFSS    STATUS,C ;若C=1,没借位,则21H单元中的数大,跳到F21BIG
              GOTO     F20BIG   ;若C=0,有借位,20H单元中得数较大,则跳至F20BIG
        
    F21BIG    MOVF    21H,0     ;将21H中的内容存入W寄存器
              MOVWF   22H       ;再将它转存到22H单元
              GOTO    STOP      ;跳过下面两条指令到程序末尾
            
    F20BIG    MOVF    20H,0     ;将20H中的内容存入W寄存器
              MOVWF   22H       ;再将它转存到22H单元
    
    STOP      GOTO    STOP      ;任务完成,停机,原地踏步
    

    循环程序结构

    数据存储器中,从地址30H开始的50个单元全部写入00H
    要点:间接寻址寄存器FSR当做地址指针

    COUNT   EQU      20H        ;指定20H单元作为循坏次数计数器(即循环变量)
    FSR     EQU      04H        ;定义FSR寄存器地址为04H
    INDF    EQU      00H        ;设定INDF寄存器地址为00H
            MOVLW    D50        ;把计数器初值50送入W
            MOVWF    COUNT      ;再把50转入计数器(作为循环变量的操作值)
            MOVLW    30H        ;把30H(起始地址)送入W
            MOVWF    FSR        ;再把30H转入寄存器FSR(用作地址指针)
            
    NEXT    CLRF     INDF       ;把以FSR内容为地址所指定的单元清0
            INCF     FSR,1      ;地址指针内容加1,指向下一单元
            DECFSZ   COUNT,1    ;计数值减1,结果为0就跳过到下一条指令到STOP处
            GOTO     NEXT       ;跳转回去并执行下一次循环
    STOP    GOTO     STOP       ;循环结束之后执行该语句,实现停机
    

    子程序结构

    3个数最大者放入40H单元

    STATUS    EQU        03H
    C         EQU        00H
    X         EQU        20H
    Y         EQU        21H
    Z         EQU        22H
    

    主程序

    MAIN    MOVF    30H,0
            MOVWF   X
            MOVF    21H,0
            MOVWF   Y
            CALL    SUB
            MOVF    Z,0
            MOVWF   X
            MOVF    32H,0
            MOVWF   Y
            CALL    SUB
            MOVF    Z,0
            MOVWF   40H
    STOP    GOTO    STOP
    

    子程序

    子程序:(入口参数:X和Y,出口参数:Z)

    SUB     MOVF     X,0        ;将X内容送人W
            SUBWF    Y,0        ;Y内容减去W内容,结果存入W
            BTFSS    STATUS,C   ;若C=1,没有发生借位,执行下一条,否则跳转
            GOTO     X_BIG        
            
    Y_BIG   MOVF    Y,0         ;将Y中的数据送入W
            MOVWF    Z          ;再将它转存到Z
            GOTO     THEEND     ;跳过下面两条到末尾
            
    X_BIG   MOVF    X,0         ;将X中的数据送入W
            MOVWF    Z          ;再将它转存到Z
    THEEND  RETURN              ;子程序返回
    
  • 相关阅读:
    shell之ping减少时间间隔&ping的次数&用IP1去ping IP2的技巧
    kali界面乱码解决方案记录
    win10子系统kali-linux安装图形化界面总结
    树莓派4 64bit 编译安装QT5.13.2 和 Redis Desktop Manager 2020.1-dev
    树莓派4 (8GB) RaspiOS 64 bit 入手配置流程 2020-06-10
    阿里巴巴Java开发手册(泰山版)个人阅读精简
    Java 8 新API Steam 流 学习笔记
    IDEA中maven项目部署到云服务器上(简易)
    收藏模块的设计
    js常用代码片段(更新中)
  • 原文地址:https://www.cnblogs.com/zhyantao/p/12336302.html
Copyright © 2020-2023  润新知