?? 12.asm
字號:
; *************************
; * 可在系統修改程序 *
; * 電子屏字符顯示器 *
; * "電子設計" *
; * 2001.10.23 LRM *
; *************************
; 四個顯示字符數據表以在50H-6FH單元內,字符用8*8點陣,R4(30H)用于
; 控制顯示靜止字的時間,R5(31H)靜止字顯示跳轉地址步距,B內放顯示首址
;
T2CON EQU 0C8H ; T2 控制寄存器
T2MOD EQU 0C9H ;
TL2 EQU 0CCH ; T2 計數寄存器低字節
TH2 EQU 0CDH ; T2 計數寄存器高字節
TR2 EQU 0CAH ; T2 啟動位
RCAP2L EQU 0CAH ; T2 計數重栽寄存器低字節
RCAP2H EQU 0CBH ; T2 計數重栽寄存器高字節
CHPCON EQU 0BFH ; 在系統編程控制寄存器
CHPENR EQU 0F6H ; 編程狀態下 MTP ROM 的控制字節寄存器
SFRAL EQU 0C4H ; 編程狀態下的目標低地址
SFRAH EQU 0C5H ; 編程狀態下的目標高地址
SFRFD EQU 0C6H ; 編程狀態下 MTP ROM 的編程數據
SFRCN EQU 0C7H ;
TXOKFLAG EQU 003H
;
;
ORG 0000H
LJMP START
;
;************;
;中斷入口程序;
;************;
;
ORG 0003H
RETI
ORG 000BH
RETI
ORG 0013H
RETI
ORG 001BH
RETI
ORG 0023H
LJMP INTS
ORG 002BH
RETI
;
;初始化
CLEARMEN: MOV PSW, #00H ; 設第一組寄存器
MOV SCON, #01010000B ; 串口工作方式1(8 BIT UART) 允許接收
MOV T2CON, #00110000B ; T2CON
MOV A,#0ECH
MOV TL2, A ;設置波特率 ( 19200)
MOV RCAP2L, A ;
MOV A,#0FFH
MOV TH2, A ;
MOV RCAP2H, A ;
SETB ES ; 允許串口中斷
MOV IP, #00H ; 低優先級
SETB TR2 ; 啟動定時計數器 2
SETB REN ; 啟動串口接收中斷
CLR TI ; 清串口發送中斷標志位
CLR RI ; 清串口接收中斷標志位
SETB EA ; 開放所有中斷
RET
CLEARMEN1: MOV A,#0FFH
MOV P1,A
MOV P2,A
MOV P3,A
MOV P0,A
MOV DPTR,#TAB2
CLR A
MOV 20H,A
MOV 21H,A
MOV 22H,A
MOV 23H,A
MOV R3,A
MOV R1,#50H
MOV R2,#20H
CLLOOP: MOVC A,@A+DPTR
MOV @R1,A
MOV A,R3
INC A
MOV R3,A
INC R1
DJNZ R2,CLLOOP
MOV 30H,#0A0H
MOV 31H,#08H
RET
;
START: MOV SP, #0F1H ; 設置堆棧指針
LCALL CLEARMEN ;初始化
LCALL CLEARMEN1
START1: LCALL DISP1
AJMP START1
PUTPASS: MOV DPTR,#PASSTBL ;
LCALL DISPINFO ;顯示"Pass Error"
AJMP LOOP3 ;
APROM: LJMP APROMOUT ;
;
;
DISP1: MOV B,#50H
MOV R4,30H
MOV R5,31H
LOOP: JBC 04H,APROM ;進入4K-LDROM模式處理程序
JBC 05H,PUTPASS ;口令提示處理程序
LOOP3: LCALL DISPLAY
DJNZ R4,LOOP
MOV R4,30H
MOV A,B
CJNE A,#68H,CONT
RET
CONT: ADD A,R5
MOV B,A
AJMP LOOP
;
;
DISPLAY: MOV A,#0FFH
MOV P0,A
MOV P2,A
MOV R6,#0FEH
MOV R0,B
MOV R7,#08H
DISLOOP: MOV A,@R0
MOV P0,A
MOV P2,R6
LCALL DL1MS
INC R0
MOV A,R6
RL A
MOV R6,A
DJNZ R7,DISLOOP
RET
;
;
DL1MS: MOV R3,#0FFH ;256*4
LOOPK: NOP
NOP
DJNZ R3,LOOPK
RET
;
;
TAB1: DB 0EFH,83H,0ABH,83H,0ABH,83H,0EEH,0E0H ; 電
DB 0FFH,0C7H,0EFH,83H,0EFH,0EFH,0CFH,0EFH ; 子
DB 0B1H,0B5H,04H,0BFH,0B1H,0B5H,9BH,0A4H ; 設
DB 0BBH,0BBH,1BH,0A0H,0BBH,0BBH,9BH,0BBH ; 計
DB 00H,00H,00H,00H
;
TAB2: DB 0F7H,0EFH,0C1H,0D5H,000H,0D5H,0D9H,0BDH ;舟
DB 0FFH,0F7H,0F7H,0F7H,0D5H,0D5H,0C1H,0FFH ;山
DB 0F7H,0EFH,0C1H,0D5H,000H,0D5H,0D9H,0BDH ;舟
DB 0FFH,0F7H,0F7H,0F7H,0D5H,0D5H,0C1H,0FFH ;山
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 進入4K-LDROM的程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTS: PUSH PSW ;堆棧保護
PUSH ACC ;
PUSH B ;
MOV PSW,#08H ;啟用第1組寄存器
JBC RI,RXINTS ;RI為1,接收中斷,RI清0
JNB TI,INTSOUT ;TI為0,中斷退出
CLR TI ;TI為1,先清0
SETB TXOKFLAG ;設發送OK標志
LJMP INTSOUT ;中斷退出
;
RXINTS: MOV A,SBUF ;接收中斷處理。
XRL A,#0DH ;是否回車符
JNZ PASSFLAG ;不是回車,口令出錯處理
SETB 04H ;進入4K-LDROM標志置1
INTSOUT: POP B ;出棧
POP ACC ;
POP PSW ;
RETI ;中斷退出
PASSFLAG: SETB 05H ;口令出錯標志置1
LJMP INTSOUT ;中斷退出
;
;口令出錯提示表
PASSTBL: DB " pass ERROR ! ",0DH,0AH,0FFH,0FFH,0FFH,0FFH,0FFH
RET
; DPTR 內容是表的首址
; 顯示表格內容
DISPINFO: CLR A ;
MOV R2, A ;
READDISPCODE: MOV A, R2 ;
MOVC A, @A+DPTR ; 查表
MOV R1, A ;
INC R2 ; 計數器加一
MOV A, R2 ;
JNZ READOVER ; 計數器溢出處理
INC DPH ;
READOVER: MOV A, R1 ;
INC A ;
JZ DISPINFOOUT ; 讀到結束符結束
CLR TXOKFLAG ;
DEC A ;
LCALL PUTCHAR ; 發送字符
LJMP READDISPCODE ;
DISPINFOOUT: RET
; A 內容待發字符
PUTCHAR: CLR TXOKFLAG ;
MOV SBUF, A ;
JNB TXOKFLAG, $ ;
RET
APROMOUT: MOV CHPENR,#87H ;進入LDROM方式
MOV CHPENR,#59H
MOV CHPCON,#03H
MOV TCON,#00H ;關T0、T1
MOV T2CON,#00H ;關T2
MOV IP,#00H ;同優先級
MOV IE,#82H ;允許T0中斷,總中斷開放
MOV TL0,#0FBH ;裝初值,定時為5微秒
MOV TH0,#0FFH
MOV TMOD,#01H ;T0為16位定時器
MOV TCON,#10H ;開啟T0
MOV PCON,#01H ;進入在線編程模式,等待喚醒后進入4K-LDROM程序
END ;程序結束
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -