hola amigos, he conseguido este programa de un libro de basic, pero no comprendo unas pocas cosas de el y me gustaria saber si podriais ayudarme a comprenderlas. el programa funciona bien pero como dije no entiende esas cositas.lo pongo y os comento mis dudas
1 DEFINE OSC 8
2 DEFINE LCD_DREG PORTB
3 DEFINE LCD_DBIT 4
4 DEFINE LCD_RSREG PORTB
5 DEFINE LCD_RSBIT 0
6 DEFINE LCD_EREG PORTB
7 DEFINE LCD_EBIT 1
8 CONTROL VAR BYTE
9 ISI1 VAR BYTE
10 ISI2 VAR BYTE
11 U1 VAR BYTE
12 U2 VAR BYTE
13 H0 VAR HAM.BYTE0
14 H1 VAR HAM.BYTE1
15 HAM VAR WORD
16 RAI var word
17 ISI VAR WORD
18 P1 VAR WORD
19 P2 VAR WORD
20 P3 VAR WORD
21 W VAR WORD
22 DTA VAR PORTC.4
23 CLK VAR PORTC.5
24 ISARET VAR BIT
25 HATA var BIT
26 PORTC=0
27 PORTB=0
28 TRISC=0
29 TRISB=0
30 INICIO:
31 CONTROL=%00000101
32 HAM=0
33 GOSUB CONTROL_PULSO
34 GOSUB DATO_HUMEDAD
35 GOSUB HUMEDAD
36 PAUSE 50
37 CONTROL=%00000011
38 HAM=0
39 RAI=HAM
40 GOSUB CONTROL_PULSO
41 Gosub DATO_TEMPERATURA
42 GOSUB TEMPERATURA
43 HUMEDAD:
44 LCDOut $FE,2
45 LCDOut " HUME = ",DEC U1 , "," , DEC1 U2," % "
46 RETURN
47 TEMPERATURA:
48 LCDOut $FE,$C0
49 if ISARET=1 THEN
50 LCDOut " TEMP =-",DEC ISI1 , "," , DEC1 ISI," C "
51 RETURN
52 endIF
53 LCDOut " TEMP = ",DEC ISI1 , "," , DEC1 ISI2," C "
54 RETURN
55 EMPEZAR:
56 OUTPUT DTA
57 OUTPUT CLK
58 HIGH DTA
59 LOW CLK
60 PAUSE 1
61 HIGH CLK
62 LOW DTA
63 PAUSE 1
64 LOW CLK
65 PAUSE 1
66 HIGH CLK
67 PAUSE 1
68 HIGH DTA
69 LOW CLK
70 RETURN
71 RESET:
72 OUTPUT DTA
73 OUTPUT CLK
74 high DTA=1
75 FOR W=0 TO 9
76 HIGH CLK
77 pause 1
78 LOW CLK
79 Next W
80 Return
81 CONTROL_PULSO:
81 GOSUB EMPEZAR
83 SHIFTOUT DTA,CLK,1,[CONTROL]
84 INPUT DTA
85 PULSOUT CLK,10
86 HATA=0
87 FOR W=0 to 65500
88 IF DTA=0 then SALIR
89 NEXT W
90 HATA=1
91 SALIR:
92 SHIFTIN DTA,CLK,0,[H1]
93 OUTPUT DTA
94 LOW DTA
95 PULSOUT CLK,10
96 INPUT DTA
97 SHIFTIN DTA,CLK,0,[H0]
98 PULSOUT CLK,10
99 RETURN
100 DATO_TEMPERATURA:
101 if ham<4200 then
102 ISARET=1
103 ISI1=(4200-HAM)/100
104 ISI2=((4200-ham)//100)/10
105 goto EXCESO
106 endif
107 ISI1=(HAM-3850)/100
108 ISI2=((HAM-3850)//100)/10
109 EXCESO:
110 if HAM>16384 then
111 ISI1=0
112 ISI2=0
113 endif
114 RETURN
115 DATO_HUMEDAD:
116 p1=(28542-(54722**ham+ham))**ham-80
117 P2=655+(HAM*5)+(HAM**15917)
118 P3=(P2**2480)-(P2**2730)+P1
119 U1=p3/10
120 U2=p3//10
121 IF ham>3710 THEN
122 u1=0
123 U2=0
124 ENDIF
125 return
1. en la linea 13,14, pone var ham.byte0, hambyte1, que significa esto?
2. en la linea 87 que funcion tiene este for?
3. cuando llega a la subrutina dato humedad y dato temperatura, no entiendo de donde toma valor el ham y porque se mueve de valor.
gracias por su atencion, saludos