1 {Rutina de verificación para operaciones con datos de tipo byte.
2 Se debe simular el programa en el circuito "Test3.DSN". Se debe
3 escuchar, una serie de pitidos cortos. Si se escucha un pitido
4 largo, es que hubo algún error en el resultado de alguna operación.
5 Por: Tito Hinostroza
6 Modificado: 01/03/2018}
7 {$PROCESSOR PIC16F877A}
8 {$FREQUENCY 8Mhz}
9 {$OUTPUTHEX 'output.hex'}
10 uses UnitTest, PIC16F877A;
11 var
12   a, b: byte;
13 
14 begin
15   SetAsOutput(pinLed);
16   pinLed := 0;
17 
18   //////////////////////////////////////////////////////////
19 	////////////////////////  Suma  /////////////////////////
20   //////////////////////////////////////////////////////////
21 
22 	//Constante
23   if 0 + 0 = 0 then good else bad end;
24   if 0 + 1  = 0 then bad else good end;
25   if 255 + 0 = 255 then good else bad end;
26 
27 	//Variables
28   a := 0;
29   b := 255;
30   if a + a = 0 then good else bad end;
31   if a + b = 255 then good else bad end;
32   if b + a = 255 then good else bad end;
33   if a + b = b then good else bad end;
34 
35   a := 1;
36   b := 254;
37   if a + b = 255 then good else bad end;
38 
39 	//Variables - constantes
40   a := 0;
41   if a + 0 = 0 then good else bad end;
42   if 0 + a = 0 then good else bad end;
43   if a + 1 = 1 then good else bad end;
44   if 1 + a = 1 then good else bad end;
45   if a + 255 = 255 then good else bad end;
46   if 255 + a = 255 then good else bad end;
47 
48   a := 1;
49   if a + 0 = 1 then good else bad end;
50   if 0 + a = 1 then good else bad end;
51   if a + 1 = 2 then good else bad end;
52   if 1 + a = 2 then good else bad end;
53   if a + 254 = 255 then good else bad end;
54   if 254 + a = 255 then good else bad end;
55 
56 	//Expresiones
57   a := 10; b := 5;
58   if a = b+5 then good else bad end;
59   if a + b = 15 then good else bad end;
60   if (a + b) + 1 = 16 then good else bad end;
61   if b + a = 15 then good else bad end;
62   if 15 = b + a then good else bad end;
63   if a + b = a + 5 then good else bad end;
64   if a + (b+a) = a + (a + 5) then good else bad end;
65   if a + (b+ (a+b)) = a + (a + a) then good else bad end;
66 
67   //////////////////////////////////////////////////////////
68 	////////////////////////  Resta  /////////////////////////
69   //////////////////////////////////////////////////////////
70 
71 	//Constante
72   if 0 - 0 = 0 then good else bad end;
73   if 1 - 0  = 0 then bad else good end;
74   if 255 - 0 = 255 then good else bad end;
75 
76 	//Variables
77   a := 255; b := 0;
78   if a - a = 0 then good else bad end;
79   if a - a = b then good else bad end;
80   if b - b = b then good else bad end;
81   if a - b = 255 then good else bad end;
82   if a - b = a then good else bad end;
83 
84   a := 255; b := 1;
85   if b - b = 0 then good else bad end;
86   if a - b = 254 then good else bad end;
87 
88   a := 1; b := 0;
89   if a - b = 1 then good else bad end;
90   if a - b = a then good else bad end;
91 
92   a := 10; b := 5;
93   if a - b = b then good else bad end;
94   if a - b = 5 then good else bad end;
95 
96 	//Variables - constantes
97   a := 0;
98   if a - 0 = 0 then good else bad end;
99   if 0 - a = 0 then good else bad end;
100   if a - 0 = a then good else bad end;
101   a := 1;
102   if a - 1 = 0 then good else bad end;
103   if 1 - a = 0 then good else bad end;
104   if 255 - a = 254 then good else bad end;
105   if 10 - a = 9 then good else bad end;
106   a := 255;
107   if a - 1 = 254 then good else bad end;
108   if 255 - a = 0 then good else bad end;
109   if a - 10 = 245 then good else bad end;
110 
111 	//Expresiones
112   a := 10; b := 5;
113   if 10 - (b+1) = 4 then good else bad end;  //constante - expresión
114   if a - (b+1) = 4 then good else bad end;   //variable - expresión
115   if (a+1) - 1 = 10 then good else bad end;   //expresión - constante
116   if (a+1) - 0 = 11 then good else bad end;   //expresión - constante
117   if (a+1) - a = 1 then good else bad end;   //expresión - variable
118   if (a+1) - (b+1) = 5 then good else bad end;   //expresión - expresión
119   if a - b = a - b then good else bad end;
120   if a - b - 1 = 4 then good else bad end;
121   if a - b - 1 = b - 1 then good else bad end;
122   if 5 = a - b then good else bad end;
123   if a - 5 = a - b then good else bad end;
124   if b + (a-b) = a  then good else bad end;
125   if a = b + (a-b) then good else bad end;
126   if a + (b+ (a-b)) = a + (a - b + 5) then good else bad end;
127 
128   //////////////////////////////////////////////////////////
129 	////////////////////  Mult 8 bits->16  ///////////////////
130   //////////////////////////////////////////////////////////
131 	//coConst_Const
132   if 0 * 0 = 0 then good else bad end;
133   if 0 * 1  = 0 then good else bad end;
134   if 255 * 0 = 0 then good else bad end;
135   if 5 * 5 = 25 then good else bad end;
136 
137 	//coConst_Variab
138   a := 0;
139   if 5 * a = word(0) then good else bad end;
140   a := 5;
141   if word(0 * a) = word(0) then good else bad end;
142   if 5 * a = word(25) then good else bad end;
143   //coConst_Expres
144   a := 5;
145   if 0 * (a+1) = word(0) then good else bad end;
146   if 5 * (a+1) = word(30) then good else bad end;
147   //coVariab_Const
148   a := 5;
149   if a * 0 = word(0) then good else bad end;
150   if a * 5 = word(25) then good else bad end;
151   //coVariab_Variab
152   a := 5; b := 0;
153   if a * b = word(0) then good else bad end;
154   a := 5; b := 100;
155   if a * b = 500 then good else bad end;
156   //coVariab_Expres
157   a := 10; b := 10;
158   if a * (b+1) = word(110) then good else bad end;
159   //coExpres_Const
160   a := 19;
161   if (a+1) * 5 = word(100) then good else bad end;
162   //coExpres_Variab
163   a := 19; b := 100;
164   if (a+1) * b = 2000 then good else bad end;
165   //coExpres_Expres
166   a := 10; b := 10;
167   if (a+1) * (b+1) = word(121) then good else bad end;
168 
169   //////////////////////////////////////////////////////////
170 	////////////////////  8 Div 8 -> 8  ///////////////////
171   //////////////////////////////////////////////////////////
172 
173 	//coConst_Const
174   if 0 div 1  = 0 then good else bad end;
175   if 5 div 255 = 0 then good else bad end;
176   if 25 div 5 = 5 then good else bad end;
177 
178 	//coConst_Variab
179   a := 0;
180   if 0 div a = 0 then good else bad end;
181   a := 1;
182   if 1 div a = 1 then good else bad end;
183   a := 2;
184   if 1 div a = 0 then good else bad end;
185   a := 50;
186   if 100 div a = 2 then good else bad end;
187   a := 0;  //Entre cero
188   if 255 div a = 255 then good else bad end;
189 
190   //coConst_Expres
191   a := 5;
192   if 0 div (a+1) = 0 then good else bad end;
193   if 6 div (a+1) = 1 then good else bad end;
194   //coVariab_Const
195   a := 25;
196   if a div 5 = 5 then good else bad end;
197   if a div 6 = 4 then good else bad end;
198   //coVariab_Variab
199   a := 255; b := 50;
200   if a DIV b = 5 then good else bad end;
201   a := 99; b := 100;
202   if a DIV b = 0 then good else bad end;
203   //coVariab_Expres
204   a := 100; b := 10;
205   if a div (b+1) = 9 then good else bad end;
206   //coExpres_Const
207   a := 19;
208   if (a+1) div 5 = 4 then good else bad end;
209   //coExpres_Variab
210   a := 15; b := 4;
211   if (a+1) div b = 4 then good else bad end;
212   //coExpres_Expres
213   a := 100; b := 5;
214   if (a+5) div (b+2) = 15 then good else bad end;
215 
216   //////////////////////////////////////////////////////////
217 	//////////////////// 8 Mod 8 bits-> 8  ///////////////////
218   //////////////////////////////////////////////////////////
219 
220 	//coConst_Const
221   if 0 mod 1  = 0 then good else bad end;
222   if 5 mod 255 = 5 then good else bad end;
223   if 25 mod 5 = 0 then good else bad end;
224   if 24 mod 5 = 4 then good else bad end;
225 
226 	//coConst_Variab
227   a := 0;
228   if 0 mod a = 0 then good else bad end;
229   a := 1;
230   if 1 mod a = 0 then good else bad end;
231   a := 2;
232   if 1 mod a = 1 then good else bad end;
233   a := 50;
234   if 100 mod a = 0 then good else bad end;
235   a := 0;  //Entre cero
236   if 255 mod a = 255 then good else bad end;  //Realmente no está definido que se así
237 
238   //coConst_Expres
239   a := 5;
240   if 0 mod (a+1) = 0 then good else bad end;
241   if 6 mod (a+1) = 0 then good else bad end;
242 
243   //coVariab_Const
244   a := 25;
245   if a mod 5 = 0 then good else bad end;
246   if a mod 6 = 1 then good else bad end;
247 
248   //coVariab_Variab
249   a := 255; b := 50;
250   if a mod b = 5 then good else bad end;
251   a := 99; b := 100;
252   if a mod b = 99 then good else bad end;
253 
254   //coVariab_Expres
255   a := 100; b := 10;
256   if a mod (b+1) = 1 then good else bad end;
257 
258   //coExpres_Const
259   a := 19;
260   if (a+1) mod 5 = 0 then good else bad end;
261 
262   //coExpres_Variab
263   a := 18; b := 4;
264   if (a+1) mod b = 3 then good else bad end;
265 
266   //coExpres_Expres
267   a := 100; b := 5;
268   if (a+4) mod (b+2) = 6 then good else bad end;
269 
270   //////////////////////////////////////////////////////////
271 	/////////////////////  FIN DE PRUEBAS  ///////////////////
272   //////////////////////////////////////////////////////////
273   pinLed := 0;
274   delay_ms(50);
275   pinLed := 1;
276   delay_ms(70);
277   pinLed := 0;
278 end.
279