why all the fiddling ?
why not ?
Code:
ARRAYWRITE NexBuf, ["vac.val=",dec3 tvac,255,255,255,0]
RotX = 0 ;NexFlags.RotX -- Clear RotX Flag
GOTO Start_TX ;No RETURN Needed, Using GOTO Command
eg
Code:
;----[16F886 Hardware Configuration]--------------------------------------------#CONFIG
cfg1 = _INTRC_OSC_NOCLKOUT ; INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
cfg1&= _WDT_ON ; WDT enabled
cfg1&= _PWRTE_OFF ; PWRT disabled
cfg1&= _MCLRE_OFF ; RE3/MCLR pin function is digital input, MCLR internally tied to VDD
cfg1&= _CP_OFF ; Program memory code protection is disabled
cfg1&= _CPD_OFF ; Data memory code protection is disabled
cfg1&= _BOR_OFF ; BOR disabled
cfg1&= _IESO_ON ; Internal/External Switchover mode is enabled
cfg1&= _FCMEN_ON ; Fail-Safe Clock Monitor is enabled
cfg1&= _LVP_OFF ; RB3 pin has digital I/O, HV on MCLR must be used for programming
cfg1&= _DEBUG_OFF ; In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins
__CONFIG _CONFIG1, cfg1
cfg2 = _BOR40V ; Brown-out Reset set to 4.0V
cfg2&= _WRT_OFF ; Write protection off
__CONFIG _CONFIG2, cfg2
#ENDCONFIG
'chip configs
TRISA=000000 'SET A TO OUTPUT 1=input
TRISC=001101 'set half C for in/out
TRISB=011000 'set PortB to output
ANSELH=000000 ' ADC OFF B
ANSEL=0000000 'configure PortA as digital except first 2
ADCON1=000000 'adc justify
OSCCON=110101 'SET FREQUENCY TO 8MHZ
WPUB=000000 'turn off Pullups
CM1CON0=0 'DISABLE COMPARATORS
CM2CON0=0 'SAME HERE
'CCP1CON=000000 ' configure pwm
'PSTRCON=010110 'disable C pwm
DEFINE OSC 8
DEFINE ADC_BITS 10
DEFINE ADC_CLOCK 3
DEFINE ADC_SAMPLEUS 50
'lcd config
pause 1000
' Set LCD Data port
DEFINE LCD_DREG PORTC
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 0
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 1
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 44
lcdout $fe, $1, "ready "
pause 1000
DPIN Var PORTA.2 ' I2C data pin
CPIN Var PORTA.1 ' I2C clock pin
B Var word
B0 Var byte
B2 Var byte
NexBuf Var byte[16]
tVac Var word
Send_Vac: ;Send Current Vacuum Reading to Nextion
tVac = 13 ;Create a Temporary Variable We Can Modify
ARRAYWRITE NexBuf, ["vac.val="] ;Start Nextion Command Sequence, Occupies NexBuf[0] >> [7]
IF tVac > 100 THEN ;If 3 Digits
b0 = tVac / 100 ; Get the Xxx Value
NexBuf[8] = b0 + $30 ; Convert it to ASCii
tVac = tVac - (b0 * 100) ; Subtract the Xxx Value from tVac
IF tVac < 10 THEN ;If xXx = 0
NexBuf[9] = $30 ;If tVac < 10, it's Zero (ASCii)
ENDIF ;IF tVac < 10
ELSE ;tVac < 100
NexBuf[8] = $30 ;If tVac < 100, 1st Digit is Zero (ASCii)
ENDIF ;IF tVac > 100
IF tVac > 10 THEN ;If Now Double Digit
b0 = tVac / 10 ;Get the xXx Value
NexBuf[9] = b0 + $30 ;Convert it to ASCii
tVac = tVac - (b0 * 10) ;Subtract the xXx Value from tVac
ELSE ;tVac < 10
NexBuf[9] = $30 ;If tVac < 10, it's Zero (ASCii)
ENDIF ;IF tVac > 10
NexBuf[10] = tVac + $30 ;Convert xxX to ASCii & Write to Buffer
FOR b0 = 11 TO 13 ;Generate "End of Message" Sequence: $FF, $FF, $FF
NexBuf[b0] = $FF ;Load it to Buffer
NEXT b0 ;FOR b0 = 11 TO 13
NexBuf[14] = 0 ;Tells Us To Turn UART TX INT Off
' RotX = 0 ;NexFlags.RotX -- Clear RotX Flag
lcdout $fe, $1, str NexBuf
tVac = 3
ARRAYWRITE NexBuf, ["vac.val=",dec3 tvac,255,255,255,0] ;Start Nextion Command Sequence, Occupies NexBuf[0] >> [7]
lcdout $fe, $c0, str NexBuf
Bookmarks