AS V1.41r8 - source file lcd.asm - page 1 - 6/30/2004 11:24:37 1/ 0 : ;$Id: lcd.asm,v 1.6 2004/06/27 07:41:43 runner Exp $ 2/ 0 : 3/ 0 : ; P20-P23 uPD7228 D0-D3 4/ 0 : ; P24 ~CS 5/ 0 : ; P26 C/~D 6/ 0 : ; P27 RESET 7/ 0 : ; ALE CLOCK 8/ 0 : ; PROG ~STB 9/ 0 : ; T1 ~BUSY 10/ 0 : ; 11/ 0 : ; osc 6MHz 12/ 0 : ; clock 2Mhz 13/ 0 : ; ALE 400KHz 2.5us 14/ 0 : 15/ 0 : cpu 8048 16/ 0 : page 0 17/ 0 : 18/ 0 : =80H LCD_RST equ (1<<7) ;P27 H=RESET 19/ 0 : =40H LCD_CD equ (1<<6) ;P26 H=Control/L=Data 20/ 0 : =10H LCD_CS equ (1<<4) ;P24 L=ChipSelected 21/ 0 : 22/ 0 : org 0 23/ 0 : 24/ 0 : ; LCD Hard Reset 25/ 0 : 23 FF mov a,#0ffh 26/ 2 : 3A outl P2,a ;RESET=H, D1=H --> uPD7228 Parallel Mode 27/ 3 : 00 nop 28/ 4 : 00 nop 29/ 5 : 00 nop 30/ 6 : 00 nop 31/ 7 : 9A 7F anl P2,#(0ffh ! LCD_RST) ;uPD7228 RESET=OFF and keep 4us 32/ 9 : 00 nop 33/ A : 00 nop 34/ B : 35/ B : lcdinit 36/ B : 23 14 mov a,#14h ;Set Frame Frequency = Fcl/2^10 37/ D : 14 9B call l_cmd 38/ F : 14 77 call r_cmd 39/ 11 : 23 09 mov a,#09h ;LCD ON 40/ 13 : 14 9B call l_cmd 41/ 15 : 14 77 call r_cmd 42/ 17 : 23 1E mov a,#1eh ;16 Sync=Out bank=0,1 43/ 19 : 14 9B call l_cmd 44/ 1B : 23 1D mov a,#1dh ;16 Sync=In bank=0,1 45/ 1D : 14 77 call r_cmd 46/ 1F : 47/ 1F : ;L-channel clear 48/ 1F : 23 64 mov a,#64h ;set write auto inc 49/ 21 : 14 9B call l_cmd 50/ 23 : 23 80 mov a,#80h ;bank#0 top 51/ 25 : 14 9B call l_cmd 52/ 27 : BA 32 mov R2,#50 53/ 29 : 27 clr a 54/ 2A : 14 AD call l_out 55/ 2C : EA 2A djnz R2,$-2 56/ 2E : 23 C0 mov a,#80h+40h ;bank#1 top 57/ 30 : 14 9B call l_cmd 58/ 32 : BA 32 mov R2,#50 59/ 34 : 27 clr a 60/ 35 : 14 AD call l_out 61/ 37 : EA 35 djnz R2,$-2 62/ 39 : 63/ 39 : ;L-channel '0'-'9' 64/ 39 : 23 F1 mov a,#80h+40h+31h ;Colum pointer=31H(bank1,last) 65/ 3B : 14 9B call l_cmd 66/ 3D : 23 71 mov a,#71h ;left charactor mode 67/ 3F : 14 9B call l_cmd 68/ 41 : BA 0A mov R2,#10 69/ 43 : 23 30 mov A,#'0' 70/ 45 : 14 AD lcd01 call l_out 71/ 47 : 17 inc a 72/ 48 : EA 45 djnz R2,lcd01 73/ 4A : 74/ 4A : ;R-channel clear 75/ 4A : 23 64 mov a,#64h ;set write auto inc 76/ 4C : 14 77 call r_cmd 77/ 4E : 23 80 mov a,#80h ;bank#0 top 78/ 50 : 14 77 call r_cmd 79/ 52 : BA 32 mov R2,#50 80/ 54 : 27 clr a 81/ 55 : 14 89 call r_out 82/ 57 : EA 55 djnz R2,$-2 83/ 59 : 23 C0 mov a,#80h+40h ;bank#1 top 84/ 5B : 14 77 call r_cmd 85/ 5D : BA 32 mov R2,#50 86/ 5F : 27 clr a 87/ 60 : 14 89 call r_out 88/ 62 : EA 60 djnz R2,$-2 89/ 64 : 90/ 64 : ;R-channel '@'-'I' 91/ 64 : 23 F1 mov a,#80h+40h+31h ;Colum pointer=31H(bank1,last) 92/ 66 : 14 77 call r_cmd 93/ 68 : 23 71 mov a,#71h ;left charactor mode 94/ 6A : 14 77 call r_cmd 95/ 6C : BA 0A mov R2,#10 96/ 6E : 23 40 mov A,#'@' 97/ 70 : 14 89 lcd11 call r_out 98/ 72 : 17 inc a 99/ 73 : EA 70 djnz R2,lcd11 100/ 75 : 101/ 75 : 04 75 hlt jmp $ 102/ 77 : 103/ 77 : r_cmd ; output command to LCD 104/ 77 : ; IN Acc 105/ 77 : 9A EF anl P2,#(0ffh ! LCD_CS) ;CS=L and wait 2us 106/ 79 : 00 nop 107/ 7A : 46 7A jnt1 $ ;repeat BUSY 108/ 7C : 8A 40 orl P2,#(LCD_CD) ;C/~D=H 109/ 7E : ;upper 4bit out and lower 4bit out 110/ 7E : 47 swap a 111/ 7F : 3C movd P4,a 112/ 80 : 47 swap a 113/ 81 : 3C movd P4,a 114/ 82 : ;3us wait 115/ 82 : 00 nop 116/ 83 : 00 nop 117/ 84 : 46 84 jnt1 $ ;repeat BUSY 118/ 86 : 8A 10 orl P2,#(LCD_CS) ;CS=H 119/ 88 : 83 ret 120/ 89 : 121/ 89 : r_out ; output data to LCD 122/ 89 : ; in acc 123/ 89 : 9A EF anl P2,#(0ffh ! LCD_CS) ;CS=L and wait 2us 124/ 8B : 00 nop 125/ 8C : 46 8C jnt1 $ ;repeat BUSY 126/ 8E : 9A BF anl P2,#(0ffh ! LCD_CD) ;C/~D=L 127/ 90 : ;upper 4bit out and lower 4bit out 128/ 90 : 47 swap a 129/ 91 : 3C movd P4,a 130/ 92 : 47 swap a 131/ 93 : 3C movd P4,a 132/ 94 : ;3us wait 133/ 94 : 00 nop 134/ 95 : 00 nop 135/ 96 : 46 96 jnt1 $ ;repeat BUSY 136/ 98 : 8A 10 orl P2,#(LCD_CS) ;CS=H 137/ 9A : 83 ret 138/ 9B : 139/ 9B : l_cmd ; output command to LCD 140/ 9B : ; IN Acc 141/ 9B : 9A EF anl P2,#(0ffh ! LCD_CS) ;CS=L and wait 2us 142/ 9D : 00 nop 143/ 9E : 46 9E jnt1 $ ;repeat BUSY 144/ A0 : 8A 40 orl P2,#(LCD_CD) ;C/~D=H 145/ A2 : ;upper 4bit out and lower 4bit out 146/ A2 : 47 swap a 147/ A3 : 3F movd P7,a 148/ A4 : 47 swap a 149/ A5 : 3F movd P7,a 150/ A6 : ;3us wait 151/ A6 : 00 nop 152/ A7 : 00 nop 153/ A8 : 46 A8 jnt1 $ ;repeat BUSY 154/ AA : 8A 10 orl P2,#(LCD_CS) ;CS=H 155/ AC : 83 ret 156/ AD : 157/ AD : l_out ; output data to LCD 158/ AD : ; in acc 159/ AD : 9A EF anl P2,#(0ffh ! LCD_CS) ;CS=L and wait 2us 160/ AF : 00 nop 161/ B0 : 00 nop 162/ B1 : 46 B1 jnt1 $ ;repeat BUSY 163/ B3 : 9A BF anl P2,#(0ffh ! LCD_CD) ;C/~D=L 164/ B5 : ;upper 4bit out and lower 4bit out 165/ B5 : 47 swap a 166/ B6 : 3F movd P7,a 167/ B7 : 47 swap a 168/ B8 : 3F movd P7,a 169/ B9 : ;3us wait 170/ B9 : 00 nop 171/ BA : 00 nop 172/ BB : 00 nop 173/ BC : 46 BC jnt1 $ ;repeat BUSY 174/ BE : 8A 10 orl P2,#(LCD_CS) ;CS=H 175/ C0 : 83 ret 176/ C1 : 177/ C1 : end AS V1.41r8 - source file lcd.asm - page 2 - 6/30/2004 11:24:37 symbol table (* = unused): ------------------------ *ARCHITECTURE : i386-unknown-freebsd - | *BIGENDIAN : 0 - | *BRANCHEXT : 0 - | *CASESENSITIVE : 0 - | *CONSTPI : 3.141592653589793 - | *DATE : 6/30/2004 - | *FALSE : 0 - | *FULLPMMU : 1 - | *HAS64 : 1 - | *HASFPU : 0 - | *HASPMMU : 0 - | *HLT : 75 C | *INEXTMODE : 0 - | *INLWORDMODE : 0 - | *INMAXMODE : 0 - | *INSRCMODE : 0 - | *INSUPMODE : 0 - | LCD01 : 45 C | LCD11 : 70 C | *LCDINIT : B C | LCD_CD : 40 - | LCD_CS : 10 - | LCD_RST : 80 - | *LISTON : 1 - | L_CMD : 9B C | L_OUT : AD C | *MACEXP : 1 - | *MOMCPU : 8048 - | *MOMCPUNAME : 8048 - | *PADDING : 1 - | *RELAXED : 0 - | R_CMD : 77 C | R_OUT : 89 C | *TIME : 11:24:37 - | *TRUE : 1 - | *VERSION : 1418 - | 36 symbols 27 unused symbols AS V1.41r8 - source file lcd.asm - page 3 - 6/30/2004 11:24:37 codepages: ---------- STANDARD (0 changed characters) 0.07 seconds assembly time 179 lines source file 2 passes 0 errors 0 warnings