'------------------------- M8LF20111201X.bas-------------------------- $regfile = "m8def.dat" $crystal = 16000000 $hwstack = 32 $swstack = 32 $framesize = 64 'a tárolt változók kerete '------------------------------------------------------------------------------- Dim T1 As Byte 'T1 ALPÜTEM SZÁMLÁLÓ Dim T1f As Byte Dim T1ff As Byte Dim T1kj As Byte Dim T3 As Byte 'T3 xmsec SZÁMLÁLÓ '---------------------------- Dim V1_word As Word 'általános változó word Dim V1_long As Long Dim Kijelzes_flag As Bit Dim Feny As Byte Dim Fenyero As Word Dim Atlagfeny As Byte '-------------------------------------------- Dim Ertek0 As Long '0-as csatorna Dim Channel As Byte 'A/D BEMENET VÁLTOZÓ '--------------------------- Declare Sub Ledkijel_test Declare Sub Kijelzes Declare Sub Kijelzes0 Declare Sub Ad_meres Declare Sub Szamol '--------------------------- Const Kijelzesgyak = 50000 '-------------------------------------- 'PA.0 NINCS 'PA.1 NINCS 'PA.2 NINCS 'PA.3 NINCS 'PA.4 NINCS 'PA.5 NINCS 'PA.6 NINCS 'PA.7 NINCS Config Portb.0 = Output 'PB.0 port OUT1/5 csatlakozó Config Portb.1 = Output 'működést jelző LED 'Config Pinb.2 = Output 'ÜRES 'PB.3 MOSI PRG. LCD RS 'PB.4 MISO PRG LCD OE 'PB.5 SCK PRG. 'PB.6 OSZC. 'PB.7 OSZC. 'AREF= 4,096V KÜLSŐ 'PC.0 INPUT ANALOG BEMENET 'PC.1 INPUT ANALOG BEMENET 'PC.2 INPUT ANALOG BEMENET 'PC.3 INPUT ANALOG BEMENET 'PC.4 'LCD D6 'PC.5 'LCD D7 'PC.6 RESET (PIN1) 'PC.7 NINCS 'Pd.0 Rxd / Bemenet/ (PIN2) 'Pd.1 Txd / Kimenet/ (PIN3) 'Config Portd.2 = Output 'INT0 csatlakozás 'Pd.3 kijelző DATA5 'Pd.4 kijelző data4 'Config Pind.5 = Input 'OUT1/2 csatlakozó 'Config Pind.6 = Input 'OUT1/3 csatlakozó 'Config Pind.7 = Input 'OUT1/4 csatlakozó Mukodesled Alias Portb.1 'tápfeszültség/müködés LED Portb.0 = 1 'sötét LÁMPA Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portb.4 , Rs = Portb.3 Config Lcd = 16 * 2 '-----------------------[ INICIALIZÁLÁS ]--------------------------------------- 'ADC KONFIGURÁLÁS Rem reference lehetne belső=internal vagy 5V-OS TÁPFESZ=AVCC Rem a belső ref. vagy AVCC használata esetén az AREF lábra külső szűrő kondenzátort 'kell rakni. Rem A belső referencia feszültség 2,56V (azért ezt az adatlapról ellenőrizni!) Rem EBBEN AZ ESETBEN KÜLSŐ referenciát használunk,ezért "Off" Rem a futási mód lehet "single" vagy "free" Rem a "Single" mód esetén a GETADC() funkciót kell használni! Rem a Prescaler=auto beállítás a processzor órajeléből automatikusan választja ki Rem az ADC működéséhez szükséges megfelelő órajel leosztást. Config Adc = Single , Prescaler = Auto , Reference = Off 'Config Adc = Single , Prescaler = Auto , Reference = Internal '------------------------------------------------------------------------------- 'TIMER 0 KONFIGURÁLÁS '260424 Config Timer0 = Timer , Prescale = 8 '8,16 , 32, 64 , 128 , 256 On Ovf0 Tim0_isr 'Tim0_isr '-------------------------------------- Rem falling lefutó élre megy megszakításba Rem rising - felfutó élre megy megszakitásba Config Int0 = Rising 'Falling On Int0 Szinkronizalas 'MEGSZAKITÁS KISZOLGÁLÁS '-------------------------------------- 'WATCHDOG KONFIGURÁLÁS Config Watchdog = 2048 '16 , 32, 64 , 128 , 256 , 512 , 1024 and 2048. Reset Watchdog '270827 '-------------------------------------- 'MEGSZAKITÁS ENGEDÉLYEZÉS 'Enable Timer0 'Enable Int0 'Enable Interrupts 'fontos! Start Watchdog 'WATCHDOG INDITÁS '--------------------------------- Reset Watchdog '270827 Feny = 0 Atlagfeny = 30 '=============================================================================== '-----------------------[ FŐPROGRAM ]------------------------------------------- Reset Watchdog Cls Lcd "MEGA8 LAMP PRG. " Locate 2 , 1 Lcd "2011.11.06.07:05" Reset Watchdog Enable Timer0 Enable Int0 Enable Interrupts Cursor Off '-------------------------------------- '************************************** T1f = 0 T1 = 0 Feny = 0 V1_word = 0 V1_long = 0 Ertek0 = 0 T3 = 0 '------------ Fprg: Rem a kijelzés sűrűségének beállitása Incr V1_long If V1_long >= Kijelzesgyak Then Call Ad_meres Call Kijelzes0 Call Szamol V1_long = 0 End If Reset Watchdog Goto Fprg '=======================[ FŐPROGRAM VÉGE ]====================================== '------------------------------------------------------------------------------- '-----------------------[ TIMER 0 MEGSZAKITÁSKISZOLGÁLÁS] ---------------------- ' ez a megszakítási alprogram Rem 4,915MHz,osztó=64,ciklus=30,idő=100msec Rem 4,915MHz,osztó=8,ciklus=240,idő=100msec Rem 16.0 MHz osztó=8,ciklus=3,255*240=781, 100msec Rem 0.128msec/ciklus Tim0_isr: Incr T1f Incr T1ff Incr T1 'T1 - leosztott órajel számlálója If T1f > 80 Then '78 T1f = 0 End If If T1f >= Feny Then Portb.0 = 0 Else Portb.0 = 1 End If Return '------------------------------------------------------------------------------ '-----------------------[ INT 0 MEGSZAKITÁSKISZOLGÁLÁS] ---------------------- Szinkronizalas: Portb.0 = 0 'lámpa sötét T1f = 0 T1kj = T1ff T1ff = 0 Return '------------------------------------------------------------------------------- Sub Kijelzes0 Rem "csatorna0" Rem "csatorna1" Rem "csatorna2" Rem "csatorna3" Kijelzes_flag = 0 Cls Locate 1 , 1 Lcd "E0:" ; Ertek0 Locate 1 , 10 Lcd "FE:" ; Feny 'Ertek1 Locate 2 , 1 Lcd "FR:" ; Fenyero 'Lcd "T1:" ; T1kj Locate 2 , 9 Lcd "t1f:" ; T1f End Sub '------------------------------------------------------------------------ '------------------------------------------------------------------------ Sub Ad_meres Set Mukodesled 'set világít Channel = 0 Start Adc Ertek0 = Getadc(channel) Stop Adc Reset Mukodesled 'reset sötét Kilep1: End Sub '-------------------------------------------------------------------------- Sub Szamol Rem ertek0-csatornán lesz a fényerő Rem maximális fényerő 1024 Rem minimális fényerő <10 Rem max érték 78 Fenyero = Ertek0 Fenyero = Fenyero / 13 '1024 esetén 78,76 If Fenyero = Atlagfeny Then Goto Kilep_szamol If Fenyero > Atlagfeny And Feny < 79 Then Incr Feny End If If Fenyero < Atlagfeny And Feny > 0 Then Decr Feny End If Kilep_szamol: End Sub '-------------------------------------------------------------------------- '////////////////////////// PROGRAM VÉGE /////////////////////////////////////// End