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