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

📄 receive.asm

📁 是有线系统的接收部分
💻 ASM
字号:
;该程序为有线传送系统的接收部分,定时器T0负责显示的扫描,T1作为串口波特率发生器
;串口波特率9600bps,串口接收数据后,根据数据的类型决定是否要产生报警信号(LED,和
;蜂鸣器),串口接收到回车符后开始处理本次接收的数据.串口接收数据的类型号如下:
;当前温度   A1= = 386C   ;A:数据类型标志  1:通道号  _ _ :显示为暗  386C:38.6C
;温度上限   B1= = 386C   ;B:数据类型标志  1:通道号  _ _ :显示为暗  
;报警       C1>p ====
;单稳态时间 D1_ 3494     ;3494:3494H
;当检测到C类型数据后,发出声音,亮发光二极管,并显示当前温度
;工作方式1(P_T0)进行中断处理,
;中断时间为2.5ms,  FOSC为12MHZ
DISPPTR  EQU   30H         ; 显示缓冲区地址30-37
DISPLEN  EQU   08H         ; LED数
DISPCLK  BIT   P2.5        ;脉冲端
DISPDIN  BIT   P2.6        ;164 数据输入口
DISPDATA EQU   P0          ;显示数据输出口
DISPR1	 EQU	40H
DISPR0	 EQU	41H

PSECOND  EQU   38H	   ;时间秒标志,判是否到200个0.0025秒,即0.5秒
second	equ	3bh
serialbuf	equ	39h
bufsize		equ	3ah
FOSC     EQU   12
TOUT     EQU  1500
TH0DATA   EQU   (65536-TOUT*FOSC/12)/256   ;定义TH0值
TL0DATA   EQU    (65536-TOUT*FOSC/12)MOD 256  ;定义TL0值
alert	bit	2fh.0
      ORG    0000H
      AJMP   	MAIN
      ORG    	000BH
      LJMP   	P_T0
      org	23h
      LJMP	P_S	
;========主程序=========
;
;
ORG	30H
MAIN:
	clr	ea
	mov	SP,#6fh
	acall	init
	clr	ea
      	acall	dispinit
      	setb	ea
HERE: 
	SJMP HERE
	
;-----------------------------------
;
;
;
;
;串行接收程序,接收到回车符后,开始处理接收到的数据
;数据临时存放在serialbuf中,字节数bufsize
;使用工作寄存器组2
;
;
P_S:
	jbc	RI,P_Srece
	jbc	TI,P_Ssend
P_Ssend:reti
P_Srece:
	push	psw
	push	acc
	mov	psw,#10h	;RS1=1,RS0=0
	mov	a,SBUF
	CJNE	A, #0dh, P_Srece1
	mov	serialbuf,#50h
	mov	bufsize,#0
	mov	r0,#50h
	mov	r1,#dispptr
	mov	r2,#8
	clr	alert		;清除报警标志

	mov	a,@r0
	CJNE	A, #"C", P_Srece4
	setb	alert		;接到C,D时,C:报警(置报警标志),D:单稳态时间显示
	setb	c
P_Srece4:


P_Srece2:
	mov	a,@r0
	clr	c
	subb	a,#30h	;把ASCII码转换成显示码
	mov	@r1,a
	inc	r0
	inc	r1
	DJNZ	r2,P_Srece2
	setb	dispdot		;小数点亮
	pop	acc
	pop	psw
	reti
P_Srece1:mov	r0,serialbuf
	mov	@r0,a
	inc	serialbuf
	inc	bufsize
	pop	acc
	pop	psw
	reti

;使用工作寄存器组1
P_T0:
      MOV TL0,#TL0DATA
      MOV TH0,#TH0DATA
      PUSH	PSW
      PUSH	ACC
      mov	psw,#08h	;RS1=0,RS0=1
DIN12 :DJNZ PSECOND,DIN11	
	inc	second	
DIN11:  jnb	alert,DIN13
	mov	a,second
	mov	c,acc.1
	mov	p1.0,c	;LED闪
	cpl	p1.1	;声音报警
	LCALL	DISP
	pop	acc
	pop	psw
	RETI
DIN13:setb	p1.0
	setb	p1.1
      LCALL  DISP    ;设定时时间为0.05秒,定时20次则一秒    	
      POP	ACC
      POP	PSW
      RETI
init:
	MOV 	TMOD, #21H       ;定时器T0工作于方式1,
      	MOV 	TL0, #TL0DATA
      	MOV 	TH0, #TH0DATA        ;
	mov	th1,#0fdh	;9600bps
	mov	tl1,#0fdh
	mov	PCON,#00h	;波特率no加倍
	mov	SCON,#50h	;8bit可变速率,mode 1
	clr	p2.0	;设置为接收状态
	mov	serialbuf,#50h
	mov	bufsize,#0
	clr	alert
	setb	dispdot
	mov	psw,#10h
	MOV	DISPR0,#DISPPTR
	MOV	DISPR1,#DISPLEN
	MOV	PSECOND,#200
	mov	psw,#10h
	mov	r0,#50h
	mov	r2,#0
	mov	psw,#0
	mov	20h,#0

      	SETB	ET0            ;开定时器T0中断允许
      	CLR	ET1
      	SETB	ES
      	SETB	PS
      	SETB	TR1	;串口波特率发生器
      	SETB 	TR0            ;定时器T0开始定时运行
      	SETB 	EA             ;开总中断
      	RET
;=========显示子程序
dispa	equ	01h
dispb	equ	02h
dispc	equ	04h
dispd	equ	08h
dispe	equ	10h
dispf	equ	20h
dispg	equ	40h
disph	equ	80h
disp8	equ	0ffh-disph
dispdot	bit	00h
DISP:   MOV     A,DISPR1
        CJNE   A,#DISPLEN,DISP1		;判断是否显示完毕
        CLR    DISPDIN			;显示完毕清输入口
DISP1:  CLR    DISPCLK			;脉冲端送入低电平
        MOV	DISPDATA,#0FFH		;延时1T
        SETB   DISPCLK                  ;脉冲端送入高电平
        SETB   DISPDIN       		;开启输入口      
        MOV    DPTR,#DISPTAB		;取显示数据表
        MOV	R0,DISPR0
        MOV    A,@R0			;取出数据
        MOVC   A,@A+DPTR		;转化为数据显示字形码
        cpl	a
        jnb	dispdot,DISP4
        CJNE	R0, #35h, DISP4
        clr	acc.7			;dispdot  light
DISP4:
        MOV    DISPDATA,A		;显示数据由P0送出       
DISP2:  INC    DISPR0
        DJNZ   DISPR1,DISP3
        MOV    DISPR1,#DISPLEN
        MOV    DISPR0,#DISPPTR
DISP3:  RET
DISPTAB: db	disp8-dispg,dispb+dispc,dispa+dispb+dispg+dispd+dispe		;0,1,2
	db	disp8-dispe-dispf,disp8-dispa-dispd-dispe,disp8-dispb-dispe	;3,4,5
	db	disp8-dispb,dispa+dispb+dispc,disp8,disp8-dispe		;6,7,8,9
	db	00h,00h,00h,dispg,dispe+dispc+dispd,00h,00h		;全暗,全暗,全暗,-,u(>),全暗,全暗
	db	disp8-dispd,disp8-dispa-dispb,disp8-dispb-dispc-dispg		;a,b,c
	db	disp8-dispa-dispf,disp8-dispb-dispc,disp8-dispb-dispc-dispd	;d,e,f
	db	disp8+disph,00h,disph,dispg,dispa,dispb,dispc,dispd,dispe	;全亮,全暗,小数点亮,负号,...
	db	disp8-dispc-dispd,dispg+dispc+dispd+dispe,disp8-dispb			;19H:P  1BH:o 1CH:G
	db	dispb+dispc+dispd						;1DH:u
dispinit:
	mov	30h,#11h	;a
	mov	31h,#1
	mov	32h,#0dh	;-
	mov	33h,#0dh	;-
	mov	34h,#03h
	mov	35h,#9
	mov	36h,#2
	mov	37h,#13h	;c
	setb	dispdot
	ret
delayms:
	mov	b,#250
	nop
	nop
	DJNZ	b,$-2
	DJNZ	acc,delayms
	ret
 end

⌨️ 快捷键说明

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