1 | ;Display Treiber für Hitachi Module
|
2 |
|
3 | ;Datenbus ist an Port 1 angeschlossen, Steuersignale: RW=P3.5/RS=P3.6/EN=P3.7
|
4 |
|
5 |
|
6 | org 0000h ;jmp above interrupts
|
7 | ljmp Start ;
|
8 |
|
9 | org 0100h ;
|
10 | start: call delay_1 ;wait 15 mSec.
|
11 |
|
12 | ;Display_Init
|
13 |
|
14 | mov R1,#04h ;4x38h
|
15 | Instruction_Data: mov a,#38h ;Set Data Bus to 8 Bit
|
16 | call Enable ;entry mode inc. + shift
|
17 | call wait ;wait 4.1 mSec.
|
18 | djnz R1,Instruction_Data ;loop
|
19 | mov a,#0Ch ;cursor off/on = 0Ch/0Eh
|
20 | call enable ;
|
21 | call clear_display ;
|
22 | call cursor_home ;
|
23 |
|
24 | ;main programm
|
25 |
|
26 | prog_main: mov r3,#0FFh ;dptr Textausgabe Reset
|
27 | mov dptr,#Melde_text ;Titelzeile
|
28 | call Textausgabe ;
|
29 | mov r4,#80h ;wait für Titelzeile
|
30 | wait_2: call delay_1 ;
|
31 | djnz r4,wait_2 ;
|
32 | mov r3,#0FFh ;dptr Textausgabe Reset
|
33 |
|
34 | mov dptr,#Display_info ;
|
35 | call Textausgabe ;
|
36 | mov r4,#80h ;
|
37 | wait_display: call delay_1 ;
|
38 | djnz r4,wait_display ;
|
39 | mov r3,#0FFh ;
|
40 | ljmp prog_main ;
|
41 |
|
42 | ;text aus tabelle lesen und auf display schreiben
|
43 |
|
44 | textausgabe: clr ea ;no interr. while writing
|
45 | mov a,#80h ;cursor home position
|
46 | call enable ;
|
47 | loop_text: inc r3 ;
|
48 | mov a,r3 ;
|
49 | movc a,@a+dptr ;Tabelle in Akku laden
|
50 | cjne a,#24h,Ausgabe_Text ;a<>24h => Ausgabe Text
|
51 | ret ;a=24h => Textausgabe Ende
|
52 | Ausgabe_Text: call enable_data ;Text auf Display ausgeben
|
53 | sjmp loop_text ;loop Textausgabe
|
54 |
|
55 | ;Enable Routine für Display Steuerbefehle
|
56 |
|
57 | Enable: clr p3.5 ;rw = 0
|
58 | clr p3.6 ;rs = 0
|
59 | clr p3.7 ;en = 0
|
60 | setb p3.7 ;enable = 1
|
61 | mov p1,a ;write instruction
|
62 | clr p3.7 ;enable = 0
|
63 | call delay ;exec. time for displ.42uS
|
64 | setb p3.6 ;rs = 1
|
65 | ret ;
|
66 |
|
67 | ;Enable Routine für Display Daten Senden
|
68 |
|
69 | Enable_Data: setb p3.7 ;en = 1
|
70 | setb p3.6 ;rs = 1
|
71 | mov p1,a ;write data
|
72 | clr p3.7 ;enable = 0
|
73 | call delay ;exec. time for displ.42uS
|
74 | ret ;
|
75 |
|
76 | ;warteschleifen für steuerbefehle
|
77 |
|
78 | Wait: mov r2,#05h ;Basis Clock 8051 6 MHz
|
79 | loop_1: mov r0,#0CDh ;Timing Init 3 cycles
|
80 | djnz r0,$ ;Interval 4.1 mS
|
81 | djnz r2,loop_1 ;
|
82 | ret ;
|
83 |
|
84 | Delay: mov r0,#0Ch ;delay next.. instruction
|
85 | djnz r0,$ ;42uSec.
|
86 | ret ;
|
87 |
|
88 | delay_1: mov r2,#0Fh ;Delay 15 mSec.
|
89 | loop_2: mov r0,#0FFh ;after Power on
|
90 | djnz r0,$ ;
|
91 | djnz r2,loop_2 ;
|
92 | ret
|
93 |
|
94 | ;display steuerbefehle
|
95 |
|
96 | cursor_home: mov a,#02h ;cursor home
|
97 | call Enable ;
|
98 | call wait ;
|
99 | ret ;
|
100 |
|
101 | clear_display: mov a,#01h ;clear display
|
102 | call Enable ;
|
103 | call wait ;
|
104 | ret ;
|
105 |
|
106 | Melde_text: DB 'Soft. & Hardware'
|
107 | DB ' '
|
108 | DB '* --------- *'
|
109 | DB ' ',24h
|
110 |
|
111 | Display_info: DB '* --------- *'
|
112 | DB ' '
|
113 | DB 'x51 based Micros'
|
114 | DB ' ',24h
|
115 |
|
116 | End
|