📄 yibupstc9.asm
字号:
nbsjclx: nop ;(下排) 从内部字库调数据
clr 78h ;RS485 0--JIESHOU
SETB 79h ;ROM-CE'
clr 7ah ;RAM-CE2'
clr 7bh ;RAM-CE1'
CLR 7ch ;A19
CLR 7dh ;A18
CLR 7eh ;A17
CLR 7fh ;A16
;mov 2fh,#0fh ;位选控制字
mov a, 2fh
lcall send_kz ;位选RAM
;***************************************
;第1行
mov r1, #00h ;第1行
lcall hzzb_x ;数据从内部字库移入内存
lcall xszb_x ;显示缓冲数据准备
;第2行
mov r1, #01h ;第2行
lcall hzzb_x ;数据从内部字库移入内存
lcall xszb_x ;显示缓冲数据准备
;第3行
mov r1, #02h ;第3行
lcall hzzb_x ;数据从内部字库移入内存
lcall xszb_x ;显示缓冲数据准备
;第4行
mov r1, #03h ;第4行
lcall hzzb_x ;数据从内部字库移入内存
lcall xszb_x ;显示缓冲数据准备
;第5行
mov r1, #04h ;第1行
lcall hzzb_x ;数据从内部字库移入内存
lcall xszb_x ;显示缓冲数据准备
;第6行
mov r1, #05h ;第2行
lcall hzzb_x ;数据从内部字库移入内存
lcall xszb_x ;显示缓冲数据准备
;第7行
mov r1, #06h ;第3行
lcall hzzb_x ;数据从内部字库移入内存
lcall xszb_x ;显示缓冲数据准备
;第8行
mov r1, #07h ;第4行
lcall hzzb_x ;数据从内部字库移入内存
lcall xszb_x ;显示缓冲数据准备
;第9行
mov r1, #08h ;第1行
lcall hzzb_x ;数据从内部字库移入内存
lcall xszb_x ;显示缓冲数据准备
;第10行
mov r1, #09h ;第2行
lcall hzzb_x ;数据从内部字库移入内存
lcall xszb_x ;显示缓冲数据准备
;第11行
mov r1, #0ah ;第3行
lcall hzzb_x ;数据从内部字库移入内存
lcall xszb_x ;显示缓冲数据准备
;第12行
mov r1, #0bh ;第4行
lcall hzzb_x ;数据从内部字库移入内存
lcall xszb_x ;显示缓冲数据准备
;第13行
mov r1, #0ch ;第1行
lcall hzzb_x ;数据从内部字库移入内存
lcall xszb_x ;显示缓冲数据准备
;第14行
mov r1, #0dh ;第2行
lcall hzzb_x ;数据从内部字库移入内存
lcall xszb_x ;显示缓冲数据准备
;第15行
mov r1, #0eh ;第3行
lcall hzzb_x ;数据从内部字库移入内存
lcall xszb_x ;显示缓冲数据准备
;第16行
mov r1, #0fh ;第4行
lcall hzzb_x ;数据从内部字库移入内存
lcall xszb_x ;显示缓冲数据准备
;
ret
;****************************************************************************
;数据从内到外,按照8字标准,为显示程序直接读取数据(下排)
xszb_x: nop
mov r0, #30h ;数据读取指针
mov a, r1 ; 行数
clr cy
rlc a
rlc a
rlc a
rlc a
mov dpl, a ;数据存储指针
mov dph, #31h ;数据存储指针 /显示缓冲3000-30ffh
;
xzloopx: mov a, @r0
movx @dptr, a
inc r0
inc dptr
cjne r0, #40h, xzloopx
;
mov r0, #30h
mov a, r1 ; 行数
clr cy
rlc a
rlc a
rlc a
rlc a
mov dpl, a ;数据存储指针
mov dph, #31h ;数据存储指针 /显示缓冲3000-30ffh
dcloopx: movx a, @dptr
mov @r0, a
inc r0
inc dptr
cjne r0, #40h, dcloopx
;校验!!
mov r0, #30h
nop
nop
;
ret
;******
;数据从外存移入内存,按照8个字标准,30-3fh为临时数据存储
hzzb_x: nop
clr cy
mov a, r1
rlc a
mov b, a ;指针处理
;********
mov dptr, #2100h ;第1个字
mov a, dpl
add a, b
mov dpl, a
movx a, @dptr
lcall fazhang
mov 30h, a
inc dptr
mov a, b
add a, dpl
movx a, @dptr
lcall fazhang
mov 31h, a
;
mov dptr, #2120h ;第2个字
mov a, b
mov a, dpl
add a, b
mov dpl, a
movx a, @dptr
lcall fazhang
mov 32h, a
inc dptr
mov a, b
add a, dpl
movx a, @dptr
lcall fazhang
mov 33h, a
;
mov dptr, #2140h ;第3个字
mov a, b
mov a, dpl
add a, b
mov dpl, a
movx a, @dptr
lcall fazhang
mov 34h, a
inc dptr
mov a, b
add a, dpl
movx a, @dptr
lcall fazhang
mov 35h, a
;
mov dptr, #2160h ;第4个字
mov a, b
mov a, dpl
add a, b
mov dpl, a
movx a, @dptr
lcall fazhang
mov 36h, a
inc dptr
mov a, b
add a, dpl
movx a, @dptr
lcall fazhang
mov 37h, a
;
mov dptr, #2180h ;第5个字
mov a, b
mov a, dpl
add a, b
mov dpl, a
movx a, @dptr
lcall fazhang
mov 38h, a
inc dptr
mov a, b
add a, dpl
movx a, @dptr
lcall fazhang
mov 39h, a
;
mov dptr, #21a0h ;第6个字
mov a, b
mov a, dpl
add a, b
mov dpl, a
movx a, @dptr
lcall fazhang
mov 3ah, a
inc dptr
mov a, b
add a, dpl
movx a, @dptr
lcall fazhang
mov 3bh, a
;
mov dptr, #21c0h ;第7个字
mov a, b
mov a, dpl
add a, b
mov dpl, a
movx a, @dptr
lcall fazhang
mov 3ch, a
inc dptr
mov a, b
add a, dpl
movx a, @dptr
lcall fazhang
mov 3dh, a
;
mov dptr, #21e0h ;第8个字
mov a, b
mov a, dpl
add a, b
mov dpl, a
movx a, @dptr
lcall fazhang
mov 3eh, a
inc dptr
mov a, b
add a, dpl
movx a, @dptr
lcall fazhang
mov 3fh, a
ret
;
;************** 串口初始化 *****************
;设置串行口工作方式1,定时器1作为波特率发生器
;波特率设置为 2400 ;
comm: mov tmod, #20h ;设置定时器T1工作方式2
mov tl1, #0f5h ;#0fdh f5 ;定时器计数初值,波特率 9600
mov th1, #0f5h ;#0fdh ;定时器重装值
setb ea ;允许总的中断
setb es ;允许串行中断
mov pcon, #00h ;波特率不倍增
mov scon, #50h ;设置串口工作方式1,REN = 1 允许接收
setb tr1 ;定时器开始工作
ret ;返回
;*************** 串口中断服务程序 ***********
; 如果接收 0FF 表示上位机需要联机信号,单片机发送 0FFH作为
; 应答信号,如果接收到 数字 1~ n,表示相应的功能;
; 这里,如果收到 1 ,则单片机向计算机发送字符 'H';
; 如果收到 2 ,则单片机向计算机发送字符 'e';
; 如果收到其他的数据,则发送 'J';
com_int: PUSH ACC
PUSH PSW
clr es ;禁止串行中断
clr ri ;清除接收标志位
;***
clr 01h ;清清屏标志
mov 40h, #00h
mov 41h, #00h
;***
mov a, sbuf ;从缓冲区取出数据
mov 2bh, a ;临时存储
mov r0, 2ah ;调指针 0cdh
mov a, 2bh
mov @r0, a
inc 2ah ;存指针
mov a, 2ah
cjne a, #0f3h, zc1 ;判断数据超长?
;没有超长直接退出!
mov 2ah, #0cdh ;数据超长,清指针
;************
mov r0, #0f2h
mov a, @r0
cjne a, #55h, zc1 ;判断结束位是否正确
mov r0, #0cdh
mov a, @r0
cjne a, #0cch, zc1
setb 00h ;设置数据接收结束标志
clr led4
zc1: nop
setb es ;允许串行中断
POP PSW
POP ACC
reti
;****************串口数据处理************
;串口接收数据缓冲在40h---4fh
com_cl: nop
jnb 00h, exitcl
;
clr es ;关闭串口
mov r0, #0cdh
mov a, @r0
cjne a, #0cch, exitcly ;启示字
inc r0
mov a, @r0
cjne a, #24h, exitcly ;字节数
inc r0
mov a, @r0
cjne a, #01h, exitcly ;显示屏地址
;以下是汉字
mov r0, #0f0h
mov a, @r0
cjne a, #2ah, exitcly ;备用字/暂时不用
mov r0, #0f2h
mov a, @r0
cjne a, #55h, exitcly ;结束字
;若数据包对则继续
;判断地址程序,暂时不要
;数据和校验
mov r0, #0ceh
mov a, @r0 ;字节数
jxjia: inc r0
add a, @r0
cjne r0, #0f0h, jxjia
mov r0, #0f1h
xrl a, @r0
jnz exitcly
;
cpl led2 ;喂狗
clr 00h ;清除接收到标志
;数据包正确保存数据,到存储器
lcall zhuanyi ;根据串口读到的内码,从汉字库中读出字模数据,
;并依次存储在ram中 .
lcall nbsjcl ;上屏内部数据处理,把字库转换成直接显示的数据,
;加快扫描的速度。
lcall nbsjclx ;下屏内部数据处理,把字库转换成直接显示的数据,
;加快扫描的速度。
setb led4
lcall com_send ;串口数据发送
;
exitcly:nop
setb es ;打开串口中断
clr 00h ;清除接收到标志
exitcl: nop
ret ;中断返回
;****************串口数据发送************
;****************************************6.405*0.305*0.03*0.1/58249048
com_send: nop
nop ;发送准备
setb 78h ;RS485 0--JIESHOU
SETB 79h ;ROM-CE'
clr 7ah ;RAM-CE2'
clr 7bh ;RAM-CE1'
CLR 7ch ;A19
CLR 7dh ;A18
CLR 7eh ;A17
CLR 7fh ;A16
;mov 2fh,#0fh ;位选控制字
mov a, 2fh
lcall send_kz ;位选RAM
lcall DELEY20MS
;***************************************
;***********计算和
mov a, #06h
add a, #01h
add a, #4fh
add a, #4bh
add a, #5ah
mov 5fh, a
;***********
clr es
//setb p3.4 ;rs485 fa song
nop
mov sbuf, #0cch ;0---起始字
jnb ti, $ ;等待发送完毕
clr ti ;清除发送标志
;字节数
mov sbuf, #06h ;1---除起始字结束字以外字节数
jnb ti, $ ;等待发送完毕
clr ti
;地址
mov sbuf, #01h ;2---显示屏地址
jnb ti, $ ;等待发送完毕
clr ti
;OK
mov sbuf, #4Fh ;3---O
jnb ti, $ ;等待发送完毕
clr ti ;清除发送标志
mov sbuf, #4Bh ;4 K
jnb ti, $ ;等待发送完毕
clr ti ;清除发送标志
;备用
mov sbuf, #5ah ;5---备用字
jnb ti, $ ;等待发送完毕
clr ti ;清除发送标志
;校验和
mov sbuf, 5fh ;6
jnb ti, $ ;等待发送完毕
clr ti ;清除发送标志
;结束符
mov sbuf, #55h ;f
jnb ti, $ ;等待发送完毕
clr ti ;清除发送标志
setb es ;打开串口中断
//clr p3.4 //CLR 485接收状态
nop ;发送准备
clr 78h ;RS485 0--JIESHOU
SETB 79h ;ROM-CE'
clr 7ah ;RAM-CE2'
clr 7bh ;RAM-CE1'
CLR 7ch ;A19
CLR 7dh ;A18
CLR 7eh ;A17
CLR 7fh ;A16
;mov 2fh,#0fh ;位选控制字
mov a, 2fh
lcall send_kz ;位选RAM
ret
;*************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -