PIC单片机汇编语言的中断程序 ,求人分析一下怎么运行的

PIC单片机汇编语言的中断程序 ,求人分析一下怎么运行的,第1张

很简单的。

在main主程序里面

LOOP GOTO LOOP

这条程序,会不停的执行,到了TMR0溢出的时候就会执行中断程序

ORG 0004H为中断程序的地址

想知道哪种,给你粘贴,下面是一些计算子程序

******************************************************************

一、十六位二进制转换为BCD数子程序

******************************************************************

MOVLW 10H

MOVWF CNT

BCF STATUS,C

CLRF R2

CLRF R1

CLRF R0

LOOP RLF AL

RLF AH

RLF R0

RLF R1

RLF R2

DECFSZ CNT

GOTO ADJDEC

RETURN

ADJDEC MOVLW R0

MOVWF FSR

CALL ADJBCD

MOVLW R1

MOVWF FSR

CALL ADJBCD

MOVLW R2

MOVWF FSR

CALL ADJBCD

GOTO LOOP

ADJBCD MOVLW 3H

ADDWF INDF,W

MOVWF TMP

BTFSC TMP,3

MOVWF INDF

MOVLW 30H

ADDWF INDF,W

MOVWF TMP

BTFSC TMP,7

MOVWF INDF

RETURN

***************************************************************************

乘法

两个八位无符号数乘法,乘积为十六位。部分积右移相加算法:乘数带进位右移一位,

检查进位是否为一,若是一,部分积寄存器加被乘数,否则不加;然后部分积寄存器

带进位右移一位;重复上述过程直至循环次数为八结束。

***************************************************************************

宏的引用格式:MUL A,B

完成 *** 作: (A)*(B)---(A,B)

影响状态位:C、Z和DC

8*8位乘法宏MUL,结果的高字节部分存入(A),低字节存入(B)

***************************************************************************

MUL MACRO A,B

LOCAL MLOOP

****************************************************************************

如只用乘法子程序,就下段。

****************************************************************************

CLRF TMPA

CLRF TMPB

MOVLW 8

MOVWF CNT

MOVF A,W

BCF STATUS,C

MLOOP RRF B

BTFSC STATUS,C

ADDWF TMPA

RRF TMPA

RRF TMPB

DECFSZ CNT

GOTO MLOOP

MOVF TMPA,W

MOVWF A

MOVF TMPB,W

MOVWF B

*****************************************************************************

ENDM

*****************************************************************************

除法宏DIV

除法是乘法的逆运算。与十进制长除法类似,从被除数的最高有效位开始,把被除数左移

一位至余数上,如果余数不够减去除数,则商寄存器左移,移入位为零,反之移入位为一

余数减去被除数,把被除数的下一位移至除数上。重复上述过程直至处理完所有位。

******************************************************************************

宏的引用格式:DIV A,B

完成 *** 作: (A)为商部分,(B)为余数部分

影响状态位:C、Z和DC

8/8位除法宏DIV,结果(A)为商部分,(B)为余数部分

***************************************************************************

DIV MACRO A,B

LOCAL MLOOP

****************************************************************************

如只用除法子程序,就下段。

****************************************************************************

MOVF A,W

MOVWF TMPA

MOVF B,W

MOVWF TMPB

MOVLW 8

MVOWF CNT

CLRF A

CLRF B

DLOOP BCF STATUS,C

RLF TMPA

RLF B

MOVF TMPB,W

SUBWF B,W

BTFSC STATUS,C

MOVWF B

RLF A

DECFSZ CNT

GOTO DLOOP

****************************************************************************

ENDM

****************************************************************************

间接寻址

CLRF R0 清除R0寄存器里的内容

MOVLW R0

MOVWF FSR 将R0寄存器的地址送入间接寻址指针FSR

MOVF INDF,0

MOWF TEMP 将间接寻址指针FSR所指地址R0寄存器里的内容送入TEMP

MOVLW 88H

MOVWF INDF 将88H送入间接寻址指针FSR所指地址R0寄存器里

*******************************************************************************

将两位BCD数送入显示

显示十位BCD数

DISPLAY SWAPF TEMP,W 将TEMP寄存器里的内容的高低字节交换并送入W

ANDLW 0FH 将0FH与W寄存器里的内容相与并送入W

CALL CODE_TAB 查表取段码

MOVWF PORTD 送入PORTD端口

MOVLW 1H

MOVWF PORTC 选通PORTC,1

CALL DELAY 调用延时

显示个位BCD数

MOVF TEMP,W

ANDLW 0FH

CALL CODE_TAB

MOVWF PORTD

MOVLW 2H

MOVWF PORTC

CALL DELAY

*********************************************************************************************

16位二进制除以8位二进制

;*******************************************************************************************

DIV16

MOVF A,0

MOVWF DIV_H

MOVF BX,0

MOVWF DIV_L 被除数高低字节分别送进各寄存器

MOVLW 9H

MOVWF DIVB ;将除数送进寄存器

MOVLW 10H

MOVWF CNT ;按被除数位数设定移位次数

CLRF AL

CLRF AH

CLRF BX

DLOOP

BCF STATUS,C

RLF DIV_L

RLF DIV_H

RLF BX

MOVF DIVB,W

SUBWF BX,W

BTFSC STATUS,C

MOVWF BX

RLF AL

RLF AH

DECFSZ CNT

GOTO DLOOP

RETURN

****************************************************************************************************

8位乘以16位二进制乘法运算程序

****************************************************************************************************

MUL8

CLRF TMPA 清除积的高位寄存器

CLRF TMPB 清除积的中位寄存器

CLRF TMPC 清除积的低位寄存器

MOVLW 10H 因为8位二进制乘以16位二进制,乘数为16位,移位乘数,所以移位次数为16次

MOVWF CNT

MOVF BX,W 将8位被乘数送进W

BCF STATUS,C

MLOOP RRF TEMP_H

RRF TEMP_L 带C循环右移16位乘数

BTFSC STATUS,C

ADDWF TMPA

RRF TMPA

RRF TMPB

RRF TMPC

DECFSZ CNT

GOTO MLOOP

MOVF TMPA,W

MOVWF AA

MOVF TMPB,W

MOVWF A

MOVF TMPC,W 将乘积送进各寄存器。

MOVWF BX

RETURN


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11122950.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存