• PIC16F684汇编学习笔记


    1、端口:

    PORTA 6位 双向口 方向寄存器 TRISA = 1 输入
                      = 0 输出

    注:RA3例外,始终为输入,TRIS位始终读1.当MCLRE = 1时,RA3读为0;

    2、常用指令:
    MOVLW k ;将立即数存入W寄存器中

    MOVWF f ;将W的内容存入f寄存器中

    MOVF f,d ;d=0,f中的内容被传送至W寄存器
    d=1,f的内容存在f本身,零标志位受影响

    BSF f,b ;f寄存器中的第b位被置1

    BCF f,b ;f寄存器中的第b被清零

    BTFSC f,b ;如果f寄存器的b位为1,则执行下一条指令
    如果为0,则放弃下一条指令,执行一条NOP指令,使之成为一条双周期指令

    BTFSS f,b ;与BTFSC相反,0执行,为1则跳过

    3、例子 内置ADC设置

    BANKSEL ADCON1
    MOVLW B'01110000 ;将立即数传送给工作寄存器W
    MOVWF ADCON1 ;将W内的数据传送给ADCON1寄存器,设置ADC的时钟来自内部振荡器=500kHz

    BANKSEL TRISA
    BSF TRISA,0 ;将TRISA第0位置1,即将端口设置为输入

    BANKSEL ANSEL
    BSF ANSEL,0 ;将ANSLE的第0位置1,即将端口设置为模拟输入

    BANKSEL ADCON0
    MOVLW B'10000001 ;设置ADC转换的结果格式、参考电压、通道、转换状态、使能转换
    MOVWF ADCON0 ;将设置的数据存入ADCON0中

    CALL SampleTime ;延时
    BSF ADCON0,GO ;将ADCON0的GO位置1,开始转换
    BTFSC ADCON0,GO ;判断ADCON0的GO位是否为0,为0则跳过,否则顺序执行;
    ;转换完成时GO位自动清零,通过测句判断转换是否完成
    GOTO $ - 1 ;没有转换完成,再检测一遍

    BANKSEL ADRESH
    MOVF ADRESH,W ;将高位ADRESH的数据存入W寄存器中
    MOVWF RESULTHI ;将数据存储

    BANKSEL ADRESL
    MOVF ADRESL,W
    MOVWF RESULTHI

  • 相关阅读:
    HDU 3572 Task Schedule(拆点+最大流dinic)
    POJ 1236 Network of Schools(Tarjan缩点)
    HDU 3605 Escape(状压+最大流)
    HDU 1166 敌兵布阵(分块)
    Leetcode 223 Rectangle Area
    Leetcode 219 Contains Duplicate II STL
    Leetcode 36 Valid Sudoku
    Leetcode 88 Merge Sorted Array STL
    Leetcode 160 Intersection of Two Linked Lists 单向链表
    Leetcode 111 Minimum Depth of Binary Tree 二叉树
  • 原文地址:https://www.cnblogs.com/loves6036/p/5032558.html
Copyright © 2020-2023  润新知