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

📄 pinlv1.asm

📁 有关C51的通讯方面的程序,可直接下载到调试软件上用
💻 ASM
📖 第 1 页 / 共 2 页
字号:
      
      DJNZ    R7,HERE
      CLR     TR0
      CLR     TR1
      RET


 PINYU2:                                            ;测频率1k_0.5mhz
      MOV   A,76H
      CJNE   A,#00H,NEXT2
      MOV   65H,#00H
      MOV   66H,#00H
      MOV   67H,#00H
      AJMP  NEXT3
NEXT2:
      MOV  R6,76H
      
      MOV   R0,#65H
      MOV   R7,#03H
      MOV    R1,#50H
      MOV  65H,#00H
      MOV   66H,#00H
      MOV   67H,#00H
NEXT4: MOV   50H,#06H
      MOV   51H,#55H
      MOV   52H,#36H

      LCALL  BCDA
      DJNZ   R6,NEXT4

NEXT3:  MOV R6,TH1
       MOV R7,TL1
      LCALL  HB2
      MOV    R7,#03H
      MOV   50H,R3
      MOV   51H,R4
      MOV    52H,R5
      MOV    R0,#65H
      MOV    R1,#50H
      LCALL  BCDA
      MOV    60H,#00H           ;结果在65,66,67h中BCD码
      MOV    61H,65H
      MOV     62H,66H
      MOV    63H,67H
      RET

PINYU:
       MOV  30H,TH0
       MOV  31H,TL0
       MOV   A,76H
      ;CJNE   A,#00H,NEXT5
      ;AJMP  NEXT6
       ;CLR  TF0
       LCALL   MUL4
       LCALL   ADD1
       MOV  65H,R2
       MOV  66H,R3
       MOV  67H,R4
       MOV  68H,R5
       MOV  R0,#66H
       MOV R7,35H          ;乘以分频系数
       LCALL    MULD3_1
       MOV  36H,R3
       MOV  37H,R4
       MOV  38H,R5
       LCALL   HB4     ;转换后的三字节BCD码整数在R2,R3、R4、R5中。
       MOV  60H,R2
       MOV  61H,R3
       MOV  62H,R4
       MOV  63H,R5
       RET

    MAIKUAN:                   ;测量,测脉宽
       MOV     TMOD,#01H
       MOV     TL0,#00H
       MOV     TH0,#00H
       SETB    EA
       SETB    ET0
       MOV  76H,#00H
       SETB    P3.5
    GDP5:   MOV     C,P3.5
       JC     GDP5
   DDP5: MOV   C,P3.5
       JNC  DDP5
       SETB  TR0

 GDP6:   MOV     C,P3.5
       JC     GDP6
       CLR   TR0
      ; MOV  A,B
      ; CJNE  A,#00H,NEXT6
       ;AJMP  NEXT7
       MOV   A,TH0
       MOV   TH1,A
       MOV    A,TL0
       MOV    TL1,A
       CLR   ET0
       LCALL  MUL4
       LCALL  ADD1
       MOV  36H,R3
       MOV  37H,R4
       MOV  38H,R5
       RET


 MUL4: MOV R2,#0FFH
       MOV R3,#0FFH
       MOV R6,#00H
       MOV R7,76H
       

       LCALL MULD   
       MOV   A,76H 
       ADD   A,R5
       MOV   R5,A
       MOV   A,#00H
       ADDC  A,R4
       MOV   R4,A
       MOV   A,#00H
       ADDC   A,R3
       MOV    R3,A
       MOV    A,#00H
       ADDC   A,R2        ;结果在R2.R3.R4.R5中

       RET

  ADD1:     MOV    A,TL1
       ADD    A,R5
       MOV    R5,A
       MOV   A,TH1
       ADDC  A,R4
       MOV   R4,A
       MOV   A,#00H
       ADDC  A,R3
       MOV   R3,A
       MOV  A,#00H
       ADDC  A,R2
       MOV   R2,A            ;结果在R2.R3.R4.R5中
       RET
BIJIAO:MOV  A,R2     ;比较30h,31h,32h,33h与r2,r3,r4,r5中数据的大小,大,20H=0,
       CJNE  A,30H,TEND
       MOV  A,R3
       CJNE  A,31H,TEND
       MOV  A,R4
       CJNE A,32H,TEND
       MOV  A,R5
       CJNE  A,33H,TEND
  TEND:JC   BJ1
       SETB  20H
       AJMP   TEND2
   BJ1:CLR   20H
   TEND2:RET                   
      ;  (5)  标号: MULD    功能:双字节二进制无符号数乘法

;入口条件:被乘数在R2、R3中,乘数在R6、R7中。
;出口信息:乘积在R2、R3、R4、R5中。
;影响资源:PSW、A、B、R2~R7    堆栈需求:  2字节

MULD:MOV	A,R3	;;计算R3乘R7
	MOV	B,R7
	MUL	AB
	MOV	R4,B	;;暂存部分积
	MOV	R5,A
	MOV	A,R3	;;计算R3乘R6
	MOV	B,R6
	MUL	AB
	ADD	A,R4	;;累加部分积
	MOV	R4,A
	CLR	A
	ADDC	A,B
	MOV	R3,A
	MOV	A,R2	;;计算R2乘R7
	MOV	B,R7
	MUL	AB
	ADD	A,R4	;;累加部分积
	MOV	R4,A
	MOV	A,R3
	ADDC	A,B
	MOV	R3,A
	CLR	A
	RLC	A
	XCH	A,R2	;;计算R2乘R6
	MOV	B,R6
	MUL	AB
	ADD	A,R3	;;累加部分积
	MOV	R3,A
	MOV	A,R2
	ADDC	A,B
	MOV	R2,A
	RET


   ;  (9)  标号:  DV31    功能:三字节二进制无符号数除以单字节二进制数

;入口条件:被除数在R3、R4、R5中,除数在R7中。
;出口信息:OV=0 时,双字节商在R4、R5中,OV=1 时溢出。
;影响资源:PSW、A、B、R2~R7    堆栈需求:  2字节

DV31:	CLR	C
	MOV	A,R3
	SUBB	A,R7
	JC	DV30
	SETB	OV	;;商溢出
	RET
DV30:	MOV	R2,#10H	;;;求R3R4R5/R7-→R4R5
DM23:	CLR	C
	MOV	A,R5
	RLC	A
	MOV	R5,A
	MOV	A,R4
	RLC	A
	MOV	R4,A
	MOV	A,R3
	RLC	A
	MOV	R3,A
	MOV	F0,C
	CLR	C
	SUBB	A,R7
	ANL	C,/F0
	JC	DM24
	MOV	R3,A
	INC	R5
DM24:	DJNZ	R2,DM23
	MOV	A,R3	;;;四舍五入
	ADD	A,R3
	JC	DM25
	SUBB	A,R7
	JC	DM26
DM25:	INC	R5
	MOV	A,R5
	JNZ	DM26
	INC	R4
DM26:	CLR	OV
	RET             ;;商在R4R5中
	    ;(7)  标号:  DIVD    功能:双字节二进制无符号数除法

;入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中。
;出口信息:OV=0 时,双字节商在R2、R3中,OV=1 时溢出。
;影响资源:PSW、A、B、R1~R7    堆栈需求:  2字节

DIVD:	CLR	C	;;比较被除数和除数
	MOV	A,R3
	SUBB	A,R7
	MOV	A,R2
	SUBB	A,R6
	JC	DVD1
	SETB	OV	;;溢出
	RET
DVD1:	MOV	B,#10H	;;计算双字节商
DVD2:	CLR	C	;;部分商和余数同时左移一位
	MOV	A,R5
	RLC	A
	MOV	R5,A
	MOV	A,R4
	RLC	A
	MOV	R4,A
	MOV	A,R3
	RLC	A
	MOV	R3,A
	XCH	A,R2
	RLC	A
	XCH	A,R2
	MOV	F0,C	;;保存溢出位
	CLR	C
	SUBB	A,R7	;;;计算(R2R3-R6R7)
	MOV	R1,A
	MOV	A,R2
	SUBB	A,R6
	ANL	C,/F0                 	;;结果判断
	JC	DVD3
	MOV	R2,A            	;;够减,存放新的余数
	MOV	A,R1
	MOV	R3,A
	INC	R5	                  ;;商的低位置一
DVD3:	DJNZ	B,DVD2	      ;;计算完十六位商(R4R5)
	MOV	A,R4	            ;;将商移到R2R3中
	MOV	R2,A
	MOV	A,R5
	MOV	R3,A
	CLR	OV	;;设立成功标志
	RET


;;;入口条件:待转换的双字节十六进制整数在R6、R7中。
;;出口信息:转换后的三字节BCD码整数在R3、R4、R5中。
;;影响资源:PSW、A、R2~R7    堆栈需求:  2字节

HB2:CLR	A	;;;BCD码初始化
	MOV	R3,A
	MOV	R4,A
	MOV	R5,A
	MOV	R2,#10H	;;;转换双字节十六进制整数
HB3:MOV	A,R7	;;;从高端移出待转换数的一位到CY中
	RLC	A
	MOV	R7,A
	MOV	A,R6
	RLC	A
	MOV	R6,A
	MOV	A,R5	;;;BCD码带进位自身相加,相当于乘2
	ADDC	A,R5
	DA	A	;;;十进制调整
	MOV	R5,A
	MOV	A,R4
	ADDC	A,R4
	DA	A
	MOV	R4,A
	MOV	A,R3
	ADDC	A,R3
	MOV	R3,A	;;;双字节十六进制数的万位数不超过6,不用调整
	DJNZ	R2,HB3    ;;	;处理完16bit
	RET

   ;;(1)  标号:  BCDA    功能:多字节BCD码加法

;;入口条件:字节数在R7中,被加数在[R0]中,加数在[R1]中。
;;出口信息:和在[R0]中,最高位进位在CY中。
;;;影响资源:PSW、A、R2    堆栈需求:  2字节

BCDA:	MOV	A,R7	;;;取字节数至R2中
	MOV	R2,A
	ADD	A,R0	;;;初始化数据指针
	MOV	R0,A
	MOV	A,R2
	ADD	A,R1
	MOV	R1,A
	CLR	C
BCD1:	DEC	R0	;;;调整数据指针
	DEC	R1
	MOV	A,@R0
	ADDC	A,@R1	;;;按字节相加
	DA	A	;;;十进制调整
	MOV	@R0,A	;;;和存回[R0]中
	DJNZ	R2,BCD1	;;;处理完所有字节
	RET

    ;(5)  标号: MULD    功能:3字节二进制无符号数乘法

;入口条件:被乘数在R7中,乘数在[R0]中。
;出口信息:乘积在R2、R3、R4、R5中。
;影响资源:PSW、A、B、R2~R7    堆栈需求:  2字节

MULD3_1:INC R0
     INC  R0
    MOV	A,R7 	;;计算乘
	MOV	B,@R0
	MUL	AB
	MOV	R4,B	;;暂存部分积
	MOV	R5,A
	MOV	A,R7 	;;计算乘
	DEC  R0
	MOV	B,@R0
	MUL	AB
	ADD	A,R4	;;累加部分积
	MOV	R4,A
	CLR	A
	ADDC	A,B
	MOV	R3,A
	MOV	A,R7	;;计算乘
	DEC R0
	MOV	B,@R0
	MUL	AB
	ADD	A,R3 	;;累加部分积
	MOV	R3,A
	CLR A
	ADDC  A,B
	MOV  R2,A
	RET

   ;   (17)  标号: HB4   功能:3字节十六进制整数转换成双字节BCD码整数

;入口条件:待转换的双字节十六进制整数在36,37,38H  中。
;出口信息:转换后的三字节BCD码整数在R2,R3、R4、R5中。
;影响资源:PSW、A、R2~R7    堆栈需求:  2字节

HB4:CLR	A	;;;BCD码初始化
	MOV	R3,A
	MOV	R4,A
	MOV	R5,A
	MOV  R2,A
	MOV	R7,#18H	       ;;转换3字节十六进制整数
HB5:	MOV	A,38H   ;	;从高端移出待转换数的一位到CY中
	RLC	A
	MOV	38H,A
	MOV	A,37H
	RLC	A
	MOV	37H,A
	MOV	A,36H   ;	;从高端移出待转换数的一位到CY中
	RLC	A
	MOV	36H,A

	MOV	A,R5	    ;;BCD码带进位自身相加,相当于乘2
	ADDC	A,R5
	DA	A	;;十进制调整
	MOV	R5,A
	MOV	A,R4
	ADDC	A,R4
	DA	A
	MOV	R4,A
	MOV	A,R3
	ADDC	A,R3
	DA  A
	MOV	R3,A
	MOV	A,R2
	ADDC	A,R2
	DA	A
	MOV	R2,A 	          ;;双字节十六进制数的万位数不超过6,不用调整
	DJNZ	R7,HB5	;;处理完16bit
	RET
TRANS: MOV R0,#63H
       MOV R1,#40H
       MOV R6,#04H
  LAST:MOV      A,@R0
       ANL      A,#0FH
       MOV      @R1,A
       MOV      A,@R0
       ANL      A,#0F0H
       SWAP     A
       INC  R1
       MOV      @R1,A
       INC  R1
       DEC R0
       DJNZ R6,LAST
       RET
SEACH1:MOV      DPTR,#A8279_1
       MOVX     A,@DPTR
       ANL A,#07H
       JZ  RETUN8
       LJMP KEY_1
 RETUN8:RET

  LED:MOV      DPTR,#A8279_1
       MOV      A,#90H
       MOVX      @DPTR,A
       MOV      R1,#40H
       MOV      R7,#08H
       MOV      DPTR,#A8279_2
  LOOP:MOV      A,@R1
       ADD      A,#05H
       MOVC     A,@A+PC
       MOVX     @DPTR,A
       INC      R1
       DJNZ     R7,LOOP
       RET
       DB       3FH,06H,5BH,4FH,66H,6DH
       DB       7DH,07H,7FH,6FH

END















⌨️ 快捷键说明

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