'Pines.bas '201102 'Para tarjeta Director ES '***Usar compilador PBP*** 'Fus para PIC16F87xA 'RC_OSC 'HS_OSC 'XT_OSC 'LP_OSC 'WDT_ON 'WDT_OFF 'PWRT_ON 'PWRT_OFF 'BOD_ON 'BOD_OFF 'LVP_ON 'LVP_OFF 'CPD_ON 'CPD_OFF 'WRT_HALF 'WRT_1FOURTH 'WRT_256 'WRT_OFF 'DEBUG_ON 'DEBUG_OFF 'PROTECT_ON 'PROTECT_OFF @ device pic16F874A, xt_osc, wdt_off, pwrt_on, lvp_off, protect_on RA0 VAR PortA.0 RA1 VAR PortA.1 RA2 VAR PortA.2 RA3 VAR PortA.3 RA4 VAR PortA.4 RA5 VAR PortA.5 RB0 VAR PortB.0 RB1 VAR PortB.1 RB2 VAR PortB.2 RB3 VAR PortB.3 RB4 VAR PortB.4 RB5 VAR PortB.5 RB6 VAR PortB.6 RB7 VAR PortB.7 RC0 VAR PortC.0 RC1 VAR PortC.1 RC2 VAR PortC.2 RC3 VAR PortC.3 RC4 VAR PortC.4 RC5 VAR PortC.5 RC6 VAR PortC.6 RC7 VAR PortC.7 RD0 VAR PortD.0 RD1 VAR PortD.1 RD2 VAR PortD.2 RD3 VAR PortD.3 RD4 VAR PortD.4 RD5 VAR PortD.5 RD6 VAR PortD.6 RD7 VAR PortD.7 RE0 VAR PortE.0 RE1 VAR PortE.1 RE2 VAR PortE.2 TxLCD VAR PortB.0 PosCur VAR BYTE I VAR BYTE Qty VAR WORD Num VAR BYTE Num1 VAR BYTE Num2 VAR BYTE Num3 VAR BYTE Num4 VAR BYTE Aux VAR BYTE Res VAR BYTE ASM bcf 0x03,0x05 ;status bit de banco bcf 0x03,0x06 ;status bit de banco bsf 0x03,0x05 ;cambia a banco 1 movlw 0x07 ;b'00000111' movwf 0x9f ;adcon1 inicia A/D del porta como I/0 bcf 0x03,0x05 ;cambia a banco 0 ENDASM TRISA=%11111111 TRISB=%11111110 TRISC=%11111111 TRISD=%11111111 TRISE=%00000111 TxLCD=1 PAUSE 3000 Goto Inicio 'Subrutinas '---------------------------------------------------------- 'Subrutinas para LCD '---------------------------------------------------------- Clear_display: Serout TxLCD,0,[254,1] Pause 30 Return '---------------------------------------------------------- Ini_linea_1: Serout TxLCD,0,[254,2] Pause 30 Return '---------------------------------------------------------- Ini_linea_2: Serout TxLCD,0,[254,$C0] ' Pause 40 Return '----------------------------------------------------------- Ini_linea_3: Serout TxLCD,0,[254,$94] ' Pause 30 Return '----------------------------------------------------------- Ini_linea_4: Serout TxLCD,0,[254,$D4] ' Pause 30 Return '----------------------------------------------------------- Cursor_Off: Serout TxLCD,0,[254,$0C] Pause 30 Return '----------------------------------------------------------- Cursor_Underline: Serout TxLCD,0,[254,$0E] Pause 30 Return '----------------------------------------------------------- Cursor_Blinking: Serout TxLCD,0,[254,$0F] Pause 30 Return '----------------------------------------------------------- Move_Cursor_Left: Serout TxLCD,0,[254,$10] Pause 30 Return '----------------------------------------------------------- Move_Cursor_Right: Serout TxLCD,0,[254,$14] Pause 30 Return '------------------------------------------------------------ PosCursor_2: PosCur=PosCur-1 PosCur=$C0 + PosCur Serout TxLCD,0,[254,PosCur] FinPosCursor_2: Return '-------------------------------------------------------------------- PosCursor_4: PosCur=PosCur-1 PosCur=$D4 + PosCur Serout TxLCD,0,[254,PosCur] FinPosCursor_4: Return '-------------------------------------------------------------------- PantallaDerecha: Serout TxLCD,0,[254,$1F] Pause 40 Return '-------------------------------------------------------------------- 'Subrutinas del programa '-------------------------------------------------------------------- Calcula_num: Random Qty Num= Qty DIG 1 If Num=0 Then Calcula_num Return '--------------------------------------------------------------------- PantallaInicio: Gosub Clear_display Pause 500 Gosub Ini_linea_1 ' "123456789abcdefg" Serout TxLCD,0,[" Sistema de "] Pause 1500 Gosub Ini_linea_1 Serout TxLCD,0,[" desarrollo "] Pause 1500 Gosub Ini_linea_1 Serout TxLCD,0,[" "] Gosub Ini_linea_2 Pause 10 Serout TxLCD,0,[" DIRECTOR "] Return '-------------------------------------------------------------------- Inicio: Gosub Calcula_num Num1=Num Gosub Calcula_num Num2=Num Gosub Calcula_num Num3=Num Gosub Calcula_num Num4=Num If Num3>Num1 Then Aux=Num1 Num1=Num3 Num3=Aux Endif If Num4>Num2 Then Aux=Num2 Num2=Num4 Num4=Aux Endif Res= Num1+Num2-NUm3-Num4 For I= 1 To 2 Gosub PantallaInicio Pause 1500 Next I ' Gosub Ini_linea_1 ' "123456789abcdefg" ' Serout TxLCD,0,[#Num1," ",#Num2," ",#Num3," ",#Num4," ",#Res ] ' Pause 5000 For I=1 To 16 Gosub PantallaDerecha Pause 250 Next I ' Goto Inicio Gosub Ini_linea_1 ' "123456789abcdefg" Serout TxLCD,0,["Piensa un numero"] Gosub Ini_linea_2 Pause 10 Serout TxLCD,0,[" Del 1 a 10 "] Pause 3000 Gosub Clear_display Pause 500 Gosub Ini_linea_1 ' "123456789abcdefg" Serout TxLCD,0,[" Dicelo a tu "] Gosub Ini_linea_2 Pause 10 Serout TxLCD,0,[" Amigo "] Pause 3000 For I=1 To 16 Gosub PantallaDerecha Pause 250 Next I Gosub Ini_linea_1 ' "123456789abcdefg" Serout TxLCD,0,["Sumale ",#Num1," y "] Gosub Ini_linea_2 Pause 10 Serout TxLCD,0,["Sumale ",#Num2," "] Pause 7000 Gosub Clear_display Pause 500 Gosub Ini_linea_1 ' "123456789abcdefg" Serout TxLCD,0,["Restale ",#Num3," y "] Gosub Ini_linea_2 Pause 10 Serout TxLCD,0,["Restale ",#Num4," "] Pause 7000 For I=1 To 16 Gosub PantallaDerecha Pause 250 Next I Gosub Ini_linea_1 ' "123456789abcdefg" Serout TxLCD,0,["Quitale el Num. "] Gosub Ini_linea_2 Pause 10 Serout TxLCD,0,["que pensaste... "] Pause 5000 Gosub Ini_linea_1 ' "123456789abcdefg" Serout TxLCD,0,["El resultado es "] Gosub Ini_linea_2 Pause 10 Serout TxLCD,0,[".... ",#Res," "] Pause 3000 Goto Inicio End