-
Notifications
You must be signed in to change notification settings - Fork 0
/
Serie_Rec.a51
144 lines (116 loc) · 3.45 KB
/
Serie_Rec.a51
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
;Déclaration des variables
Mask4bit equ 00001111b
MaskAscii equ 30h
RegS bit P1.5
RW bit P1.6
E bit P1.7
LCD_DB data P2
W_L_L equ 11000000b
W_L_H equ 10000000b
;Table des vecteurs
org 0000h
SJMP debut
org 0030h
;Début du programme
debut:
MOV SP,2Fh ;On déplace le StackPointer
LCALL serial_init
LCALL LCD_Init
rpt:
LCALL serial_msg
MOV LCD_DB,#W_L_H ;On écrit sur la ligne haute
LCALL LCD_Code
MOV DPTR,#LCD_DB
LCALL LCD_msg
jsq: SJMP rpt
fin:
;------------------------------------------------------------
serial_init:
MOV SCON,#01010000b ;On initialise la liaison série, asynchrone 1200Bd sans parité
MOV PCON,#0h
MOV TMOD,#00100010b ;On initialise le timer 0 et le timer 1
fin_serial_init:
RET
;-----------------------------------------------------------
serial_msg:
MOV TH1,#0E6h
MOV TL1,#0E6h
SETB TR1 ;On démarre le timer
tq: JNB RI,tq ;On attend la reception du message
CLR RI
MOV LCD_DB,#SBUF ;On place SBUF dans P2
fin_serial_msg:
RET
;-----------------------------------------------------------------------------
LCD_msg:
message:
MOV A,#0h
MOVC A,@A+DPTR
JZ fin_LCD_msg
MOV LCD_DB,A
LCALL LCD_Data
INC DPTR
SJMP message
fin_LCD_msg:
RET
;----------------------------------------------------------------------------
LCD_Init:
MOV R0,#03h ;On veut faire 3 fois l'initialisation
CLR RegS ;On initialise une fois
CLR RW
MOV P2,#30h
tq_Init: LCALL Tempo_50ms ;On temporise pdt 50ms
SETB E
CLR E
ftq_Init:DJNZ R0,tq_Init ;Tant que R0!=0 on refait l'init
;On ecrit les quatres instructions nécessaires à l'initialisation.
MOV LCD_DB,#38h
LCALL LCD_Code
MOV LCD_DB,#0Ch
LCALL LCD_Code
MOV LCD_DB,#01h
LCALL LCD_Code
MOV LCD_DB,#06h
LCALL LCD_Code
fin_LCD_Init:
RET
;-----------------------------------------------------------------------------
LCD_BF:
MOV P2,#0FFh ;On initialise le port 2 pour la lecture
CLR RegS ;On place RS et R/W en mode lecture d'instruction
SETB RW
tq_BF: CLR E ;On clear et puis on active E
SETB E ;On lit, on clear
fin_BF: JB P2.7,tq_BF ;Tant que BF est à l'état haut
CLR E
RET
;-----------------------------------------------------------------------------
LCD_Code:
CLR RegS ;On place RS et R/W en mode envoie d'instruction
CLR RW
SETB E
CLR E
LCALL LCD_BF ;On check si l'écran est busy
fin_Code:
RET
;----------------------------------------------------------------------------
LCD_Data:
SETB RegS ;On se met en mode envoie de donnée
CLR RW
SETB E
CLR E
LCALL LCD_BF ;On attend que le busy flag soit à l'état bas
fin_Data:
RET
;---------------------------------------------------------------------------
Tempo_50ms:
deb_timer:
MOV TH0,#3ch
MOV TL0,#0b0h ;On veut compter 50 000 µs donc ffffh-c34fh=3cb0h
SETB TR0 ;On démarre le timer
CLR TF0
tq_timer: JNB TF0,tq
CLR TR0
fin_Tempo:
RET
end