?? dingshijishu.asm
字號:
;***************************************************************************
;定時器0定時100ms,計數器T1計數外部脈沖個數,查尋方式
;****************************************************************************
LIST P=18F458
INCLUDE "P18F458.INC"
data1 equ 20h ;定義一個延時變量寄存器
data2 equ 21h ;定義另一個延時變量寄存器
data3 equ 22h ;定義一個延時變量寄存器
A_H EQU 30H ;除數高8位
A_L EQU 31H ;除數低8位
B1_L EQU 32H ; 被除數的最高8位
B_H EQU 33H ;被除數高8位(商的高8位)
B_L EQU 34H ;被除數低8位(商的低8位)
C1_L EQU 35H ;余數的最高8位
C_H EQU 36H ;余數高8位
C_L EQU 37H ;余數低8位
D1_L EQU 38H
D_H EQU 39H
D_L EQU 3AH
TEMP EQU 3BH
DUAN EQU 3CH ;分段值
SREG EQU 3DH
ACCBLO EQU 23H ;存放被轉換的雙字節整數低8位
ACCBHI EQU 24H ;存放被轉換的雙字節整數高8位
ACCCHI EQU 26H ;存放高8位BCD碼
ACCCLO EQU 27H ;存放中8位BCD碼,最終結果高
ACCDHI EQU 28H ;存放中8位BCD碼,最終結果低
COUNT EQU 2FH ;臨時寄存器
T1L EQU 2AH ;存放T1定時器初值低8位
T1H EQU 2BH ;存放T1定時器初值高8位
XW_TEMP EQU 40H ;暫時存放W值
XHOSTS EQU 41H ;暫時存放STATUS
HOSTF EQU 41H ;暫時存放FSR0L
;*****************************************************************************
ORG 0000H
NOP
GOTO MAIN
ORG 0008H;中斷矢量入口
NOP
;GOTO CLKINT
;################中斷服務子主程序#################################
JISHU
NOP
MOVWF XW_TEMP
SWAPF STATUS,0
MOVWF XHOSTS
MOVF FSR0L,0
MOVWF HOSTF
MOVLW 65H ;158.50ms初值,4分頻158.50ms
MOVWF TMR0H
MOVLW 37H
MOVWF TMR0L
MOVLW 00H
MOVWF TMR1H
MOVLW 00H
MOVWF TMR1L
BSF T0CON,7
BSF T1CON,0
JISHU1
BTFSS INTCON,2
GOTO JISHU1
BCF INTCON,2
BCF T1CON,0
BCF T0CON,7
JISHUFAN
MOVF HOSTF,0
MOVWF FSR0L
SWAPF XHOSTS,0
MOVWF STATUS
SWAPF XW_TEMP,1
SWAPF XW_TEMP,0
NOP
RET
;###################################################################
;************************系統初始化**************
T01
MOVLB 0FH;寄存器體切換
MOVLW 0FFH
MOVWF TRISC,1;將C口定義為輸入
MOVLW 00H
MOVWF TRISD,1;將D口定義為輸出
RETURN
;***********************************
;**********************T0初始化**************
TOINIT
NOP
MOVLW 00H;(1)禁止T0(0)16位(0)內部時鐘(0)上升沿(0)前分頻(001)4分頻
MOVWF T0CON;定時器T0初始化
MOVLW 86H;(1)16位操作(0)未使用(00)不分頻(0)禁止振蕩器(1)不與外部輸入同步(1)計數RC0入(0)禁止TR1
MOVWF T1CON;定時器T0初始化
BCF INTCON,TMR0IF;T0溢出標志清零
RETURN
;***********************************
;*******************長延時*************************
ldelay ;子程序名,也是子程序入口地址
movlw 0fh ;將外層循環參數值送到DATA1
movwf data3
llp0 movlw 0ffh ;將內層循環參數值送到DATA2
movwf data2
llp1 movlw 0ffh ;將內層循環參數值送到DATA2
movwf data1
llp2 nop
;CLRWDT ;清狗
decfsz data1,1 ;變量DATA2內容遞減,若為0則跳躍
goto llp2 ;跳轉到LP1
decfsz data2,1 ;變量DATA1內容遞減,若為0則跳躍
goto llp1 ;跳轉到LP0
decfsz data3,1 ;變量DATA1內容遞減,若為0則跳躍
goto llp0 ;跳轉到LP0
return ;返回主程序
;****************************************************
;*********************主程序**********************************************
MAIN
NOP
CALL T01
CALL TOINIT
MAIN0
NOP
CALL JISHU
NOP
MOVF TMR1L,0
MOVWF B_L;將定時器低位送B_L,被除數中間8位
MOVF TMR1H,0
MOVWF B_H;將定時器高位送B_H,被除數低8位
NOP
CALL ldelay
GOTO MAIN0
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -