📄 new9d4c.asm
字号:
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; 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 + -