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

📄 pcall2.asm

📁 餐饮呼叫系统的汇编源代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
            SWAP A
            MOV R4,A

            INC R0
            MOV A,@R0
            MOVC A,@A+DPTR
            ORL A,R4

            INC R1
            MOV @R1,A

            INC R0
            MOV A,@R0
            MOVC A,@A+DPTR
            SWAP A

            INC R1
            MOV @R1,A

            INC R1
            INC R1
            INC R0
		NOP
		NOP
            DJNZ R3,TELDATA_5

            MOV A,POC_NUM         ;  INFORMATION POCSAG DATA
            SWAP A
            ANL A,#0FH
            DEC A
            MOV R3,A              ;  POCSAG INFORMATION DATA NUMBER

            MOV A,R7
            MOV R0,A


            MOV R3,#02H                 ;限制转换2个信息位

TELDATA_6:   MOV ACC,R3
             PUSH ACC

             MOV A,R0
             ADD A,#04H
             PUSH ACC

             SETB C
                       NOP
                       NOP
          LCALL POCSAG_BUILD

                       NOP
                       NOP
            POP ACC
            MOV R0,A

            POP ACC
            MOV R3,ACC
		NOP
		NOP
            DJNZ R3,TELDATA_6

 ;==========================  TEMP SEND  ====================================
            MOV A,POC_NUM
            ANL A,#0F0H
            SWAP A
            RL A
            RL A
            ANL A,#03CH
            MOV R5,A

           MOV ACC,POC_NUM
           	NOP
		NOP
           JB  ACC.3,SEND_99XX

WAIT_10XXXX:
		NOP
		NOP
             JB SYS_STATUS.0,WAIT_10XXXX

             SETB SYS_STATUS.0
             CLR  SYS_STATUS.1

                       NOP
                       NOP
             LCALL INIT_POCSAG

                       NOP

             MOV A,POC_NUM
             RL  A
             RL  A
             RL  A
             ANL A,#038H
             ADD A,#POCSAG_BUFFER
             MOV R0,A

           MOV A,R5
           MOV R2,A

           MOV A,R7
           MOV R1,A

MOVE_10XXXX:   MOV A,@R1
               MOV @R0,A
               INC R0
               INC R1
               	NOP
		NOP
               DJNZ R2,MOVE_10XXXX

               MOV POC_NUM,#00H

               SETB C
		NOP
		NOP
               RET
                   NOP
SEND_99XX:
             	NOP
		NOP
             JB SYS_STATUS.0,SEND_99XX

             SETB SYS_STATUS.0
             SETB SYS_STATUS.1

                       NOP
                       NOP
             LCALL INIT_POCSAG
                       NOP

             MOV R3,#05H
             MOV R4,#08H      ;   ZHENG_HAO

MOVE_99XX_1:  MOV A,R4
              ADD A,#POCSAG_BUFFER
              MOV R0,A

              MOV A,R5
              MOV R2,A

              MOV A,R7
              MOV R1,A

MOVE_99XX_11:  MOV A,@R1
               MOV @R0,A
               INC R0
               INC R1
		NOP
		NOP
               DJNZ R2,MOVE_99XX_11

               MOV A,R4
               ADD A,#018H
               MOV R4,A
		NOP
		NOP
               DJNZ R3,MOVE_99XX_1

              NOP

WAIT_99XX_2:
		NOP
		NOP
             JB SYS_STATUS.0,WAIT_99XX_2

             SETB SYS_STATUS.0
             CLR  SYS_STATUS.1

                       NOP
                       NOP
             LCALL INIT_POCSAG
                       NOP

             MOV R3,#03H
             MOV R4,#00H      ;   ZHENG_HAO

MOVE_99XX_2:  MOV A,R4
              ADD A,#POCSAG_BUFFER
              MOV R0,A

              MOV A,R5
              MOV R2,A

              MOV A,R7
              MOV R1,A

MOVE_99XX_21:  MOV A,@R1
               MOV @R0,A
               INC R0
               INC R1
               	NOP
		NOP
               DJNZ R2,MOVE_99XX_21

               MOV A,R4
               ADD A,#018H
               MOV R4,A
		NOP
		NOP
               DJNZ R3,MOVE_99XX_2

               MOV POC_NUM,#00H

               SETB C
		NOP
		NOP
               RET
                   NOP

INFOR_BCD:   DB 000H,008H,004H,00CH,002H,00AH,006H,00EH,001H,009H,005H,00DH,003H,00BH,007H,00FH

;****************** TEL LINE DATA PROGRAM PROGRAM END ***********************

;*********************************************************************
;     Build Pocsag coding programe
;
;             Input :  ACC       Start POC_POINTER  3 BYTE    20 BIT
;                      C         C=0  Address
;                                C=1  Information
;
;              Output :         Start POC_POINTER  4 BYTE    32 BIT
;
;      MACHINE CYCPENS ( LCALL ): MAX = 554   , MIN = 382
;                     AFFECTED : R0 - R6 , PSW , ACC
;*********************************************************************
POCSAG_BUILD:  MOV  R1,A             ;  SAVE  ACC
               MOV  R2,#15H          ;  TOTAL NEED MOVE  21   BIT

               MOV  R0,A

               MOV  A,@R0
               RRC  A
               MOV  R3,A
               MOV  @R0,A

               INC  R0
               MOV  A,@R0
               RRC  A
               MOV  R4,A
               MOV  @R0,A

               INC  R0
               MOV  A,@R0
               ANL  A,#0F0H
               RRC  A
               MOV  R5,A
               MOV  @R0,A

MOVE_CONT:     MOV  ACC,R3
               JNB  ACC.7,MOVE_CONT1

               MOV A,R3
               XRL A,#0EDH
               MOV R3,A
               MOV A,R4
               XRL A,#020H
               MOV R4,A

MOVE_CONT1:     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

                DJNZ R2,MOVE_CONT

MOVE_END:       MOV A,R3
                RRC A
                MOV R3,A

                MOV A,R4
                RRC A
                SWAP A
                ANL  A,#0EH
                MOV R6,A

                MOV A,R3
                SWAP A
                ANL  A,#0F0H
                ORL  A,R6
                MOV  R6,A

                MOV A,R3
                SWAP A
                ANL  A,#07H
                MOV  R5,A


               CLR F0

               MOV  A,R1              ;  POCSAG START POINTER
               MOV  R0,A

               MOV  A,@R0
               JNB  P,POCSAG_1
               CPL  F0

POCSAG_1:
               INC  R0
               MOV  A,@R0
               JNB  P,POCSAG_2
               CPL  F0

POCSAG_2:
               INC  R0
               MOV  A,@R0
               ANL  A,#0F8H
               ORL  A,R5
               MOV  @R0,A
               JNB  P,POCSAG_3
               CPL  F0

POCSAG_3:
               MOV  A,R6
               CLR C
               RR  A
               JNB  P,POCSAG_4
               CPL  F0

POCSAG_4:
               MOV C,F0
               RLC A
               INC R0
               MOV @R0,A
		NOP
		NOP
POC_BUL_END:   RET


;*****************POCSAG BUILD PRORAM END*********************
;****************************************************************************
;
;      POCSAG SEND START
;
;****************************************************************************
POC_START:
              CLR  SYS_STATUS.7       ;   COMMAND CLOSE

              SETB SYS_STATUS.1
              JB SYS_STATUS.0,POC_START_1
                 NOP
                 NOP
                 NOP
              SETB SEND_PTT         ;   SEND ENABPEN
              CLR LED2

              NOP
              NOP
              LCALL DELAY_10MS
              NOP
              SETB SEND_PTT         ;   SEND ENABPEN
              CLR LED2
              	NOP
                NOP

              LCALL 	XREDI	;控制PLL
              	NOP
		NOP
              LCALL DELAY_10MS
              NOP
              LCALL DELAY_10MS
              NOP
              LCALL DELAY_10MS
              NOP
              LCALL DELAY_10MS
              NOP
              LCALL DELAY_10MS
              NOP
              LCALL DELAY_10MS
              NOP
              LCALL DELAY_10MS
              NOP
              LCALL DELAY_10MS
              NOP
              LCALL DELAY_10MS
              NOP
              LCALL DELAY_10MS
               SETB SEND_PTT         ;   SEND ENABPEN
               CLR LED2
                NOP


              CLR SYS_STATUS.1

              MOV SEND_BYTE,#00H
              MOV SEND_BIT_NUM,#00H
              MOV SEND_BYTE_NUM,#80H            ;此处设定的是前置码的个数
              MOV SEND_STRU,#00H

              ;SETB ET0		;此处开0中断,使开始发送!
                   NOP
                   NOP

POC_START_1:   RET
;***********************************************************************
;********************************************************
;                        串行中断
;要接收/发送都不误
;********************************************************
S_INT:
		PUSH A
		PUSH PSW

		CLR RS1			;使用第1组工作寄存器
		SETB RS0

		 NOP
		 NOP
		 JB RI,RECEIVE	       ;首先判断是出还是入
		 CLR TI
		NOP
		NOP
                LJMP INTS_RETI
;*****************接收部分*****************
RECEIVE:
		CLR RI
		JB F_FIRST_DATA,LOOP1

		MOV A,SBUF
		CJNE A,#07EH,INTS_RETI
                SETB F_FIRST_DATA
                NOP
                NOP
                AJMP INTS_RETI
LOOP1:
		JB F_SECOND_DATA,LOOP2
		SETB F_SECOND_DATA
		MOV A,SBUF
		MOV R1,A
                CLR C
                CJNE A,#0FH,LOOP0	;第2个数据是数据串的长度
LOOP0:          JNC IN_ERROR      ;如果接收到的长度大于16,说明数据错误
                INC R1		;R1里存放的是接收的数据的个数
		MOV R0,#S_IN_DATA

LOOP2:					;正式接收数据
                MOV A,SBUF
                MOV @R0,A
		INC R0
		DJNZ R1,INTS_RETI
		CLR F_FIRST_DATA		;接收完成,清标志
                CLR F_SECOND_DATA
                SETB F_RECE_END
                NOP
             	NOP
             	AJMP INTS_RETI

IN_ERROR:
                CLR F_FIRST_DATA
                CLR F_SECOND_DATA
                CLR F_RECE_END

INTS_RETI:      NOP
		POP PSW
		POP A
                NOP
		RETI

;******************************************
;输入:CRC_COUNT(要校验的数据的个数),
;     CRC_DATA(要校验的CRC数据区域的起始地址)
;USE : CRC_LOOP, A, R1
;输出: CRC_DATA(放在CRC数据区域的第一个位置)
;CRC多项式:35H
;********************************************
CRC_CAL:CLR EA
CRCZ:	MOV R1,#CRC_DATA      ;数据区开始的起始地址位,结果计算出来,也放在第一个数里.
CRC0:
        INC R1
	MOV	CRC_LOOP,#08H
CRC1:	MOV	A,@R1
	CLR     C
	RLC     A
	MOV	@R1,A
	MOV	A,CRC_DATA
	RLC	A
	MOV	CRC_DATA,A
	JNC	CRC2
	XRL     CRC_DATA,#035H
CRC2:   NOP
        NOP
        DJNZ	CRC_LOOP,CRC1
        NOP
        NOP
	DJNZ	CRC_COUNT,CRC0
        SETB EA
	RET
;*******************************************
MOV_TO_CRC:
		MOV A,@R1
		MOV @R0,A
		INC R0
		INC R1
		DJNZ R3,MOV_TO_CRC
		MOV @R0,#00H		;CRC数据区为0
		RET
MOV_TO:
		MOV A,@R1
		MOV @R0,A
		INC R0
		INC R1
		DJNZ R3,MOV_TO
		RET
;******************************************************************
DELAY_10MS:

        MOV DELAY_TIME0,#0FFH
        MOV DELAY_TIME1,#012H
DELAY_10MS_1:
		NOP
		NOP
	DJNZ DELAY_TIME0,DELAY_10MS_1
                NOP
                NOP
        DJNZ DELAY_TIME1,DELAY_10MS_1
	     	NOP
		NOP
	     RET
;********************************************
DELAY_XUS:
		NOP
		NOP
	DJNZ DELAY_TIME0,DELAY_XUS
                NOP
                NOP
	     RET
;*************************************************************
;;***********NAME XUANG  F=327.400MHz	f=12.8MHz********

XREDI: 		MOV	R4,#0FFH			;延时
		MOV	R6,#0FFH
		NOP
		NOP
		DJNZ	R4,$
		NOP
		NOP
		DJNZ	R6,$
		CLR	PDAT
		CLR	PCLK
		CLR	PEN
	        MOV	R3,#8			;写参数分频值,8401H(512,25K)
		MOV	A,#84H
LP10:		RLC	A
		MOV	PDAT,C
		SETB	PCLK
		NOP
		NOP
		NOP
		CLR	PCLK
		NOP
		NOP
		DJNZ	R3,LP10
		MOV	R3,#8;
		MOV	A,#1H
LP12:		RLC	A
		MOV	PDAT,C
		SETB	PCLK
		NOP
		NOP
		NOP
		CLR	PCLK
		NOP
		NOP
		DJNZ	R3,LP12
                SETB    PEN
                NOP
		NOP
		NOP
		CLR	PEN
		NOP
		NOP
		NOP

XVCODI:		CLR	PDAT			;写VCO分频值	323.050MHz
		NOP
		NOP
		NOP
		NOP
		SETB	PCLK
		NOP
		NOP
		NOP
		CLR	PCLK
		NOP
		NOP
		NOP
		SETB	PCLK
		NOP
		NOP
		NOP
		CLR	PCLK
		NOP
		NOP
		NOP
		SETB	PCLK
		NOP
		NOP
		NOP
		CLR	PCLK
		NOP
		NOP
		MOV	R3,#8
		MOV	A,#0CCH			;写N参数 (数字机CB)
LP20:		RLC	A
		MOV	PDAT,C
		SETB	PCLK
		NOP
		NOP
		NOP
		CLR	PCLK
		NOP
		NOP
		DJNZ	R3,LP20
		MOV	R3,#8
		MOV	A,#28H			;写A参数 (数字机用7)
		RL	A
LP22:		RLC	A
		MOV	PDAT,C
		SETB	PCLK
		NOP
		NOP
		NOP
		CLR	PCLK
		NOP
		NOP
		DJNZ	R3,LP22
                SETB    PEN
		NOP
		NOP
		NOP
                CLR     PEN

                NOP
		NOP

                RET

		NOP
		NOP
;********************************************************
TEST:
	PUSH A
	PUSH PSW


	SETB SEND_PTT
        CLR LED2
        NOP
        NOP
        NOP
        NOP
	LCALL XREDI

	CLR LED2
	CALL DELAY_10MS
	CALL DELAY_10MS
	SETB LED2

TEST_LOOP:

		MOV WDRST,#01EH		;WDT
		MOV WDRST,#0E1H
	JNB P1.4,TEST_LOOP		;P1.4为1的时候退出

        CLR SEND_PTT
        SETB LED2


	POP PSW
	POP A
	RETI


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

	               ORG 0F80H
ERROR_P:
                NOP
                NOP
		LJMP SYS_START
;*********************************************************
	ORG 0FB0H
	DB 00H
	DB 00
	DB 00
	DB 00			;前4个是群呼地址的低4位



		END

⌨️ 快捷键说明

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