📄 wg26to34.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 + -