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

📄 new9d4c.asm

📁 该程序采用汇编语言编写
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; hang display board program
; sm8958A 22.1184m.115200baud    //2006/11/06
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
FLAG            EQU          20H
ADDR_MARK       BIT          20H.0
;wan_flag       BIT          20H.1
DATA_MARK       BIT          20H.2
RECEIVE_MARK    BIT          20H.3
LED_F_MARK      BIT          20H.4
DOT_F_MARK      BIT          20H.5
OPEN_LED_MARK   BIT          20H.6
OPEN_DOT_MARK   BIT          20H.7
SECOND          BIT          21H.0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLEARDIS_FLAG   BIT          21H.1         ;为1的话就到定时器0去进行定时计数。
FLAG_35         BIT          21H.2         ;为1去判断clear_flag标志是否为0,为0的话就去清屏处理
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BEFORE          BIT          21H.3
scan_dot            BIT          21H.4
killzero        bit          21h.5
spkflag         bit          21h.6
requireshift    bit          21h.7

xun_mark	BIT	     22H.0
YYJDATA_MARK	BIT	     22H.1


bai_flag        bit          22h.2
shi_flag        bit          22h.3
ge_flag         bit          22h.4
qian_flag       bit          22h.5
wan_flag        bit          22h.6
t500ms_flag     bit          22h.7
dot_flag	bit	     23h.0

xun46_mark	bit	     23h.1
bcc_mark	bit	     23h.2	
xun_flag	bit	     23h.3
clear_flag	bit	     23h.4
on_speak_flag	bit	     23h.5	
;wan_flag	bit	     23h.6

INPUT_DATA      EQU          24H
OUTPUT_DATA     EQU          25H
p4              equ          0E8h
SCONF           equ          08Eh
IMPSR		EQU          085H
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
OPEN_DOT_ARRAY  BIT          P1.5
DOT_ARRAY_STB   BIT          P3.5
OPEN_LED        BIT          P3.3
LED_STB         BIT          P1.7
;RAM_CS          BIT          P1.5  ;DEL ALL
;ROM_CS          BIT          P1.2
speech_cs       bit          p1.3
SERIAL_DATA     BIT          P3.4
SERIAL_CLOCK    BIT          P1.6
DE		BIT 	     P1.4
rest_speech     bit          P4.3
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
       DSEG     AT           24H
DOT_ROW_COUNT:  DS           1
char_count:     ds           1
bit_count:      ds           1
volume:         ds           1
REC_COUNT:      DS           1
REC_BCC:        DS           1
RECEIVE_ADDR:   DS           1
header:         ds           1
latter:         ds           1
LED_BUF:        DS           22
LED_LIGHT:      DS           1
DOT_LIGHT:      DS           1
micro_count:    DS           1
SECOND_COUNT:   DS           1
minute:         ds           1
LIGHT_COUNT:    DS           1
LIGHT_COUNT0:   DS           1
MIDDLE:         DS           3
SPACE:          DS           1
SHIFT_COUNT:    DS           1
STOP_COUNT:     DS           1
;local_port:     ds           1
speak_count:    ds           1
CONTROLBUF:	DS  	     1
SPEAK_BUF:      DS           3
;rec_length:	ds	     1
addr_buf:	ds           1
;RECEIVE_BUF:    DS           13
;TRANS_BUF:     ds            2
TRANS_ADDR:     ds           3
TRANS_COUNT:     ds          1
;;;;;;;2006-08-06 ADD
RECDATA:	DS	     22

COMMAND_BYTE:	DS    	     1
LEN_BYTE:	DS	     1
CHANNEL_BYTE:	DS	     1
dotnumber:	ds	     1
dotnumber1:	ds	     1

      iseg  at  80h
RECEIVE_BUF2:   ds            13
RECEIVE_BUF1:   ds            13
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        CSEG    AT       0
	ORG	0000H
	AJMP	START
	ORG	0003H
	ljmp	extern_int0          ;外部中断0
	reti
	ORG	000BH
	LJMP	TIMER0_INT          ;定时器0中断
	RETI
	ORG	0013H
	RETI
	ORG	0023H
	ljmp	receive_send          ;串口中断
	RETI
	NOP
	ORG	050H
START:
        setb    speech_cs
        SETB    P3.6
	mov 	p0,#00
        NOP
        NOP
	clr	p3.6
	mov	b,#7fh
	mov	r0,#00h         	;clear internal ram
	mov	@r0,#00h
	inc	r0
	djnz	b,$-3
	mov	sp,#0d0h
	mov	p4,#0ch
	mov	ie,#12h
	mov	tmod,#21h      		;timer0 work mode 1,timer1 work mode 2
	mov	scon,#50h      		;serial port work mode 1
   	mov 	sconf,#01h		;disable
	MOV     IMPSR,#00H              ;SELECT 0 PAGE
	mov	pcon,#80h      		;baudurate 115200
	mov	th1,#0feh		;22.1184M             TH1=TL1=256-(22118400/57600/32/12+0.5) 
;	mov	th1,#0e8h               ;22.1184m 4800
;	mov	th1,#0f4                ;22.1184M             TH1=TL1=256-(22118400/4800/32/12+0.5)
	mov	th0,#0f8h
	mov	tl0,#0cdh
	mov	space,#7fh
	mov	latter,#01h
	mov	header,#0feh
;	mov	p1,#3ch
	mov	dot_row_count,#00h 	;dot array matrix row count
	mov	led_buf,#01h
	mov	LED_LIGHT,#0fh		;default max bright

	SETB	TR1
	SETB	TR0
        clr	ex0
        clr     de
	SETB	PS
;        clr     ie0
        clr     ea
        clr     ea
        SETB    P3.6
	mov 	CONTROLBUF,#01h  ;绿灯亮
	MOV	a,CONTROLBUF
	mov 	p0,a
        NOP
        NOP
	clr	p3.6
	mov	a,#20            ;dealy 1s
	lcall	delay

	SETB    P3.6
	mov 	CONTROLBUF,#02h  ;红灯亮
	MOV	a,CONTROLBUF
	mov 	p0,a
        NOP
        NOP
	clr	p3.6
	SETB	EA

;	lcall	speak_start
	clr	open_led         	;enable led
	clr	open_dot_array     	;enable dot matrix
	lcall	testself
	setb	open_led
	setb	open_dot_array

	lcall	RST_SP

	
;	lcall	speak_out

        mov     p0,#0a3h
	mov     p2,#00h
        clr     speech_cs
        nop
        setb    speech_cs
	MOV	CONTROLBUF,#02H

	clr 	dot_flag
	clr	yyjdata_mark
	clr	addr_mark
;	clr	CHANNEL_mark
	clr	receive_mark
	mov     r1,#LED_BUF
        mov     b,#21
lll:
        mov     a,#0AH
        mov     @r1,a
        inc     r1
        djnz    b,lll	
	clr	LED_F_MARK
	setb	OPEN_LED_MARK
	lcall	put_on_led
	lcall	speak_start          ;后面加的

;**********************************************************************
MAIN:
	JB	OPEN_LED_MARK,RENOVATE_LED0
	setb	open_led
	jmp	main0
RENOVATE_LED0:
	LCALL	RENOVATE_LED
MAIN0:
	jnb	t500ms_flag,main1          ;刷新
	clr	t500ms_flag
        clr     ea
        SETB    P3.6
	MOV	a,CONTROLBUF
	mov 	p0,a
        NOP
        NOP
	clr	p3.6
        setb    ea
	JB	open_led,MAIN1
        lcall   put_on_led
MAIN1:
	JNB	RECEIVE_MARK,MAIN2
	CLR	RECEIVE_MARK
	LCALL	DETEMINE_COMMAND
main2:
	jnb	flag_35,main3
	jb	cleardis_flag,main3
	clr	flag_35
	lcall	cleardis_command
main3:
	jnb	spkflag,main
	jb	on_speak_flag,main4
	lcall	speak_out
	AJMP	MAIN
main4:
	mov	micro_count,#00h
	ajmp	main
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;名称: renovate_led
;功能: LED显示字符是否是正常或闪烁
;I /P:
;O /P:
;注备:
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
renovate_led:
	jb	led_f_mark,ledflashdisp
	MOV	A,LED_LIGHT
	CLR   	C
	SUBB  	A,LIGHT_COUNT
	JC   	renovate_led1
	MOV	LIGHT_COUNT0,#00H
	clr	open_led
	ajmp	renovate_ledRET
renovate_led1:
	setb    open_led
	ajmp	renovate_ledRET
ledflashdisp:
	jb	second,dispon 	;led blink display
	setb	open_led
	ajmp	renovate_ledRET
dispon:
	MOV	A,LED_LIGHT
	CLR   	C
	SUBB  	A,LIGHT_COUNT
	JC   	renovate_led2
	MOV	LIGHT_COUNT0,#00H
	clr	open_led
	ajmp	renovate_ledRET
renovate_led2:
	setb    open_led
renovate_ledRET:
	RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
cleardis_command:
	clr	dot_flag                   ;清屏的时候去小数点
	mov     r1,#LED_BUF
        mov     b,#21
uuu0:
        mov     a,#0AH
        mov     @r1,a
        inc     r1
        djnz    b,uuu0	
	clr	LED_F_MARK
	setb	OPEN_LED_MARK
	lcall	put_on_led
	ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DETEMINE_COMMAND:
	LCALL	pre_first30
	jbc	xun_flag,xun_pre               ;判断是否是巡查命令
	jbc	clear_flag,clear_display       ;判断是否是清屏命令

	MOV	A,RECDATA+20      ;取出命令字节
	setb	dot_flag           ;显示的时候加小数点
	cjne  	a,#31h,command1         ;处理31命令
	mov	led_buf,recdata
	mov	led_buf+1,recdata+10
	mov	led_buf+2,recdata+11
	mov	led_buf+3,recdata+12
	mov	led_buf+4,recdata+13
	mov	led_buf+5,recdata+14
	mov	led_buf+6,recdata+15
	mov	led_buf+7,recdata+16
	mov	led_buf+8,recdata+17
	mov	led_buf+9,recdata+18
	mov	led_buf+10,recdata+19
	mov	led_buf+11,recdata+1
	mov	led_buf+12,recdata+2
	mov	led_buf+13,recdata+3
	mov	led_buf+14,recdata+4
	mov	led_buf+15,recdata+5
	mov	led_buf+16,#03ah
	mov	led_buf+17,recdata+6
	mov	led_buf+18,recdata+7
	mov	led_buf+19,recdata+8
	mov	led_buf+20,recdata+9

	clr	LED_F_MARK
	setb	OPEN_LED_MARK
	
	lcall	put_on_led
	lcall	speak_cartype
	jmp	commandret
clear_display:                             ;清屏处理命令
	clr	dot_flag                   ;清屏的时候去小数点
	mov     r1,#LED_BUF
        mov     b,#21
lll0:
        mov     a,#0AH
        mov     @r1,a
        inc     r1
        djnz    b,lll0	
	clr	LED_F_MARK
	setb	OPEN_LED_MARK
	lcall	put_on_led
	lcall	speak_pingan
	jmp	commandret
xun_pre:
	setb	rs0
	clr	rs1
	mov	r0,#trans_addr
	mov	r1,#trans_addr
	mov	@r1,#064h
	inc 	r1
	mov	@r1,#0ah
	mov	trans_count,#03
	mov	sbuf,#0ah
	jmp	commandret
command1:
	cjne	a,#032h,command2          ;处理32命令
	lcall	speak_yue
	jmp	commandret
command2:
	CJNE 	A,#033H,command3           
	lcall	speak_mian
	jmp	commandret
command3:
	CJNE 	A,#034H,command4           

	lcall	speak_chuang
	jmp	commandret
command4:
	CJNE 	A,#035H,commandret          

	lcall	display_speak
commandret:
	RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
pre_first30:
	mov	a,recdata
	cjne	a,#30h,f00
	mov	recdata,#03ah
f00:
	mov	a,recdata+1
	cjne	a,#30h,f2
	mov	recdata+1,#03ah
	mov	a,recdata+2
	cjne	a,#30h,f2
	mov	recdata+2,#03ah
	mov	a,recdata+3
	cjne	a,#30h,f2
	mov	recdata+3,#03ah
	mov	a,recdata+4
	cjne	a,#30h,f2
	mov	recdata+4,#03ah
	mov	a,recdata+5
	cjne	a,#30h,f2
	mov	recdata+5,#03ah
f2:
	mov	a,recdata+6
	cjne	a,#30h,f3
	mov	recdata+6,#03ah
	mov	a,recdata+7
	cjne	a,#30h,f3
	mov	recdata+7,#03ah
	mov	a,recdata+8
	cjne	a,#30h,f3
	mov	recdata+8,#03ah
	mov	a,recdata+9
	cjne	a,#30h,f3
	mov	recdata+9,#03ah
f3:
	mov	a,recdata+10
	cjne	a,#30h,f4
	mov	recdata+10,#03ah
	mov	a,recdata+11
	cjne	a,#30h,f4
	mov	recdata+11,#03ah
;	mov	a,recdata+12
;	cjne	a,#30h,f4
;	mov	recdata+12,#03ah
;	mov	a,recdata+13
;	cjne	a,#30h,f4
;	mov	recdata+13,#03ah
f4:
	mov	a,recdata+15
	cjne	a,#30h,f_ret
	mov	recdata+15,#03ah
	mov	a,recdata+16
	cjne	a,#30h,f_ret
	mov	recdata+16,#03ah
;	mov	a,recdata+17
;	cjne	a,#30h,f_ret
;	mov	recdata+17,#03ah
;	mov	a,recdata+18
;	cjne	a,#30h,f_ret
;	mov	recdata+18,#03ah
f_ret:
	ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
display_speak:
	setb	cleardis_flag
	setb	flag_35
	mov	led_buf,#03ah
	mov	led_buf+1,#03ah
	mov	led_buf+2,#03ah
	mov	led_buf+3,#03ah
	mov	led_buf+4,#03ah
	mov	led_buf+5,#03ah
	mov	led_buf+6,#03ah
	mov	led_buf+7,#03ah
	mov	led_buf+8,#03ah
	mov	led_buf+9,#03ah
	mov	led_buf+10,#03ah
	mov	led_buf+11,recdata+1
	mov	led_buf+12,recdata+2
	mov	led_buf+13,recdata+3
	mov	led_buf+14,recdata+4
	mov	led_buf+15,recdata+5
	mov	led_buf+16,#03ah
	mov	led_buf+17,#03ah
	mov	led_buf+18,#03ah
	mov	led_buf+19,#03ah
	mov	led_buf+20,#03ah
	clr	LED_F_MARK
	setb	OPEN_LED_MARK
	lcall	put_on_led

	mov	r1,#speak_buf             ;语音报出谢谢
	mov	@r1,#01Fh                  ;OLD IS 0X2E
	inc	r1
	mov	@r1,#0ffh
	MOV   	SPEAK_COUNT,#00H
  	mov 	micro_count,#30h           ;this will sure to speak.
 	SETB  	EX0
	setb	spkflag
        ret

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;名称: testself
;功能: 程序自检
;I /P:
;O /P:
;注备:
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
testself:
	mov 	char_count,#21
testone:
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	;mov   	a,led_buf
	mov     led_buf,#00h
	mov     a,led_buf
	mov     dptr,#LED_CODE
	movc    a,@a+dptr          ;lqb 20050817
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	lcall  	left_shift
	djnz  	char_count,testone
	setb  	led_stb
	clr   	led_stb
 	mov   	led_buf+1,#0ffh
testsix:
	mov 	char_count,#10h
testtwo:
	mov   	a,led_buf+1
      	lcall  	left_shift
    	djnz   	char_count,testtwo
     	clr   	c
      	mov 	dptr,#row_word
     	mov  	a,dot_row_count
       	rlc    	a
      	inc    	a
     	movc   	a,@a+dptr
      	lcall  	left_shift
      	mov  	a,dot_row_count
     	CLR    	C
      	RLC    	A
   	movc  	a,@a+dptr
     	lcall   left_shift
      	SETB  	DOT_ARRAY_STB                ;SERIAL OUTPUT DATA STORE
      	NOP
      	CLR   	DOT_ARRAY_STB
       	mov    	led_buf+1,#00h
      	INC   	DOT_ROW_COUNT
       	MOV    	A,DOT_ROW_COUNT
    	CJNE 	A,#10H,testthree
  	MOV    	DOT_ROW_COUNT,#00H
testthree:
      	inc   	led_buf+3
      	inc  	led_buf+2
      	mov   	a,led_buf+2
     	cjne  	a,#10h,testseven
     	mov   	led_buf+1,#0ffh
      	mov   	led_buf+2,#00h
testseven:
      	mov     a,led_buf+3
    	cjne   	a,#0f1h,testfour
      	mov    	led_buf+3,#00h
       	mov    	led_buf+2,#00h
     	mov    	led_buf+1,#0ffh
     	mov   	a,led_buf
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        
      	;rl     	a
	inc     a
       	mov   	led_buf,a
    	mov   	char_count,#015h
testfive:
	mov     a,led_buf
	mov     dptr,#LED_CODE1
	movc    a,@a+dptr          ;lqb 20050817
   	lcall  	left_shift
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    	djnz  	char_count,testfive
     	setb  	led_stb
    	clr    	led_stb
      	inc    	led_buf+4
      	mov    	a,led_buf+4
     	cjne  	a,#10h,testfour
    	mov    	shift_count,#00h
 	clr   	open_led_mark
	clr 	open_dot_mark
	setb   	open_led
	setb  	open_dot_array
       	ret
testfour:
    	jbc   	scan_dot,testsix
 	ljmp  	testfour
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;名称: speak_out
;功能:
;I /P:
;O /P:
;注备:
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
speak_out:
	clr	c
	mov 	a,micro_count    	;language output
	subb	a,#1ch
  	jc   	speak2
	clr	spkflag
	mov  	a,speak_count
	inc	speak_count             ;CHANGE STATION 5.9
	add  	a,#speak_buf
	mov 	r0,a
	mov   	a,@r0
	cpl 	a
	jz      speak3              	;judge  end
	mov     a,p2
	push    acc
	mov     a,@r0
	mov     b,#02h

⌨️ 快捷键说明

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