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

📄 sudu.asm

📁 利用pic单片机的定时计数器测量汽车轮速
💻 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 INTSERVE
     
;################测速子程序#################################
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  
;###################################################################
;**************************系统初始化**************
INITIAL
 NOP
 MOVLB 0FH;寄存器体切换
 ;MOVLW 0FFH
; MOVWF TRISC,1;将C口定义为输入
 MOVLW 00H
 MOVWF TRISD,1;将D口定义为输出
 MOVLW 19H;
 MOVWF SPBRG;波特率9600
 MOVLW 04H;
 MOVWF TXSTA ;异步高速传输8位数据
 MOVLW 80H
 MOVWF RCSTA ;允许同步串行口工作
 MOVLW 80H ;RC7RC6设为输入
 MOVWF TRISC;
 BSF TXSTA,TXEN ;允许发送
 BSF RCSTA,CREN ;接收数据允许
 BSF PIE1,RCIE ;接收中断使能
 BCF PIR1,RCIF
 MOVLW 0C0H
 MOVWF INTCON ;总中断和外围中断允许
 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            ;返回主程序  
;****************************************************
 ;################通信中断子程序###########################
INTSERVE
 NOP
 BTFSS PIR1,RCIF
 GOTO ERR_RE 
 MOVF RCREG,0;读一下接收缓冲器使标志位清零
 MOVLW 0AAH 
 MOVWF TEMP

ERR_RE
 NOP
 RETFIE   

;*********************主程序**********************************************
MAIN
 NOP
 CALL INITIAL  ;系统初始化
 CALL TOINIT  ;T0初始化
MAIN0
 NOP
 CALL JISHU
 NOP
 MOVF TMR1L,0 
 MOVWF B_L;将定时器低位送B_L,被除数中间8位
 MOVF TMR1H,0
 MOVWF B_H;将定时器高位送B_H,被除数低8位
 NOP
 MOVF TEMP,0
 XORLW 0AAH       ;判断是否有CAN信号
 BNZ MAIN0     ;不相等无CAN信号,跳转
 NOP
 MOVF B_L,0
 MOVWF TXREG
 MOVF B_H,0
 MOVWF TXREG
 NOP
 MOVLW 00H 
 MOVWF TEMP
 ;CALL ldelay 
 GOTO MAIN0


 END



⌨️ 快捷键说明

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