I'm stuck ...at red lines bellow ...
I have no ideea how to find the value of temperatureCode:; Termo 7 seg '====================================================================================== @ DEVICE pic16F628A, intOSC_osc_noclkout, WDT_OFF, PWRT_ON, MCLR_OFF, LVP_OFF, CPD_OFF DEFINE OSC 4 CMCON = 7 VRCON = 0 INTCON = 0 Common_4 VAR PORTA.0 Common_3 VAR PORTA.1 Common_2 VAR PORTA.2 Common_1 VAR PORTA.3 DP VAR PORTB.7 Temp Var byte Temperature Var Word TempC Var Word I Var Byte Sign Var Word Float Var Word V Var Word Dummy Var Byte Busy Var Bit DIGIT_0 VAR BYTE DIGIT_1 VAR BYTE DIGIT_2 VAR BYTE DIGIT_3 VAR BYTE digit Var BYTE DQ VAR PORTA.4 DQ_DIR var TRISA.4 command var byte pis var byte TrisB=0 ' Make PortB outputs TrisA.0=0:TrisA.1=0:TrisA.2=0 ' Make only the specific bits of PortA outputs TrisA.3=0:TrisA.4=1 PortA=0:PortB=0 ' Clear PortB and PortA INTCON = %00100000 OPTION_REG = %10000000 ON INTERRUPT GOTO ISR INTCON = %10100000 '====================================================================================== Gosub init1820 ' Init the DS1820 command = $cc ' Issue Skip ROM command Gosub write1820 command = $44 ' Start temperature conversion Gosub write1820 Pause 2000 ' Wait 2 seconds for conversion to complete Gosub init1820 ' Do another init command = $cc ' Issue Skip ROM command Gosub write1820 MAIN : command = $be ' Read the temperature Gosub write1820 Gosub read1820 temperature = ?????? sign = ???? Gosub Selectie Goto Main '====================================================================================== Selectie : IF sign ="-" then DIGIT_3="-" else DIGIT_3=" " ENDIF IF TEMPERATURE DIG 2 = 0 THEN DIGIT_2 = " " ELSE DIGIT_2 = TEMPERATURE dig 2 ENDIF DIGIT_1 = TEMPERATURE dig 1 DIGIT_0 = TEMPERATURE dig 0 RETURN '====================================================================================== DISABLE ISR: for i=0 to 4 TEMP = DIGIT_3 : gosub segments COMMON_1 = 1 : PAUSE 1 : COMMON_1 = 0 TEMP = DIGIT_2 : GOSUB segments COMMON_2 = 1 : PAUSE 1 : COMMON_2 = 0 TEMP = DIGIT_1 : GOSUB segments COMMON_3 = 1 : DP = 0 : PAUSE 1 : COMMON_3 = 0 : DP = 1 TEMP = DIGIT_0 : GOSUB segments COMMON_4 = 1 : PAUSE 1 : COMMON_4 = 0 next i segments: ; CONVERTS DATES TO 7 SEGMENT CODE for Common ANOD SELECT CASE TEMP CASE 0 : PortB=%11000000 ; 0=ON ; 1=OFF CASE 1 : PortB=%11111001 CASE 2 : PortB=%10100100 CASE 3 : PortB=%10110000 CASE 4 : PortB=%10011001 CASE 5 : PortB=%10010010 CASE 6 : PortB=%10000010 CASE 7 : PortB=%11111000 CASE 8 : PortB=%10000000 CASE 9 : PortB=%10010000 CASE "-" : PortB=%10111111 CASE " " : PortB=%11111111 END SELECT return INTCON.2=0 RESUME ENABLE '====================================================================================== ' Initialize DS1820 and check for presence init1820: Low DQ ' Set the data pin low to init Pauseus 500 ' Wait > 480us DQ_DIR = 1 ' Release data pin (set to input for high) Pauseus 100 ' Wait > 60us If DQ = 1 Then Pause 500 Goto main ' Try again Endif Pauseus 400 ' Wait for end of presence pulse Return ' Write "command" byte to the DS1820 write1820: For pis = 1 To 8 ' 8 bits to a byte If command.0 = 0 Then Gosub write0 ' Write a 0 bit Else Gosub write1 ' Write a 1 bit Endif command = command >> 1 ' Shift to next bit Next pis Return ' Write a 0 bit to the DS1820 write0: Low DQ Pauseus 60 ' Low for > 60us for 0 DQ_DIR = 1 ' Release data pin (set to input for high) Return ' Write a 1 bit to the DS1820 write1: Low DQ ' Low for < 15us for 1 @ nop ' Delay 1us at 4MHz DQ_DIR = 1 ' Release data pin (set to input for high) Pauseus 60 ' Use up rest of time slot Return ' Read temperature from the DS1820 read1820: For pis = 1 To 16 ' 16 bits to a word temperature = temperature >> 1 ' Shift down bits Gosub readbit ' Get the bit to the top of temp Next pis Return ' Read a bit from the DS1820 readbit: temperature.15 = 1 ' Preset read bit to 1 Low DQ ' Start the time slot @ nop ' Delay 1us at 4MHz DQ_DIR = 1 ' Release data pin (set to input for high) If DQ = 0 Then temperature.15 = 0 ' Set bit to 0 Endif Pauseus 60 ' Wait out rest of time slot Return end...


...


Bookmarks