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

📄 bike.asm

📁 通过霍尔传感器测量车轮转动的次数
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;******************OCM4x8C串口******************
CS	        EQU	P1.0
STD	        EQU	P1.1
SCLK	        EQU	P1.2   ;液晶控制口定义

RS_STU       	EQU	20H.0
flag            equ     20h.1
flag1           equ     20h.2
ACK             equ     20h.3
flagx           equ     20h.4
qidong          equ     20h.5

FLAG3	        DATA    23H
PFA      	BIT     FLAG3.7
PFB	        BIT     FLAG3.6
PFC     	BIT     FLAG3.5
PFD     	BIT     FLAG3.4
READY           BIT     FLAG3.3


COUNT         	EQU	34H
DA_IN		EQU	35H
WR_COUNT1	EQU	36H
WR_COUNT2	EQU	37H

SLA             EQU     5eH
SUBA            EQU     5fH
SCL             bit     P1.4
SDA             bit     P1.5


;***********************************************
		ORG     0000H			;程序执行开始地址
                LJMP    main			;跳至START
                ORG     0003H			;外中断0中断程序入口
                LJMP    INTEX0			;跳至INTEX0中断服务程序
                ORG     000BH			;定时器T0中断程序入口
                ljmp    intt0			;中断返回
                ORG     0013H			;外中断1中断入口
                reti
           ;     LJMP    INTEX1			; 跳至INTEX1中断服务程序
                ORG     001BH			; 定时器T1中断程序入口
                LJMP    INTT1			; 跳至INTT1中断服务程序
                ORG     0023H			;串口中断入口地址
                RETI					;中断返回
                ORG     002BH			;定时器T2中断入口地址
                RETI

main:         ;  call   qing_dangqian_licheng
              ;  call   qing_shangci_licheng
              ;  call   qing_zong_licheng

                call   du_dangqian_licheng
                mov    40h,74h
                mov    41h,75h
                mov    42h,76h
                call   du_zong_licheng
                mov    43h,77h
                mov    44h,78h
                mov    45h,79h

                MOV     TMOD,#11H       ;T1为16位外部控制定时器

                SETB    PX0             ;外中断0优先级为1
                setb    IT0             ;外中断0用边沿触发
                SETB    EA              ;开中断允许
                SETB    EX0             ;开外中断0
                CLR     A               ;清A
                mov     4fh,A
                MOV     20H,A           ;清内存中特定单元
                MOV     6CH,A           ;
                MOV     6DH,A           ;
                MOV     70H,A           ;
                MOV     71H,A           ;
                MOV     72H,A           ;
                MOV     73H,A           ;
                MOV     60H,A           ;
                MOV     61H,A           ;
                MOV     62H,A           ;
                MOV     63H,A           ; 清内存中特定单元
                mov     00h,a
                mov     Tl1,a
                mov     TH1,a
                MOV     68H,A           ;内存置数据#0FFH
                MOV     69H,A           ; 内存置数据#0FFH
                MOV     6AH,A           ; 内存置数据#0FFH
                MOV     6BH,A           ; 内存置数据#0FFH
                mov     6ch,a
                mov     6dh,a
                mov     6eh,a
                mov     22h,#00

                mov     TH0,#00h         ;重装定时器
	        mov     TL0,#00h


	        CALL    LCD_INIT
                LCALL   cls
                lcall   delay             ;加延时,防止乱码

                setb    flag

;***********************************************
LGS1:	        MOV	DPTR,#D_CHESU		;显示当前车速
		MOV	COUNT,#08H
		MOV	A,#80H
		LCALL	SEND_I
LGS11:          CLR	A
		MOVC	A,@A+DPTR
		LCALL	SEND_D
		INC	DPTR
		DJNZ	COUNT,LGS11

	        MOV	DPTR,#D_JULI		;显示行驶距离
		MOV	COUNT,#08H
		MOV	A,#90H
		LCALL	SEND_I
LGS21:	        CLR	A
		MOVC	A,@A+DPTR
		LCALL	SEND_D
		INC	DPTR
		DJNZ	COUNT,LGS21

fan_lu1:
                jnb     flag,fan_lu
                MOV	A,#84H
		LCALL	SEND_I
                mov     a,#30h
                LCALL	SEND_D
                mov     a,#2eh
                LCALL	SEND_D
                MOV	A,#85H
		LCALL	SEND_I
                mov     a,#30h
                LCALL	SEND_D
                mov     a,#30h
                LCALL	SEND_D

                MOV	A,#86H    ;Km
		LCALL	SEND_I
                mov     a,#4bh
                LCALL	SEND_D
                mov     a,#6dh
                LCALL	SEND_D

                MOV	A,#87H    ;/h
		LCALL	SEND_I
                mov     a,#2fh
                LCALL	SEND_D
                MOV	A,#68H
		LCALL	SEND_D

                call    delay


                ljmp    no_qi1



      fan_lu:   clr     c
                call    delay
                call    sudu_jisuan
                call    delay

     no_qi1:
                JB      P1.3,fan_lu1
                call    delay
                jnb     p1.3,$
                LCALL   cls
                LCALL   delay
LGK:
                MOV	DPTR,#D_SJULI		;显示上次行驶
		MOV	COUNT,#08H
		MOV	A,#80H
		LCALL	SEND_I
LGS31:	        CLR	A
		MOVC	A,@A+DPTR
		LCALL	SEND_D
		INC	DPTR
		DJNZ	COUNT,LGS31

	        MOV	DPTR,#D_ZONGLU		;显示总里程
		MOV	COUNT,#06H
		MOV	A,#90H
		LCALL	SEND_I
LGS41:	        CLR	A
		MOVC	A,@A+DPTR
		LCALL	SEND_D
		INC	DPTR
		DJNZ	COUNT,LGS41

                call    jisuan_shangci_lucheng ;选择清除后,当前路程会记录到这个位置,当前的里程会归零
                call    jisuan_zonglicheng     ;在第二行显示总里程数

        tel_b:  LCALL   delay
                jb      P1.3,tel_qing
                call    delay
                jnb     p1.3,$
                LCALL   cls
                LCALL   delay
                LJMP    LGS1


     tel_qing:  LCALL   delay
                jb      p1.7,tel_b
                call    confirm
                LCALL   delay
     tel_nex_2:
                jb      p1.3,tel_nex_1
                call    juli_genghuan
                jmp     LGK

     tel_nex_1:
                jb      p1.7,tel_nex_2
                call    cls
                jmp     LGK


confirm:        MOV	DPTR,#D_COM1	;显示是否要删除
		MOV	COUNT,#10H
		MOV	A,#80H
		LCALL	SEND_I
COM11:	        CLR	A
		MOVC	A,@A+DPTR
		LCALL	SEND_D
		INC	DPTR
		DJNZ	COUNT,COM11

                MOV	DPTR,#D_COM2		;显示是--上 否--下
		MOV	COUNT,#10H
		MOV	A,#90H
		LCALL	SEND_I
COM21:	        CLR	A
		MOVC	A,@A+DPTR
		LCALL	SEND_D
		INC	DPTR
		DJNZ	COUNT,COM21
                RET

lucheng_jisuan:
                mov     50h,40h     ;预处理最低位圈数40h,结果指向30h
                call    yuchuli
                mov     30h,52h
                mov     31h,53h
                mov     32h,54h
                mov     r0,#30h
                lcall   btof

                mov     50h,41h    ;预处理中间位圈数41h,结果指向36h
                call    yuchuli
                mov     36h,52h
                mov     37h,53h
                mov     38h,54h
                mov     r0,#36h
                lcall   btof

                mov     33h,#03h   ;中间位乘于255,结果指向36h
                mov     34h,#25h
                mov     35h,#60h
                mov     r0,#33h
                lcall   btof
                mov     r0,#36h
                mov     r1,#33h
                lcall   fmul

                mov     r1,#30h  ;中间位加上最低位的圈数,结果指向36h
                lcall   fadd

                mov     50h,42h   ;预处理最高位圈数42h,结果指向3ch
                lcall   yuchuli
                mov     3ch,52h
                mov     3dh,53h
                mov     3eh,54h
                mov     r0,#3ch
                lcall   btof

                mov     39h,#05h   ;最高位乘于65630,结果指向3ch
                mov     3ah,#65h
                mov     3bh,#53h
                mov     r0,#39h
                lcall   btof
                mov     r0,#3ch
                mov     r1,#39h
                lcall   fmul

                mov     r0,#3ch    ;前面的结果加上最高位,算出总共的圈数,结果指向36h
                mov     r1,#36h
                lcall   fadd

                mov     30h,#01h   ;轮圈的周长数据,指向30h
                mov     31h,#20h
                mov     32h,#90h
                mov     r0,#30h
                lcall   btof

                mov     r0,#3ch   ;轮圈的周长乘于总圈数,算出总共的行驶距离,结果指向3ch
                mov     r1,#30h
                lcall   fmul

                lcall   ftob

                mov     a,3ch
                subb    a,#04h
                jc      xiaoyu_1km
                ljmp    dayu_1km

xiaoyu_1km:     clr     c
                mov     a,3ch
                cjne    a,#03h,xiaoyu100m

                call    qing_wei     ;后四个字位置清除

                MOV	A,#94H
		LCALL	SEND_I
                mov     a,3dh
                swap    a
                anl     a,#0fh
                add     a,#30h
                LCALL	SEND_D
                mov     a,3dh
                anl     a,#0fh
                add     a,#30h
                LCALL	SEND_D

                MOV	A,#95H
		LCALL	SEND_I
                mov     a,3eh
                swap    a
                anl     a,#0fh
                add     a,#30h
                LCALL	SEND_D

                MOV	A,#96H
		LCALL	SEND_I
                mov     a,#0c3h
                LCALL	SEND_D
                mov     a,#0d7h
                LCALL	SEND_D
                ljmp    out_lucheng_jisuan

  xiaoyu100m:
                call    qing_wei     ;后四个字位置清除

                mov     a,3ch
                cjne    a,#02h,xiaoyu10m
                MOV	A,#94H
		LCALL	SEND_I
                mov     a,3dh
                swap    a
                anl     a,#0fh
                add     a,#30h
                LCALL	SEND_D
                mov     a,3dh
                anl     a,#0fh
                add     a,#30h
                LCALL	SEND_D

                MOV	A,#95H     ;米
		LCALL	SEND_I
                mov     a,#0c3h
                LCALL	SEND_D
                mov     a,#0d7h
                LCALL	SEND_D
                ljmp    out_lucheng_jisuan

  xiaoyu10m:    call    qing_wei     ;后四个字位置清除

                MOV	A,#94H
		LCALL	SEND_I
                mov     a,3dh
                swap    a
                anl     a,#0fh
                add     a,#30h
                LCALL	SEND_D


                MOV	A,#95H     ;米
		LCALL	SEND_I
                mov     a,#0c3h
                LCALL	SEND_D
                mov     a,#0d7h
                LCALL	SEND_D

                ljmp    out_lucheng_jisuan

   dayu_1km:    mov     a,3ch
                cjne    a,#04h,dayu_10Km

                MOV	A,#94H
		LCALL	SEND_I
                mov     a,3dh
                swap    a
                anl     a,#0fh
                add     a,#30h
                LCALL	SEND_D
                mov     a,3dh
                anl     a,#0fh
                add     a,#30h
                LCALL	SEND_D

                MOV	A,#95H
		LCALL	SEND_I
                mov     a,3eh
                swap    a
                anl     a,#0fh
                add     a,#30h
                LCALL	SEND_D
                mov     a,3eh
                anl     a,#0fh
                add     a,#30h
                LCALL	SEND_D

                MOV	A,#96H     ;米
		LCALL	SEND_I
                mov     a,#0c3h
                LCALL	SEND_D
                mov     a,#0d7h
                LCALL	SEND_D

                MOV	A,#97H
		LCALL	SEND_I
                mov     a,#0a1h
                LCALL	SEND_D
                mov     a,#0a0h
                LCALL	SEND_D

                jmp     out_lucheng_jisuan

   dayu_10Km:   call    qing_wei     ;后四个字位置清除

                MOV	A,#94H
		LCALL	SEND_I
                mov     a,3dh
                swap    a
                anl     a,#0fh
                add     a,#30h
                LCALL	SEND_D
                mov     a,3dh
                anl     a,#0fh
                add     a,#30h
                LCALL	SEND_D

                MOV	A,#95H
		LCALL	SEND_I
                mov     a,#2eh
                LCALL	SEND_D


                MOV	A,#96H
		LCALL	SEND_I
                mov     a,3eh
                swap    a
                anl     a,#0fh
                add     a,#30h
                LCALL	SEND_D
                mov     a,3eh
                anl     a,#0fh
                add     a,#30h
                LCALL	SEND_D

                MOV	A,#97H    ;Km
		LCALL	SEND_I
                mov     a,#4bh
                LCALL	SEND_D
                mov     a,#6dh
                LCALL	SEND_D
out_lucheng_jisuan:
                ret


jisuan_shangci_lucheng:
                call    du_shangci_licheng
                mov     50h,7ah     ;预处理最低位圈数40h,结果指向30h
                call    yuchuli
                mov     30h,52h
                mov     31h,53h
                mov     32h,54h
                mov     r0,#30h
                lcall   btof

                mov     50h,7bh    ;预处理中间位圈数41h,结果指向36h
                call    yuchuli
                mov     36h,52h
                mov     37h,53h
                mov     38h,54h
                mov     r0,#36h
                lcall   btof

                mov     33h,#03h   ;中间位乘于255,结果指向36h
                mov     34h,#25h
                mov     35h,#60h
                mov     r0,#33h
                lcall   btof
                mov     r0,#36h
                mov     r1,#33h
                lcall   fmul

                mov     r1,#30h  ;中间位加上最低位的圈数,结果指向36h
                lcall   fadd

                mov     50h,7ch   ;预处理最高位圈数42h,结果指向3ch

⌨️ 快捷键说明

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