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

📄 wg26to34.asm

📁 非接触式读卡器
💻 ASM
字号:
        CUN1   EQU  30H		;定义3歌变量
        CUN2   EQU  31H
        CUN3   EQU  32H
        ;TIME   EQU  35H
        TIME0  EQU  36H
        TIME1  EQU  37H
        ZERO   EQU  38H
        FINISH EQU  39H
        ORG    0000H
        LJMP   MAIN
        ORG    0003H		;外部中断0 入口地址
        LJMP   INT00
        ORG    0013H	    ; 外部中断1 入口地址
        LJMP   INT01
		ORG    0100H
MAIN:   MOV    SP,#70H
        MOV    P1,#0FFH                ;P1.7为D0输出,P1.6为D1输出
        MOV    CUN1,#00H
        MOV    CUN2,#00H
        MOV    CUN3,#00H	;变量赋初始值 
        MOV    R4,#03H		;R4,为串口输出字节长度=3
        MOV    R3,#09H	    ;R3,为1个字节控制
        MOV    R2,#00H		;R2,25个数据的长度控制    
        MOV    R0,#CUN1	    ;WG输入的数据指针R0  
       ; MOV    TMOD,#20H	;定时器工作方式2
       ; MOV    TL1,#0FDH	;9600 初值
       ; MOV    TH1,#0FDH	;重装初值
       ; MOV    PCON,#00H	;波特率不加倍
       ; MOV    SCON,#40H	; 串口工作方式为1
       ; CLR    ET1          ;定时器1,做为波特率发生器,不允许中断      
        SETB   EA           ;开CPU中断
        SETB   EX0			;
        SETB   EX1			;开外部中断0和1
        SETB   IT0
        SETB   IT1			;外部中断为,下降沿 触发方式 
        PUSH   ACC
	PUSH   CUN1
	PUSH   CUN2
	PUSH   CUN3      
LOOP1:  SJMP   LOOP1			 ; 等待中断        
INT00:  NOP
        INC    R2			 ;R2=0,R2加1
        CJNE   R2,#01H,CUN00  ;R2=1则不跳,数据第1位不要 
        NOP
        RETI        
CUN00:  DJNZ   R3,CUN0		;r3=9,减1不等于0则跳到CUN0  数据存再第1个字节
        INC    R0			;若R3减1=0,则WG数据指针地址加1,存下一个字节
		MOV    R3,#08H      ;R3的值要重装
		AJMP   CUN0
CUN0:   MOV    A,@R0
        CLR    CY
        RLC    A			 ;  带CY 左移1位
        MOV    @R0,A
        CJNE   R2,#19H,RETI0  ;R2等于25不跳出,已经存了24个数据,到串口输出;RETI0为中断返回
        NOP
        SJMP   LOOP 		 ; 调用串口发送程序
RETI0:  NOP
        RETI        
INT01:  NOP
        INC    R2
        CJNE   R2,#01H,CUN01  ;R2不等于1则跳
        RETI
CUN01:  DJNZ   R3,CUN11	     ;R3不等于0则跳
        INC    R0
		MOV    R3,#08H
		AJMP   CUN11
CUN11:  MOV    A,@R0
        SETB   CY
        RLC    A
        MOV    @R0,A
        CJNE   R2,#19H,RETI0  ;R2不等于25则跳
        NOP
        SJMP  LOOP             ;24个数据存完,跳到WG34发送程序

LOOP:  NOP
       LCALL  SEND3        ;调用  WG34 发送程序
	   NOP             
	   POP    CUN3
	   POP    CUN2
	   POP    CUN1
	   POP    ACC
       NOP
	   RETI		   ;WG34口发送完返回
	 ;  ////////////////////////////////////////////////
	   
	   
	   
	   
	   		     
SEND3:  MOV    FINISH,#24
        MOV    R5,#08H      ;R5是WG34输出 1个字节的长度控制
        MOV    ZERO,#10    ;zero是先输出几个0 的控制变量
        MOV    R1,#CUN1
LAB0:   NOP
        CLR    P1.7
        LCALL  DELL400US
        SETB   P1.7
        LCALL  DELL2MS
        DJNZ   ZERO,LAB0      ;输出8个0以后 在输出WG26数据
        MOV    A,@R1
 WG34:  CLR    CY
        RLC    A               ;带CY ZUO 移1位 先输出高位
        JC     WG1             ;CY是1就 跳
        SJMP    WG0             ;直接跳  

WG1:    CLR    P1.6
        LCALL  DELL400US
        SETB   P1.6
        LCALL  DELL2MS
        DJNZ   FINISH,HOLD1
        SJMP   WG00      
HOLD1:  DJNZ   R5,WG34        ;R5为WG34 1个字节的数据长度控制
        INC    R1
        MOV    A,@R1
        MOV    R5,#08H
        SJMP   WG34              ;WG数据1输出完毕,返回

WG0:    CLR    P1.7
        LCALL  DELL400US
        SETB   P1.7
        LCALL  DELL2MS
        DJNZ   FINISH,HOLD0
        SJMP   WG00 
HOLD0:  DJNZ   R5,WG34
        INC    R1
        MOV    R5,#08H
        MOV    A,@R1
        SJMP   WG34               ;WG数据0输出完毕,返回

WG00:  NOP
       ;SETB   EX0
       ;SETB   EX1
     ; SETB   EA
       RET                      ;WG34数据全部发送完毕,返回  
	   
DELL2MS: NOP
         MOV   TIME0,#250
         DJNZ  TIME0,$

		 MOV   TIME0,#250
         DJNZ  TIME0,$

		 MOV   TIME0,#250
         DJNZ  TIME0,$

		 MOV   TIME0,#248
         DJNZ  TIME0,$
		 RET

DELL400US: NOP
           MOV   TIME1,#200
           DJNZ  TIME1,$
		   RET      
        
 ;////////////////////////////////////////// 
        END
        
   

⌨️ 快捷键说明

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