⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pic16f877.txt

📁 pic16f877a的多种子程序
💻 TXT
📖 第 1 页 / 共 3 页
字号:
     ACCALO        EQU        0X20
    ACCAHI        EQU        ACCALO+1
    EXPA        EQU        ACCALO+2
    ACCBLO        EQU        ACCALO+3
    ACCBHI        EQU        ACCALO+4
    EXPB        EQU        ACCALO+5    
    ACCCLO        EQU        ACCALO+6
    ACCCHI        EQU        ACCALO+7
    ACCDLO        EQU        ACCALO+8
    ACCDHI        EQU        ACCALO+9
    TEMP        EQU        ACCDHI+1
    SIGN            EQU        ACCDHI+2
    SQRTLO        EQU        ACCALO
    SQRTHI        EQU        ACCAHI
    NUMLO        EQU        ACCDHI+4
    NUMHI        EQU        ACCDHI+5
    COUNT    EQU    ACCDHI+6    ;此方法定义的数据块为连续层断,只要
                ;将第一行改变,就可以将数据整块搬动到
                ;新的地方,为调试带来方便,是比较推
                ;崇的一种寄存器定义方法
    LUPCNT    EQU    .10    
        ORG            0X00
        GOTO        MAIN
        ORG            0X10
INIT        MOVLW        LUPCNT
    MOVWF        COUNT
    MOVF        NUMHI,0
    MOVWF         SQRTHI
    MOVF        NUMLO,0
    MOVWF        SQRTLO
    BCF            STATUS,C
    RRF            SQRTHI,1
    RRF            SQRTLO,1
    RETLW        0
;16×16位定点数右移子程序
DIV2        BCF            STATUS,C
    RRF            ACCBHI,0
    MOVWF        SQRTHI
    RRF            ACCBLO,0
    MOVWF        SQRTLO
    RETLW        0
;16×16位定点数开方子程序
SQRT    CALL        INIT
SLOOP    MOVF        NUMLO,0
    MOVWF        ACCBLO
    MOVF        NUMHI,0
    MOVWF        ACCBHI
    CALL        D_DIVS
    CALL        D_ADD
    CALL        DIV2
    DECFSZ        COUNT,1
    GOTO        SLOOP
    RETURN
;16×16位定点整数除法子程序
D_DIVS    CALL        SETUP
   &n  
7楼: 参与讨论 
作者: 小村之恋 于 2003-12-30 204300 发布: 
--------------------------------------------------------------------------------
浮点数开方程序    小数点显示位置确定子程序
2.7  浮点数开方程序
    如果被开方数是浮点数格式,代入的迭代初值也是浮点数格式,并且用浮点除法(浮点数的除以2操作可以由阶码减1得到)和浮点加法进行迭代运算,就是浮点数开方的基本思路。
以下为浮点数开方的程序清单(其中包含校验程序部分)。该程序中包含浮点数加法程序和浮点数除法程序,这些程序与前面章节列出的程序完全相同,不再列出。

        LIST            P=16F877
        INCLUDE        p16F877.inc
;此子程序是16尾数,8位阶码开方程序
;入口条件浮点数存放在ACCBHI和ACCBLO     EXPB单元中.
;出口条件结果放在ACCBHI和ACCBLO EXPB单元中.
;迭代次数由LUPCNT的地址值决定
;用CALL  SQRTF指令调用,
;内含浮点除程序,浮点加减程序
        ACCALO         EQU         20H
        ACCAHI         EQU         ACCALO +1
        EXPA         EQU         ACCALO +2
        ACCBLO         EQU         ACCALO +3
        ACCBHI        EQU         ACCALO +4
        EXPB         EQU         ACCALO +5
        ACCCLO         EQU         ACCALO +6
        ACCCHI         EQU         ACCALO +7
        ACCDLO         EQU         ACCALO +8
        ACCDHI         EQU         ACCALO +9
        TEMP         EQU         ACCALO +0A
        TEMP1         EQU         ACCALO +0B
        TIMES         EQU         ACCALO +0C
        SIGN         EQU         ACCALO +0D
        COUNT         EQU         ACCALO +0E
        C_MUL         EQU         ACCALO +0F
    C_DIV         EQU         ACCALO +10
        FPOL         EQU         ACCALO +11        ;符号放置位
        NUMLO        EQU        FPOL+1
        NUMHI        EQU        FPOL+2
        NUMM        EQU        FPOL+4
         LUPCNT        EQU        .10
        CONSTANT     C=0
        CONSTANT     Z=2
        CONSTANT     MODEL16=1
        CONSTANT     FALSE=0
        ORG            0X0000
        NOP
        GOTO        MAIN
        ORG            0X0010
INIT1    DECF        EXPB            ;假设迭代根的初始值为其原值的一半
    MOVF        ACCBHI,W
    MOVWF        ACCAHI
    MOVF        ACCBLO,W
    MOVWF        ACCALO
    MOVF        EXPB,W
    MOVWF        EXPA 
    RETLW        0
SQRTF    MOVLW        LUPCNT
    MOVWF        COUNT
    MOVF        ACCBHI,W
    MOVWF        NUMHI
    MOVF        ACCBLO,W
    MOVWF        NUMLO
    MOVF        EXPB,W
    MOVWF        NUMM            ;存储被开方的数
    BTFSC        ACCBHI,7
    GOTO        TIQIAN            ;如果被开方数是个负数,则返回一极小数
    CALL        INIT1
SLOOP1    MOVF        NUMLO,0
        MOVWF        ACCBLO
 
8楼: 参与讨论 
作者: 小村之恋 于 2003-12-30 204700 发布: 
--------------------------------------------------------------------------------
输入,输出 端口
3.1.2  简单应用实例
    该例用于令与PORTD口相连的8个发光二极管前4个点亮,后4个熄灭。在调试程序前,应使与PORTD口相连的8位拔码开关拔向相应的位置。
例3.1  PORTD输出
        LIST            P=16F877
        INCLUDE        “P16F877.INC”
        ORG            0X00
        GOTO        MIAN
        ORG            0X10
MAIN    NOP
    BANKSEL        TRISD        ;选择BANK1
    MOVLW        0X00
        MOVWF        TRISD        ;TRISD    寄存器被赋值,PORTD每一位都为输出
        BANKSEL        PORTD        ;选择BANK0, PORTD在存储0区
AGAIN    MOVLW        0X0F
        MOVWF        PORTD        ;向PORTD送数据,点亮LED(由实验模板的设计决
;定相应位置低时LED点亮)。
        GOTO        AGAIN        ;反复向PORTD口送数
        END
3.2  利用MSSP模块的SPI方式实现与LED数码显示接口
3.2.1  MSSP模块SPI方式的功能简介
例3.2  SPI初始化程序
SPIINT    BANKSEL        TRISC        ;选定TRISC所在的存储体
    BCF            TRISC,3        ;设置SCK引脚为输出方式
    BCF            TRISC,5        ;设置SDO引脚为输出方式
        MOVLW        0XC0
        MOVWF        SSPSTAT        ;设置SSPSTAT寄存器,在串行时钟SCK的下降沿发送
                                ;数据(后面设定SSPCON寄存器时CKP=1,选择上升
                                ;沿还是下降沿发送数据,需要与外部接受芯片的时序相配                                ;合)
        BANKSEL        SSPCON        ;选择SSPCON所在的存储体
        MOVLW        0X30
        MOVWF        SSPCON        ;设置SSPCON寄存器,同步串行口使能,CKP=1
                                ;且选择相应的时钟频率。
        RETURN
3.2.3  程序清单
下面给出已经在实验板上调试通过的一个程序,可作为用户编制其它程序的参考。
LIST             P=16F877
        INCLUDE        P16F877.INC
;该程序用于在实验板上显示数字1、2、3、4、5、6、7、8
;所用的寄存器
XIANR        EQU        0X20
    ORG            0X00
        GOTO        MAIN
        ORG            0X10
;以下为码值转换表
CONVERT        ADDWF        PCL,1
        RETLW        0XC0                    ;0,显示段码与具体的硬件连接有关
        RETLW        0XF9                    ;1
        RETLW        0XA4                    ;2
        RETLW        0XB0                    ;3
        RETLW        0X99                    ;4
        RETLW        0X92                    ;5
        RETLW        0X82                    ;6
        RETLW        0XD8                    ;7
        RETLW        0X80                    ;8
        RETLW        0X90                    ;9
        RETLW     
9楼: 参与讨论 
作者: 小村之恋 于 2003-12-30 204800 发布: 
--------------------------------------------------------------------------------
第4章  模拟量输入与输出

4.1  AD转换的应用
例4.1  AD转换初始化程序
ADINT    MOVLW        0X51
        MOVWF        ADCON0            ;选择AD转换通道为RA2,且打开AD在工
;作状态,并使AD转换时钟为8tosc
        BANKSEL        ADCON1            ;选种BANK1体
        MOVLW        0X80
        MOVWF        ADCON1            ;转换结果右移,即ADRESH寄存器的高6位
;为“0”,且把RA2口设置成模拟量输入口
        CLRF        PIE1                ;禁止其它中断
        BSF            PIE1,ADIE        ;AD转化中断允许
        BSF             TRISA,2            ;设置RA2口为输入方式
        BSF            INTCON,PEIE        ;外围中断允许
        BSF            INTCON,GIE        ;总中断允许
        BCF            STATUS,RP0        ;返回BANK0            
        RETURN
4.1.2程序清单
有关显示的部分请读者参考有关章节。
        LIST            P=16F877
        INCLUDE        P16F877.INC
;程序实现AD转换功能,AD采用中断方式。该程序通过单片机的RA2模拟通道
;送入一直流电压,当送入的直流电压大于2.5V时,8个LED闪动;当直流电压恢复到2.5V以下
;时,LED停止闪动。为了防止干扰,本程序对直流电压采样10次后再作判断,中间的采样结果
;用间接寻址的方式存取
;所用的寄存器  
        TIMES        EQU        0X20 
            DEY            EQU        TIMES+1
        ACCALO        EQU        TIMES+2
        ACCAHI        EQU        TIMES+3
        ACCBLO        EQU        TIMES+4
        ACCBHI        EQU        TIMES+5
        FLAG        EQU        TIMES+6
        DEYH        EQU        TIMES+7
        DEYL        EQU        TIMES+9
           BEGFSR        EQU        0X30          ;间接寻址FSR的起始值(宏定义方式给出)
        ORG            0X0000
        GOTO        MAIN
        ORG            0X0004
        GOTO        INTSERVE            ;转向中断服务子程序
        ORG            0X15
;双字节加、减法子程序
D_ sub                                    ;详细程序语句请参考第2章
;初始化子程序
INITIAL    MOVLW        0X51           
        MOVWF        ADCON0               ;选择AD通道为RA2,且打开AD转换器
                                        ;在工作状态,且使AD转换时钟为8tosc
        BANKSEL        ADCON1
        MOVLW        0X80                    ;转换结果右移,ADRESH寄存器的高6
                                        ;位为“0”,且把RA2口置为模拟量输入方式
                                        ;(注意后面要把RA5改成数据IO方式,以
                                        ;输出显示琐存信号)
        MOVWF        ADCON1
        CLRF     &  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -