📄 tester.lst
字号:
A51 MACRO ASSEMBLER TESTER DATE 04/02/02 PAGE 1
MS-DOS MACRO ASSEMBLER A51 V4.4
OBJECT MODULE PLACED IN TESTER.OBJ
ASSEMBLER INVOKED BY: A51 TESTER.A51
LOC OBJ LINE SOURCE
1 ;Zdrojak pro testovani displeju Elatec
2 ;Napsano pro ATMEL 89C2051
3 ;pripojeny krystal 8MHz
4
00B5 5 RS equ p3.5 ;pin command / data select
00B4 6 RW EQU P3.4 ;data read/write
00B7 7 ENB equ p3.7 ;enable signal
8
0080 9 RAD1 EQU 80h ;1 radek displeje
00C0 10 RAD2 EQU 0C0h ;2 radek displeje
0090 11 RAD3 EQU 90h ;3 radek displeje
00D0 12 RAD4 EQU 0d0h ;4 radek displeje
13
0000 14 org 0
0000 02004C 15 jmp start
16
17
0003 18 lcdbusy: ;test LCD na pripravenost
0003 C0E0 19 push acc ;uschova akumulator
0005 D2B4 20 lcd_b: setb rw ;R/W - '1'
0007 C2B5 21 clr rs ;RS - '0'
0009 D2B7 22 setb enb ;E - '1' enable po dobu min 220ns
000B 8590E0 23 mov acc,p1 ;do akumulatoru data z displeje
000E C2B7 24 clr enb ;E - '0'
0010 20E7F2 25 jb acc.7,lcd_b ;test BF jestli 1 skok na nove testovani
0013 D0E0 26 pop acc ;obnov akumulator
0015 22 27 ret
28 ;----------------------------------------------------------------
0016 29 wait_power: ; ceka 15ms po zapnuti napajeni
0016 7828 30 mov r0,#28h ;40x255=10200 * 1.5us = 15.3ms
0018 7900 31 wait_next: mov r1,#0 ;r1=0
001A D9FE 32 djnz r1,$
001C D8FA 33 djnz r0,wait_next ;cyklus cekani 15ms
001E 22 34 ret
35 ;----------------------------------------------------------------
001F 36 wait_init: ; ceka 4.2ms po inicializaci
001F 780B 37 mov r0,#0bh ;11x255=2805 * 1.5us = 4.2ms
0021 7900 38 wait_next1: mov r1,#0 ;r1=0
0023 D9FE 39 djnz r1,$
0025 D8FA 40 djnz r0,wait_next1 ;cyklus cekani 4.2ms
0027 22 41 ret
42
43 ;----------------------------------------------------------------
0028 44 lcd_drive: ;posle ridici kod na displej
0028 1103 45 call lcdbusy ;test BF busy flag
002A C2B4 46 clr rw ;R/W - '0'
002C C2B5 47 clr rs ;RS - '0'
002E F590 48 mov p1,a ;ridici znak na port P1
0030 D2B7 49 setb enb ;E - '1' enable po dobu min 220ns
0032 C2B7 50 clr enb ;E - '0'
0034 22 51 ret
52 ;-----------------------------------------------------------------
0035 53 lcd_disp: ;zobrazi znak na displej
0035 1103 54 call lcdbusy ;test BF busy flag
A51 MACRO ASSEMBLER TESTER DATE 04/02/02 PAGE 2
LOC OBJ LINE SOURCE
0037 C2B4 55 clr rw ;R/W - '0'
0039 D2B5 56 setb rs ;RS - '1'
003B F590 57 mov p1,a ;zobrazovany znak na port P1
003D D2B7 58 setb enb ;E - '1' enable po dobu min 220ns
003F C2B7 59 clr enb ;E - '0'
0041 22 60 ret
61 ;----------------------------------------------------------------
0042 62 lcd_string:
0042 E4 63 clr a ;nuluje A
0043 93 64 movc a,@a+DPTR ;do A znak na adrese DPTR
0044 6005 65 jz exit ;ukonceni kdyz je v A 0h
0046 1135 66 acall lcd_disp ;zobraz znak v A
0048 A3 67 inc DPTR ;zvetsi ukazatel DPTR o 1
0049 80F7 68 sjmp lcd_string ;dalsi znak
004B 22 69 exit: ret
70
71 ;---------------------------------------------------------
004C 72 start: ;zacatek programu
004C 1116 73 call wait_power ;cekani 15ms po zapnuti napajeni
004E 7438 74 mov a,#38h ;8 bits, 2 rows, 5 x 7 dots
0050 1128 75 call lcd_drive ;posle ridici znak na displej
0052 111F 76 call wait_init ;ceka dalsich 4,2ms
77
0054 7408 78 mov a,#08h ; display off,cursor off,no blink
0056 1128 79 call lcd_drive
0058 7401 80 mov a,#01h ; clear display
005A 1128 81 call lcd_drive
005C 111F 82 call wait_init ;cekej na clear
83
005E 740C 84 mov a,#0Ch ; display on, cursor off
0060 1128 85 call lcd_drive
0062 7414 86 mov a,#14h ; auto-increment, shift cursor
0064 1128 87 call lcd_drive
88
0066 7480 89 mov a,#RAD1 ;pozice 0, 1 radek
0068 1128 90 acall lcd_drive
91
006A 90008C 92 mov DPTR,#Text1 ;do DPTR adresu 1 znaku sringu Text1
006D 1142 93 acall lcd_string ;zobrazi cely string na 1 radek
94
006F 74C0 95 mov a,#RAD2 ;pozice 0, 2 radek
0071 1128 96 acall lcd_drive
0073 90009C 97 mov dptr,#Text2 ;do DPTR adresu 1 znaku sringu Text2
0076 1142 98 acall lcd_string ;zobrazi cely string na 2 radek
99
0078 7490 100 mov a,#RAD3 ;pozice 0, 3 radek
007A 1128 101 acall lcd_drive
007C 9000AD 102 mov dptr,#Text3 ;do DPTR adresu 1 znaku sringu Text2
007F 1142 103 acall lcd_string ;zobrazi cely string na 3 radek
104
0081 74D0 105 mov a,#RAD4 ;pozice 0, 4 radek
0083 1128 106 acall lcd_drive
0085 9000BE 107 mov dptr,#Text4 ;do DPTR adresu 1 znaku sringu Text2
0088 1142 108 acall lcd_string ;zobrazi cely string na 4 radek
109
110
008A 80FE 111 jmp $
112
008C 54657374 113 Text1: db 'Tester Displeje',00h
A51 MACRO ASSEMBLER TESTER DATE 04/02/02 PAGE 3
LOC OBJ LINE SOURCE
0090 65722044
0094 6973706C
0098 656A6500
009C 5665727A 114 Text2: db 'Verze 1.0 ready.',00h
00A0 6520312E
00A4 30207265
00A8 6164792E
00AC 00
00AD 546F746F 115 Text3: db 'Toto je 3 radek.',00h
00B1 206A6520
00B5 33207261
00B9 64656B2E
00BD 00
00BE 546F746F 116 Text4: db 'Toto je 4 radek.',00h
00C2 206A6520
00C6 34207261
00CA 64656B2E
00CE 00
117
118 end
A51 MACRO ASSEMBLER TESTER DATE 04/02/02 PAGE 4
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . D ADDR 00E0H A
ENB. . . . B ADDR 00B0H.7 A
EXIT . . . C ADDR 004BH A
LCDBUSY. . C ADDR 0003H A
LCD_B. . . C ADDR 0005H A
LCD_DISP . C ADDR 0035H A
LCD_DRIVE. C ADDR 0028H A
LCD_STRING C ADDR 0042H A
P1 . . . . D ADDR 0090H A
P3 . . . . D ADDR 00B0H A
RAD1 . . . N NUMB 0080H A
RAD2 . . . N NUMB 00C0H A
RAD3 . . . N NUMB 0090H A
RAD4 . . . N NUMB 00D0H A
RS . . . . B ADDR 00B0H.5 A
RW . . . . B ADDR 00B0H.4 A
START. . . C ADDR 004CH A
TEXT1. . . C ADDR 008CH A
TEXT2. . . C ADDR 009CH A
TEXT3. . . C ADDR 00ADH A
TEXT4. . . C ADDR 00BEH A
WAIT_INIT. C ADDR 001FH A
WAIT_NEXT. C ADDR 0018H A
WAIT_NEXT1 C ADDR 0021H A
WAIT_POWER C ADDR 0016H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE, NO ERRORS FOUND
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -