?? 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 + -