勝手な電子工作・・

勝手なオリジナル電子工作に関する記事を書きます

小さな8ピンPICで色々(時計+温湿度計兼RTC書込器)

f:id:a-tomi:20210104153704j:plain



あけましておめでとうございます、

と言っている間に早くも3日になりました。外出自粛の三が日があっという間に終わりそう。それでは・・と、午後から急にPICのプログラムをしあげようと思い立ちました。大晦日に紅白に飽きて着手していたのを完成させるのが早いかと。

他に工作中のものでマイペースでやっているものもありますがすぐには出せないので、「初荷」とするには簡単なプログラムに限るかな、と気づいたわけです^^; その日に完了しましたが、ぼちぼちやってるんで、投稿はこの記事ができた4日です。

前回の記事の応用ですから確実にできそうでした。前回の記事は次:

LCDキャラクターディスプレイを8ピンPICに接続する(コスパ最高?) - 勝手な電子工作・・

丑年にちなみ反芻動物のように粘り強くPICアセンブラーで書いてます(?)。

まずは回路図。毎度の汚い手書きですみませんが。

f:id:a-tomi:20210104154135j:plain

組み合わせた相手は以前に作ったRTC書き込み器で次の記事:

RTC writer(リアルタイムクロック・ライター) 8ピンPICで簡素に - 勝手な電子工作・・

その時の表示装置としてはTM1637LEDを使いましたので、今回はそれを20x4LCDに変え、表示画面が大きいのでついでに温湿度計DHT11をつなぐことにしました。

 DHT11は非常に廉価ながら正確な温湿度センサーで、one-wireプロトコルで動きます。例えば次の記事:

PICアセンブラーで芸当(?)その4)もっと接続-余裕の8ピン! - 勝手な電子工作・・

 

今回のプログラム全ては次のとおりで、この小さなPICの容量の半分ほどしか消費しないつもりで組みましたがそうなりました。

;U210103-RTC-DHT11-LCD-V00.asm			     		As of Jan. 3, 2021
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;										;
;   	Time, Temperature, and Humidity Display with PIC12F1822 V00		;
;	        (C)2014-2021 Akira Tominaga, All rights reserved.		;
;										;
;	  Major revisions							;
;		V00 Initial version    		December 31, 2020		;
;										;
;	  Function								;
;		1.Show temperature, & humidity on LCD				;
;										;
;	  Input/output       							;
;		RA0 DHT11 Temp&Humidity-sensor w/ 1-wire protocol		;
;		RA1 SDA for I2C-RTC  output  usually and input occasionally	;
;		RA2 SCL for I2C-RTC  output					;
;		RA3 Mode switch (swMode) input pulled-up			;
;		RA1 Time switch (swTime) input pulled-up			;
;		RA0 Set switch  (swSet)  input pulled-up			;
;										;
;										;
;	  Remarks								;
;		1. Clock = HFINTOSC (	16MHz)					;
;			Hence 1 step = 0.25 micro seconds			;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
	list		p=12F1822      ; list directive to define processor
	#include	"p12F1822.inc" ; p12F1822 specific variables
    __CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
    __CONFIG _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_LO & _LVP_OFF
;	page
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 	Macro definitions					;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 	Device dependent Macros			;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
DEVset	macro	
	BANKSEL	OSCCON		; Bank=1
	movlw	B'01111010'	; 16MHz and internal oscillator
	movwf	OSCCON
;
;	BANKSEL	INTCON		; Interrupt Con (in all banks hence comment)
	clrf	INTCON		; Disable all interrupts
;
; PORTA initialization
	BANKSEL	PORTA		; Bank=0
	clrf	PORTA
;	BANKSEL	LATA		; Bank=2
;	clrf	LATA
	BANKSEL	ANSELA		; Bank=3
	clrf	ANSELA		; No use of ADC
	BANKSEL	ADCON0		; Bank=1
	clrf	ADCON0		; No use of ADC
;
	BANKSEL	TRISA		; Bank=1
	movlw	B'11111000'	; RA0,1 and 2 are output
	movwf	TRISA
;
	BANKSEL	OPTION_REG	; Bank=1
	bcf	OPTION_REG,7	; Enable weak pull-up
	BANKSEL	WPUA		; Bank=4
	movlw	B'00111000'	; Weak Pull-up for RA 3,4 and 5
	movwf	WPUA		;  
;
	clrf	BSR		; Bank=0
	InitP			; Initialize ports
	endm
;
InitP	macro			; Initialize ports
	movlw	B'11111110'	; Outputs H excluding DHT11
	movwf	PORTA
	endm
;		
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 	I2C Macros for general purpose		;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;		
; *** for I2C-Master protocol ***
; Sending data to I2C slave
I2Csnd	macro	slave,dataa,datalen
	movlw	slave
	movwf	I2Cadr
	movlw	dataa
	movwf	FSR0L
	movlw	datalen
	movwf	DataLen
	call	I2Csndr
	endm	
;
; *** Receiving data from I2C slave ***
I2Crcv	macro	slave,dataa,datalen
	movlw	slave
	movwf	I2Cadr
	movlw	dataa
	movwf	FSR0L
	movlw	datalen
	movwf	DataLen
	call	I2Crcvr
	endm	
;
; *** I2C start signal ***
I2Cstat macro
	call	I2Cstar
	endm
;
; *** I2C stop signal ***
I2Cstop	macro
	call	I2Cstpr
	endm
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 	I2C Macros for New_LiquidCrystal_I2C	;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ***** for New LiquidCrystal-I2C *****
; *** Start I2C, send LCD adr, and get Ack, without stoP ***
LCDsA	macro
	call	lSndAr		; I2C start and send it
	endm
;
;*** Start, I2C,send LCD adr, and send Literal and stoP ***
LCDl	macro	lcdLit
	movlw	lcdLit
	call	lSndALr
	endm
;
; *** Set cursor (Col, Row) ***
; Remarks: use Decimal(D'n') when value n is 10 or over
LCDsetC	macro	Col,Row
 	if	Row==0
	movlw	H'80'+Col
 	endif
 	if 	Row==1
	movlw	H'C0'+Col
 	endif
 	if 	Row==2
	movlw	H'94'+Col
 	endif
 	if 	Row==3
	movlw	H'D4'+Col
	endif
 	if 	Row>3
	* row error *
	endif
	call	lSetCsr
	endm
;
; *** lcd.write a char ***
LCDw	macro	lcdChr
	movlw	lcdChr
	call	lSetChr
	endm
;
; *** lcd.write a byte specified ***
LCDwb	macro	lcdBs
	movf	lcdBs,W
	call	lSetChr
	endm
;
; *** lcd.clear() ***
LCDclr 	macro
	call	lClr
	endm
;	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	Time cosuming macros			;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Mic	macro			;Consume 1 μS only
	goto	$+1
	goto	$+1
	endm
;
Mic2	macro	mic2p		;Consume 2 μS x n
	movlw	mic2p
	call	Mic2r
	endm
;
Mic2p5	macro 	mic25p		; Consume 2.5μS x n
	movlw	mic25p
	call	Mic25r
	endm
;
Mic5	macro	mic5p		; Consume 5μS x n
	movlw	mic5p
	call	Mic25r
	movlw	mic5p
	call	Mic25r
	endm
;
Mic50	macro	mic50p		; Consume 50μS x n
	movlw	mic50p
	call	Mic50r
	endm
;
Milli	macro	millip		; Consume mS x n
	movlw	millip
	call 	Millir
	endm
;
Mil100	macro	mil100p		; Consume 100 mS x n
	movlw	mil100p
	call 	Mil100r
	endm
; 
Secs	macro	secsp		; Consume Second x n
	movlw	secsp
	call	Secsr
	endm
;
Mins	macro	minsp		; Consume Minute x n
	movlw	minsp
	call	Minsr
	endm
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	Logic macros				;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	Comparison macros		;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	Compare A w/ B and branch to Smaller, Equal, or Larger(next statm't line) 
CabSEL	macro	Aadr,Badr,Smladr,Eqladr
	movf	Badr,W		; W=B
	subwf	Aadr,W		; W=A-B
	btfss	STATUS,C	; A≧B? Yes, skip next
	goto	Smladr		; 	If A<B goto Smaladr
	btfsc	STATUS,Z	; A=B? No skip next
	goto	Eqladr		;	If A=B goto Eqladr
;				; 	If A>B then next (here)
	endm
;
;	Compare A w/ B and branch to Smaller or Others (Equal or Larger) 
CabSO	macro	Aadr,Badr,Smladr
	movf	Badr,W		; W=B
	subwf	Aadr,W		; W=A-B
	btfss	STATUS,C	; A≧B? Yes, skip next
	goto	Smladr		; 	If A<B goto Smaladr
;				; 	If A≧B then next (here)
	endm
;
;	Compare A w/ B and branch to Equal, or Other(next statm't line) 
CabEO	macro	Aadr,Badr,Eqladr
	movf	Badr,W		; W=B
	subwf	Aadr,W		; W=A-B
	btfsc	STATUS,Z	; A=B? 
	goto	Eqladr		;	If A=B goto Eqljmp
;				; 	else next (here)
	endm
;
;	Compare A w/ literal and branch to Smaller, Equal, or Larger(next statm't) 
CalSEL	macro	Aadr,Blit,Smladr,Eqladr
	movlw	Blit		; W=B
	subwf	Aadr,W		; W=A-B
	btfss	STATUS,C	; A≧B? Yes, skip next
	goto	Smladr		; 	If A<B goto Smaladr
	btfsc	STATUS,Z	; A=B? No skip next
	goto	Eqladr		;	If A=B goto Eqladr
;				; 	If A>B then next (here)
	endm
;
;	Compare A w/ literal and branch to Smaller, or Others (Equal or Larger) 
CalSO	macro	Aadr,Blit,Smladr
	movlw	Blit		; W=B
	subwf	Aadr,W		; W=A-B
	btfss	STATUS,C	; A≧B? Yes, skip next
	goto	Smladr		; 	If A<B goto Smaladr
;				; 	If A≧B then next (here)
	endm
;
;	Compare A w/ literal and branch to Equal, or Others 
CalEO	macro	Aadr,Blit,Eqladr
	movlw	Blit		; W=B
	subwf	Aadr,W		; W=A-B
	btfsc	STATUS,Z	; A=B? No skip next
	goto	Eqladr		;	If A=B goto Eqladr
;				; 	else next (here)
	endm
;
;	Compare A w/ literal and branch to Large, or Others
CalLO	macro	Aadr,Blit,Ladr
	movlw	Blit		; W=B
	subwf	Aadr,W		; W=A-B
	btfss	STATUS,C	; A≧B? Yes, skip next
	goto	$+3		; 	If A<B goto Others
	btfss	STATUS,Z	; A=B? Yes skip next
	goto	Ladr		;	If A>B goto Laddr
;				; 	If A≦B then next (here)
	endm
;
;	Compare A with Literal and branch to Un-equal, or Others
CalUO	macro	Aadr,Blit,Uneqladr
	movlw	Blit		; W=B literal
	subwf	Aadr,W		; W=A-B	
	btfss	STATUS,Z	; A=B?
	goto	Uneqladr	; No, goto unequal
;				;	If yes then next
	endm
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 	Files and Equations					;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	Files				;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	cblock	H'20'
; For Variables to be shown
	Moji1			; RTC Mode char byte
	Moji2			; Show =
	Dig10			; Decimal value 10
	Dig1			; Decimal value 1
;
; For RTC support
	ModeN	; Mode to point BCD mem addr of RTC
	ModeChr	; Character to show mode
	RvMax	; Max number of RTC data in ModeN
	RvMin	; Minimum num of RTC data in ModeN
	Byteh	; Work area as high byte of a word
	Bytel	; Work area as low byte of a word
	RTCmem	; RTC memory address
	BCDsec	; RTC memory 0 = Second BCD	00-59
	BCDmin	; RTC memory 1 = Min BCD	00-59
	BCDhr	; RTC memory 2 = Hour BCD	00-23
	BCDdow	; RTC memory 3 = Day of Week 	01-07
	BCDday	; RTC memory 4 = Day BCD	01-31
	BCDmon	; RTC memory 5 = Month BCD 	01-12
	BCDyr	; RTC memory 6 = Year yy BCD 	00-99
;
; For LCD support
	Abyte			; LCD I2C addr with R/W bit
	Dbyte			; Data byte to save Sbyte
	Ebyte			; The same purpose as Dbyte
	Wbyte			; Working byte
;
; For I2C protocols
	I2Cadr			; Destinated slave I2C address
	DataLen			; Number of bytes to be sent/received
;
; For DHT11 input data area
	rhH			; Relative humidity high byte
	rhL			; Relative humidity low byte
	tcH			; Temp-C high byte, also binH (B2D work)
	tcL			; Temp-C low byte, also binL (B2D work)
	chkSum			; Checksum
;	
;For DHT11 work area
	Sbyte			; Byte sent/received
	Bytectr			; Byte coounter of reading data
	Bitctr			; Bit coounter of reading data
;
; Areas for time consuming subroutines
 	Mic25c
	Mic50c
	Millic
	Mil100c
	Secsc
	Minsc
;
	endc
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 	Equations			;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 	For PORTA		;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;DHT11	equ	0		; PORTdht DHT111 one wire signal
;Cl	equ	1		; PORTI2C SCL
;Dl	equ	2		; PORTI2C SDA
;swMode	equ	3		; PORTsw Mode Switch
;swTime	equ	4		; PORTsw Time switch
;swSet	equ	5		; PORTsw Set switch
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ***	Logical PORTdht		; Change this when port changed
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PORTdht	equ	PORTA
DHT11	equ	0		; DHT11 one-wire signal
LATdht	equ	LATA		; Latch for dht port
TRISdht	equ	TRISA		; TRIS for dht
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ***	Logical PORTI2C		; Change this when port changed
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PORTI2C equ	PORTA		; 
Dl	equ	2		; I2C Data line = SDA
Cl	equ	1		; I2C Clock line = SCL
LATI2C	equ	LATA		; LATch for I2C port
TRISI2C equ	TRISA		; TRIS reg for I2C
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ***	Logical PORTsw		; Change this when port changed
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PORTsw	equ	PORTA
swMode	equ	3		; Mode switch input ulled-up
swTime	equ	4		; Time switch input pulled-up
swSet	equ	5		; Set switch input pulled-up
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	Values & Equations		;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; *** for RTC	***
RTCi2cA equ	H'68'		; RTC I2C address (for Arduino)
rtcAw	equ	RTCi2cA*2	; RTC I2C address<<1 and Write
rtcAr	equ	RTCi2cA*2+H'01'	; RTC I2C address<<1 and Read
DS3231	equ	rtcAw		; RTC DS3231 address (to write)
;
RTCdata equ	BCDsec		; RTC memory data top
ModeMax	equ	6		; RTC data pointer ModeN max
ModeMin	equ	0		; RTC data pointer ModeN minimum
;
; Max and Minimum values for RTC memory
secMax	equ	H'59'
secMin	equ	0
minMax	equ	H'59'
minMin	equ	0
hrMax	equ	H'23'
hrMin	equ	0
dowMax	equ	H'07'
dowMin	equ	H'01'
dayMax	equ	H'31'
dayMin	equ	H'01'
monMax	equ	H'12'
monMin	equ	H'01'
Modeyr	equ	6
yrMax	equ	H'99'
yrMin	equ	0
;
;Characters to show Mode of RTC access
ChMY	equ	A'Y'
ChMEq	equ	A'='
ChMM	equ	A'M'
ChMd	equ	A'D'
ChMw	equ	A'W'
ChMh	equ	A'h'
ChMm	equ	A'm'
ChMS 	equ	A'S'
; *** for LCD	***
LCDi2cA	equ	H'27'		; LCD I2C address (for Arduino)
lcdAw	equ	LCDi2cA*2	; LCD I2C address<<1 and Write
lcdAr	equ	LCDi2cA*2+H'01' ; LCD I2C address<<1 and Read
LCD2004	equ	lcdAw		; LCD LCD2004 address ( to write)
;
; *** for DHT	***
;address equations
binH	equ	tcH
binL	equ	tcL
;
; *** for I2C ***
Clkt	equ	1	; Clock-time/4 multiplier of 2.5μS
Clkq	equ	1	; Quick time within clock  2μS
;
	page
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	Initializing						;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	org	0
	goto	Startp		; Go to start entry
	org	4		; This is Interrupt entry
	retfie	
;
Startp	DEVset			; Define ports
	clrf	FSR0H		; Clear FSR0H forever
	clrf	FSR1H		; Clear FSR1H forever
;
	Milli	D'50'		; Wait devices stabilized
	call	LCDinir	 	; Set-up LCD
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	Main program loop					;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Mainp	call	RTCrdr		; Read clock
	call	DspTime		; Display time
;
	call	DHTrd		; Read DHT11
	call	DspTr		; Display temperature celsium
	call	DspHr		; Disuplay relative humidity
	Secs	1		; for about 1 second
;
	btfss	PORTsw,swSet	; Set switch ?
	call	RTCupdr
	goto	Mainp		; Contilue infinite loop
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	LCDini= LCD initializing routine			;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LCDinir	equ	$
	LCDsA			; Send LCD addr
	I2Cstop
;
	LCDl	H'00'		; Start,send adr & 0x00, and Stop
	Mil100	1
;
	LCDl	H'34'
	LCDl	H'30'
	Milli	5
;
	LCDl	H'34'
	LCDl	H'30'
	Mic50	4
;
	LCDl	H'34'
	LCDl	H'30'
	Mic50	4
;
	LCDl	H'24'
	LCDl	H'20'
	Mic50	4
;
	LCDl	H'24'
	LCDl	H'20'
	LCDl	H'84'
	LCDl	H'80'
	Mic50	4
;
	LCDl	H'04'
	LCDl	H'00'
	LCDl	H'C4'
	LCDl	H'C0'
	Mic50	3
;
	LCDl	H'04'
	LCDl	H'00'
	LCDl	H'14'
	LCDl	H'10'
	Milli	2
;
	LCDl	H'04'
	LCDl	H'00'
	LCDl	H'64'
	LCDl	H'60'
	Mic50	3
;
	LCDl	H'08'		; backlight on
	Milli	1
	return
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	RTC reading routine	;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RTCrdr	clrf	RTCmem		; set RTC memory addr 0
	I2Csnd DS3231,RTCmem,1 	; send it to DS3231
	Milli	1		; wait a little (maybe unneeded)
	I2Crcv DS3231,RTCdata,7	; receive 7 byte data from DS3231
	return
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	Display-Time routine					;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DspTime equ	$
; Display year
	LCDsetC	0,0		; Set cursor to top
	LCDw	A'2'
	LCDw	A'0'
;
	movf	BCDyr,W		; Get RTC format year
	movwf	Dig1		; Set it to Dig1
	movlw	H'0F'		; Remove upper nibble
	andwf	Dig1,F		;  by AND
	swapf	BCDyr,W		; Get RTC year nibble-swapped
	movwf	Dig10		; Set it to Dig10
	movlw	H'0F'		; Remove upper nibble
	andwf	Dig10,F		; by AND
	call	D2Cr		; convert to characters
	LCDwb	Dig10
	LCDwb	Dig1
	LCDw	A'-'
;	
; Display month
	movf	BCDmon,W	; Same logic for month, as above
	movwf	Dig1
	movlw	H'0F'
	andwf	Dig1,F
	swapf	BCDmon,W
	movwf	Dig10
	movlw	H'0F'
	andwf	Dig10,F
	call	D2Cr		; convert to characters
	LCDwb	Dig10
	LCDwb	Dig1
	LCDw	A'-'	
;
; Display day
	movf	BCDday,W	; Same logic for day, as above
	movwf	Dig1
	movlw	H'0F'
	andwf	Dig1,F
	swapf	BCDday,W
	movwf	Dig10
	movlw	H'0F'
	andwf	Dig10,F
	call	D2Cr		; convert to characters
	LCDwb	Dig10
	LCDwb	Dig1
	LCDw	A' '
;
; Display hour
	movf	BCDhr,W		; Same logic for hour, as above
	movwf	Dig1
	movlw	H'0F'
	andwf	Dig1,F
	swapf	BCDhr,W
	movwf	Dig10
	movlw	H'0F'
	andwf	Dig10,F
	call	D2Cr		; convert to characters
	LCDwb	Dig10
	LCDwb	Dig1
	LCDw	A':'
;
; Display minute
	movf	BCDmin,W	; Same logic for minute, as above
	movwf	Dig1
	movlw	H'0F'
	andwf	Dig1,F
	swapf	BCDmin,W
	movwf	Dig10
	movlw	H'0F'
	andwf	Dig10,F
	call	D2Cr		; convert to characters
	LCDwb	Dig10
	LCDwb	Dig1
	LCDw	A':'
;
; Display second
	movf	BCDsec,W	; Same logic for second, as above
	movwf	Dig1
	movlw	H'0F'
	andwf	Dig1,F
	swapf	BCDsec,W
	movwf	Dig10
	movlw	H'0F'
	andwf	Dig10,F
	call	D2Cr		; convert to characters
	LCDwb	Dig10
	LCDwb	Dig1
	return
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	RTC updating routine					;
;		Display value for current ModeN			;
;		If swMode pushed, display next unit to update	;
;		If swTime pushed, increase value and display it	;
;		If swSet pushed,  update RTC (RTCwtr)		;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RTCupdr	btfss	PORTsw,swSet	; swSet still on?
	goto	$-1		; then wait for off
 	movlw 	Modeyr		; set initial mode year
	movwf	ModeN
;
RTCudm	movf	ModeN,W		; Large loop on ModeN
	brw
	goto	Mdsecr		; case ModeN=0 
	goto	Mdminr		; case ModeN=1 
	goto	Mdhrr		; case ModeN=2 
	goto	Mddowr		; case ModeN=3 
	goto 	Mddayr		; case ModeN=4 
	goto	Mdmonr		; case ModeN=5 
	goto	Mdyrr		; case ModeN=6 
;
; Macro used within  this section
Mdsetup macro	TMc,Rmax,Rmin
	movlw	TMc
	movwf	ModeChr
	movlw	Rmax
	movwf	RvMax
	movlw	Rmin
	movwf	RvMin
	goto	Mdnext
	endm
;
; set up environment for update and display
Mdsecr	Mdsetup	ChMS,secMax,secMin
Mdminr	Mdsetup	ChMm,minMax,minMin
Mdhrr	Mdsetup	ChMh,hrMax,hrMin
Mddowr	Mdsetup	ChMw,dowMax,dowMin
Mddayr	Mdsetup	ChMd,dayMax,dayMin
Mdmonr	Mdsetup	ChMM,monMax,monMin
Mdyrr	Mdsetup	ChMY,yrMax,yrMin
;
Mdnext 	call	Rdspr		; Display X=nn
	btfss	PORTsw,swTime	; Is Time pushed ?
	goto	Rinc		;  Yes, goto  Rinc
	btfss	PORTsw,swMode	; Is Mode pushed ?
	goto	Rnxtm		;  Yes, goto Rnxtm
	btfss	PORTsw,swSet	; Is Set pushed ?
	goto	Rwrite		;  Yes, goto Rwrite
	goto	Mdnext		; If no button, small loop for button
;
; 	Time pushed here
Rinc	call	Rincr		; Increase value in that mode
	Mil100	2		; 0.2 sec for increasing value
	goto	Mdnext		; return to loop for button
;
;	Mode pushed here
Rnxtm	btfss	PORTsw,swMode	; Mode button still pushed
	goto	$-1		; then wait for release
	CalEO	ModeN,0,Msmax	; If current ModeN=0 goto Msmax
	decf	ModeN,F		; set next mode
Rnxtme	goto	RTCudm		; and return to large loop for mode
;
Msmax	movlw	Modeyr		; get maximum mode
	movwf	ModeN		; and set it
	goto	RTCudm		; and return to large loop for mode
;	
Rwrite	btfss	PORTsw,swSet	; Set button still on?
	goto	$-1		; then wait for release
	call	RTCwtr		; and write to RTC
;
	LCDsetC	D'10',3		; Set cursor to Row3, Column 10
	LCDw	A' '		; Clear RTC setting message
	LCDw	A' '
	LCDw	A' '
	LCDw	A' '
	return			; exit from RTC updating routine
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	Display value pointed by ModeN	;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Rdspr	movf	ModeChr,W
	movwf	Moji1
	movlw	ChMEq
	movwf	Moji2
;
	movlw	BCDsec		; Point BCD area top
	movwf	FSR1L		; set it to FSR1L
	movf	ModeN,W		; Get Mode number
	addwf	FSR1L,F		; Point current BCD area	
	swapf	INDF1,W		; get high nibble to low in W
	movwf	Dig10		; set it to Dig10
	movlw	H'0F'		; Clear high nibble
	andwf	Dig10,F		;  of Dig10
	movf	INDF1,W		; get low nibble to low
	movwf	Dig1		; set it to Dig1
	movlw	H'0F'		; Clear high nibble
	andwf	Dig1		;  of Dig1
	call 	D2Cr		; Convert Decimals to Characters
;
	call	TMdspr
	return
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	Time Mode displaying routine		;
;	  	to update RTC			;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TMdspr	movlw	Moji1		; Point Byte0 address
	movwf	FSR0L		;  set it to use INDF0
	movlw	4		; Set four chars
	movwf	Bytectr		;  to Byte counter
;
	LCDsetC	D'10',3		; Set cursor to Row3, Column 10
;
TMdspl	movf	INDF0,W		; Get byte content
	movwf	Sbyte		; Set it to Sbyte
	LCDwb	Sbyte		;  and send it
	incf	FSR0L,F		; point next byte
	decfsz	Bytectr,F	; Check if all done
	goto	TMdspl		; No. loop
	return
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	Increase value pointed by ModeN	;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Rincr	movlw	BCDsec		; Point BCD area top
	movwf	FSR1L		; set it to pointer
	movf	ModeN,W		; get ModeN to add
	addwf	FSR1L,F		; Point current BCD area
;
	CabSO	INDF1,RvMax,Rigo ;If smaller than max, goto Rigo
	movf	RvMin,W		; Else, get minimum value
	movwf	INDF1		; and set it to INDF1 (BCD area)
	return
;
Rigo	movf	INDF1,W		; Get BCD value
	andlw	H'0F'		; clear left nibble
	movwf	Bytel		; and set to Bytel
	swapf	INDF1,W		; Get BCD nibbles swapped
	andlw	H'0F'		; clear left nibble
	movwf	Byteh		; and set to Byteh
;
	incf	Bytel,F		; Bytel+1
	CalSO	Bytel,D'10',Rie ; If Bytel≦9,goto Rie
	movlw	D'16'		; Else increase digit 10
	addwf	INDF1,F		;
	movlw	H'F0'		; and clear digit 1
	andwf	INDF1,F
	return

Rie	incf	INDF1,F		; Increase BCD value
	return			; and return
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	RTC writing routine	;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RTCwtr	clrf	RTCmem		; Set memory address zero
	I2Csnd	DS3231,RTCmem,8 ; Send data, includign memory addr in top
	return
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	DHT11 Reading routine				;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DHTrd	movlw	5		; Set # of DHT bytes 5
	movwf	Bytectr		;  to Bytectr
;
	movlw	rhH 		; Point top of DHT data input
	movwf	FSR0L		; Set it to INDF0
;
;	Start signal
	bcf	PORTdht,DHT11	; Set DHT-line L
;
	Milli	D'20'		; for 20mS
	bsf	PORTdht,DHT11	; Set DHT-line H
	Mic2	D'10'		; for 20 micro sec
;
;Header checking from DHT11
	BANKSEL	TRISdht		; Point tris bank
	bsf	TRISdht,DHT11	; Set TRIS-dht input
	BANKSEL	WPUA		; Point WPUA bank
	bsf	WPUA,DHT11	; Pull-up
	clrf	BSR		; Point bank 0
	Mic			; wait 1 micro sec for ready
;
	btfsc	PORTdht,DHT11	; Wait response 1/2 from DHT L
	goto	$-1		;  until L
	Mic5	D'13'		; Wait 65 within 80 micS
;
	btfss	PORTdht,DHT11	; Wait response 2/2 from DHT H
	goto	$-1		;  until H
	Mic5	D'13'		; Wait 65 within 80 micS
;
	btfsc	PORTdht,DHT11 	; Wait Start (L 50 mic sec) from DHT
	goto	$-1
	Mic5	D'6'		; When L, wait for 30 mic sec
;
; Read each byte from DHT11
DHbc	movlw	8		; Set # of bits = 8 in a byte of DHT
	movwf	Bitctr		;  to Bitctr
;
DHbcl	btfss	PORTdht,DHT11	; Wait Data signal H from DHT
	goto	$-1
	Mic50	1		; When H (1=70,0=27 micS), wait 50 micS
;	Trigger			; *** for timing-validation use only ***
;
	btfss	PORTdht,DHT11	; If still on then data is one, else zero
	goto	DHszero
;
DHsone	bsf	Sbyte,0		; Set 1 to Sbyte bit 0
	Mic5	D'4'		; Consume residual H 20 mic S of "1"
	goto	DHeck		; Goto Check end of one byte
;
DHszero	bcf	Sbyte,0		; Set zero to Sbyte bit 0
DHeck	decfsz	Bitctr,F 	; One byte (8 bits) end ?
	goto	DHnxtbi		; No, goto continue bit proc
;
DHbye	movf	Sbyte,W		; If one byte end, here
	movwf	INDF0		; Set data to DHTdata entry
	incf	FSR0L,F		; Point next entry of DHTdata
;
	decfsz	Bytectr,F 	; All bytes end?
	goto	DHbc		; If not end of bytes, next byte
	goto	DHcksr		; If end, checksum validation
;
DHnxtbi	rlf	Sbyte,F		; Bit continues. Shift left.
	goto	DHbcl		; and next bit checking
;
DHcksr	equ	$		; Checksum validation, if needed
;
;  End of receive
;
;Change data line mode to ooutput
;	Wait the last space ending
	Mic2	D'40'		; Residual 28 mic sec space + alpha 
;				; + 50 mic sec until pull-down end
	BANKSEL	LATdht		; Data line high when output mode
	bsf	LATdht,DHT11	; Lat-DHT11 high
	BANKSEL	TRISdht		; Select tris bank
	bcf	TRISdht,DHT11	; Set DHT11 output mode
	clrf	BSR		; Select bank 0
;
	Mic			; Wait one micro Sec
	bsf	PORTdht,DHT11	; Signal high
	return
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	Display temperature 					;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DspTr	equ	$
	LCDsetC	1,1
	LCDw	A'T'
	LCDw	A'e'
	LCDw	A'm'
	LCDw	A'p'
	LCDw	A'e'
	LCDw	A'r'
	LCDw	A'a'
	LCDw	A't'
	LCDw	A'u'
	LCDw	A'r'
	LCDw	A'e'
	LCDw	A' '
	LCDw	A'='
	LCDw	A' '
DspTgo	call	B2Dr		; Convert binary data to Decimals
	call	D2Cr		; Convert Decimals to Characters
 	LCDwb	Dig10
	LCDwb	Dig1
	LCDw	H'DF'		; degree
	LCDw	A'C'
	return
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	Disuplay relative humidity				;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DspHr	equ	$
	LCDsetC	1,2
	LCDw	A'R'
	LCDw	A'e'
	LCDw	A'l'
	LCDw	A'.'
	LCDw	A'H'
	LCDw	A'u'
	LCDw	A'm'
	LCDw	A'i'
	LCDw	A'd'
	LCDw	A'i'
	LCDw	A't'
	LCDw	A'y'
	LCDw	A' '
	LCDw	A'='
	LCDw	A' '
;
	movf	rhH,W
	movwf	binH
;
	call	B2Dr
	call	D2Cr
 	LCDwb	Dig10
	LCDwb	Dig1
	LCDw	A'%'
	return
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	Convert mesured Binary data to Decimal			;
;		from binH to Dig10+Dig1				;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
B2Dr	movf	binH,W		; Move binH
	movwf	Dig1		;  to Dig1
	clrf	Dig10		; Clear Dig10
;
B2Dlp	CalSO	Dig1,D'10',B2De
	movlw	D'10'
	subwf	Dig1,F
	incf	Dig10,F
	goto	B2Dlp
;	
B2De	return
;	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	Convert Decimals to Characters				;
;		changing Dec10-1 to characers			;
;		with clearing leading-zero			;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
D2Cr	movlw	H'30'		; Left nibble of numeric chars
	iorwf	Dig10,F		; Convert Dig10 to character
	iorwf	Dig1,F		; Convert Dig1 to character
;
	CalEO	Dig10,H'30',D2Czb ; Check leading 0 ?
	return			; No, return
;
D2Czb	movlw	A' '		; If zero, replace with blank
	movwf	Dig10		; 	at Dig10
	return
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	LCD slave-adr sending routine			;
;	   	with address in Sbyte, getting Ack.	;
;		(start-I2C included, without stop-I2C)	;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
lSndAr	equ	$
	I2Cstat			; start I2C
	movlw	lcdAw		; get LCD slave adr
	movwf	Sbyte		; set it to Sbyte
	call	Sendr		; and send it
	return
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	LCD I2C adr and a Literal sending routine	;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
lSndALr	movwf	Dbyte		; save literal to Dbyte
	call	lSndAr		; send adr
	movf	Dbyte,W		; get saved literal
	movwf	Sbyte
	call	Sendr		; send it
	I2Cstop			; stop I2C
	return
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	Set-cursor routine for LCD called by lcdSetC	;
;	If W=0xab, send 0xaC, 0xa8, 0xbC, and 0xb8	;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
lSetCsr	movwf	Ebyte		; save Value into Ebyte
	call	lSetCss 	; send left nibble
	swapf	Ebyte,W		; set W w/ swapping nibbles
	call 	lSetCss		; send right nibble
;
	Mic50	1
	return
;
; 	lSetCss subroutine to send a nibble
lSetCss movwf	Wbyte
	movlw	H'0F'
	iorwf	Wbyte,F		; set xF
	movlw	H'FC'
	andwf	Wbyte,W		; change it to xC
	movwf	Wbyte		; set it to Wbyte, too
	call 	lSndALr		; send S, adr, nibble+C, and P
;
	movlw	B'11111011'	; get complement of 0C-08
	andwf	Wbyte,W		; and change C to 8, ie x8
	call	lSndALr		; send S, adr, nibble+8, and P
	return
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	LCD send-char routine			;
;	If W=0xab, send 0xaD, 0xa9, 0xbD, and 0xb9	;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
lSetChr movwf	Ebyte		; save Value into Ebyte
;	sending left nibble
	call	lSetChs
;
;	sending right nibble
	swapf	Ebyte,W		; replace left nibble w/ right
	call	lSetChs
	return
;
; 	LCD subroutine to send a character  ;
lSetChs	movwf	Wbyte		; W to Wbyte
	movlw	H'0F'		; set right nibble bits of 
	iorwf	Wbyte,F		;   Wbyte on
	movlw	H'FD'		; leave left nibble + right D
	andwf	Wbyte,W		;  into W
	movwf	Wbyte		; save it into Wbyte
	call 	lSndALr		; send S, adr, nibble+D, and P
;
	movf	Wbyte,W
	movlw	B'11111011'	; target bit 2 to off (D to 9)
	andwf	Wbyte,W		; make left nibble + right 9
	call	lSndALr		; send S, adr, nibble+9, and P	
	return
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	LCD.clear routine				;
;	Send 0x8C, 0x88, 0x0C, and 0x08			;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
lClr	equ	$
	LCDw	H'8C'
	LCDw	H'88'
	LCDw	H'0C'
	LCDw	H'08'
	Mic50	1
	return
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	I2C Send byte-string				;
;         when called,					;
;		I2C device adr in I2Cadr byte		;
;		Data length in DataLen			;
;		Data Addr in FSR0L (INDF0)		;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
I2Csndr	movf	I2Cadr,W
	movwf	Sbyte
;	rlf	Sbyte,F	; shift leftt (if adr for Arduino)
	bcf	Sbyte,0	; indicate write
;
	I2Cstat		; Start I2C
	call	Sendr

Sdata	movf	INDF0,W	; Get a sending character
	movwf	Sbyte	; Set it to Sbyte
	call	Sendr	; Send it to the device
;
	incf	FSR0L,F	; point next char
	decfsz	DataLen,F ; Have all chars sent ?
	goto	Sdata		; No, loop
;
; Stop signal and return
	I2Cstop
	return	
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 	I2C Receive byte-string				;
;         when called,					;
;		I2C device adr in I2Cadr byte		;
;		Data length in DataLen			;
;		Data Addr in FSR0L (INDF0)		;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
I2Crcvr	equ	$
	I2Cstat		; Start I2C
	movf	I2Cadr,W ; Get I2C dev addr
	movwf	Sbyte	; Set it into Sbyte
;	rlf	Sbyte,F	; Shift left (if adr for Arduino)
	bsf	Sbyte,0	; indicate read
	call	Sendr	; Send slave addr to read
;
I2Crbyt	equ	$
	BANKSEL	TRISI2C	;
	bsf	TRISI2C,Dl ; Set Dline input mode
	clrf	BSR	; Point Bank 0
;
	movlw	8	; Bits in a reciving byte
	movwf	Bitctr	; into loop counter 
I2Crblp	Mic2p5	2*Clkt	; Timing before raising clock
	bsf	PORTI2C,Cl ; Set clock high
	Mic2p5	Clkt	; Timing after raising clock
;
	btfsc	PORTI2C,Dl
	goto	Rbith
;	goto	Rbitl
;
Rbitl	bcf	Sbyte,0	; Clear bit 0
	goto	Rbitnxt	; and goto next
;
Rbith	bsf	Sbyte,0	; Set bit 0
Rbitnxt	Mic2	Clkq	; Timing after checking
	bcf	PORTI2C,Cl ; Set clock low
;	Mic2p5	Clkt	; Timing after clock falling
	decfsz	Bitctr,F ; Still bits?
	goto	Rbcont	; Yes, continue
	goto	Rbend	; No, end of one byte
;
Rbcont	rlf	Sbyte,F	; Shit left
	goto	I2Crblp	; and goto loop
;
Rbend	movf	Sbyte,W	; Get received byte
	movwf	INDF0	; Set it to INDF0
	incf	FSR0L,F	; increase index
	decfsz	DataLen,F ; DataLen-1
	goto	Sackr	; Send Ack and continue
	goto	Snackr	; Send Nack and stop
;
;Set Dl output mode and send Ack to conitinue
Sackr	equ	$
	BANKSEL	LATI2C	; Data line high when output mode
	bsf	LATI2C,Dl ; Lat-Dl on
	BANKSEL	TRISI2C	; 
	bcf	TRISI2C,Dl ; Set Dl output mode
	clrf	BSR	; Point Bank 0
;
	bcf	PORTI2C,Dl ; Send Ack
	Mic2	Clkq	; Timing after clock falling
	bsf	PORTI2C,Cl ; Show Ack
	Mic2p5	2*Clkt
	bcf	PORTI2C,Cl ; Set clock low
	Mic2	Clkq
	bsf	PORTI2C,Dl ; Return Dline to high
	goto	I2Crbyt		; Next byte process
;
;Set Dl output mode and send Nack
Snackr	equ	$
	BANKSEL	LATI2C	; Data line high when output mode
	bsf	LATI2C,Dl ; Lat-Dl on
	BANKSEL	TRISI2C	; 
	bcf	TRISI2C,Dl ; Set Dl output mode
	clrf	BSR	; Point Bank 0
;
	bsf	PORTI2C,Dl ; Send Nack
	Mic2	Clkq	; Timing after clock falling
	bsf	PORTI2C,Cl ; Show Nack
	Mic2p5	2*Clkt
	bcf	PORTI2C,Cl	; Set clock low
	Mic2p5	Clkt
	I2Cstop		; and stop I2C once
	Mic5	D'6'	; for 30 micro sec
;
	I2Cstat		; then start I2C again
	movf	I2Cadr,W ; Get I2C dev addr
	movwf	Sbyte	; Set it into Sbyte
;	rlf	Sbyte,F	; Shift left (if adr for Arduino)
	bcf	Sbyte,0	; indicate write
	call	Sendr	; Send it
;
	I2Cstop
	return
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	I2C Start signal routine 			;
;	   	when dataline mode is output		;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
I2Cstar	bcf	PORTI2C,Dl ; set SDA low
	Mic2	Clkq
	bcf	PORTI2C,Cl ; set SCL low
	Mic2p5	2*Clkt
	return
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	I2C Stop signal routine 			;
;	   	when dataline mode is output		;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
I2Cstpr	bcf	PORTI2C,Cl ; set SCL low
	Mic2	Clkq
	bcf	PORTI2C,Dl ; set SDA low
	Mic2p5	2*Clkt
	bsf	PORTI2C,Cl ; Clock line rasing
	Mic2p5	Clkt
	bsf	PORTI2C,Dl ; Data line rasing
	Mic2	Clkq
	return	
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	I2C One-byte sending routine 			;
;	   	with data in Sbyte			;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Sendr	movlw	8	; Set bit count in a byte
	movwf	Bitctr	; into loop counter 
;
Sloop	btfsc	Sbyte,7	; Check top bit of Sbyte
	goto	Slpdh	; 
	bcf	PORTI2C,Dl ; If bit low then Data L
	goto	Slpnxt
Slpdh	bsf	PORTI2C,Dl ; If bit high then Data H
;
Slpnxt	Mic2	Clkq
	bsf	PORTI2C,Cl ; Show bit
	Mic2p5	2*Clkt
	bcf	PORTI2C,Cl ;
	Mic2	Clkq
;
	rlf	Sbyte,F	; Shift left 
	decfsz	Bitctr,F ; All bits done?
	goto	Sloop	; No, loop within a byte
;	
;Receive Ack 		
; set data line input mode
	BANKSEL	TRISI2C	; 
	bsf	TRISI2C,Dl ; Set Dline input mode
	clrf	BSR	; Point Bank 0
;
	Mic2	Clkq	; wait for Ack timing
	bsf	PORTI2C,Cl ; Clock H for Acq confirmation
	Mic2p5	2*Clkt	; 
	bcf	PORTI2C,Cl ; Cl L for Dl release by slave
	Mic2p5	2*Clkt
;
; Set Data line output
	BANKSEL	LATI2C	; Data line high when output mode
	bsf	LATI2C,Dl ; Lat-Dl on
	BANKSEL	TRISI2C	; 
	bcf	TRISI2C,Dl ; Set Dl output mode
	clrf	BSR	; Point Bank 0
	return
;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	Timing subrooutines for general purposes		;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 	Make 2.0 micro S x n	(Mic2)	;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Mic2r	movwf	Mic25c		; + Wset + call = 1 micro sec 
;
Mic2l	decfsz	Mic25c,F	; If exhausted, 1 micro S hereafter
	goto	Mic2li		; else go out (2nd time 1.75 mic sec)
	return		
;
Mic2li	goto	$+1		;            (2nd time 2.25 mic sec)
	nop			;	     (2nd time 2.5 mic sec)
	goto	Mic2l		; go back    (2nd time 3 micro sec)
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 	Make 2.5 micro S x n (Mic2p5)	;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Mic25r	movwf	Mic25c		; + Wset + call = 1 micro sec 
	nop			; 1.25 micro sec
;
Mic25l	nop			; 1.5 micro sec (2nd time 4 mic sec)
	decfsz	Mic25c,F	; If exhausted, 1 micro S hereafter
	goto	Mic25li		; else go out (2nd time 2.25 mic sec)
	return		
;
Mic25li	Mic			;	      (2nd time 3.25 mic sec)
	goto	Mic25l		; go back    (2nd time 3.75 micro sec)
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	50 Microseconds	x n	Mic50  	;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
Mic50r	movwf	Mic50c	 	; set how many 50 microsec (1 micro sec to here)
	nop			; 1.25 micro sec up to here
;
Mic50l	Mic2p5	D'19'		; + 47.5 = 48.75 mic sec (2nd time 98.75 mic sec)
	nop			; + 0.25 = 49 micro sec (2nd time 99 mic sec)
; 
	decfsz	Mic50c,F	; If exhausted then 1 mic S hereafter
	goto	Mic50li		; else go out (2nd time 49.75 mic sec)
	return
;
;
Mic50li	Mic			; 	  (2nd time 50.75 mic sec)
	goto	Mic50l		; go back (2nd time 51.25 mic sec)
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	Milliseconds x n	(Milli)	;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
Millir	movwf	Millic 		; set how many 1 mil sec (1 mic S up to here)
	nop			; 1.25 micro sec
;
Millil	Mic50	D'19'		; + 50 mic x 19 = 951.25 mic S (2nd, 1951.25) 
	Mic2p5	D'19'		; + 47.5 mic = 998.75 micro S  (2nd, 1998.75)
	nop			; +0.25 mic = 999 micro sec    (2nd, 1999)
;
	decfsz	Millic,F	; If  exhausted then 1 micro sec hereafter
	goto	Millili		; else go out (2nd, 999.75 mic S)
	return
;
Millili	Mic			; 		(2nd time 1000.75 mic S)
	goto	Millil		; go back (2nd time 1001.25 mic S)
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	100 Milliseconds x n	(Mil100);
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Mil100r	movwf	Mil100c		;set how many 100 ms(1 micr sec up to here)
	nop			; 1.25 micro sec
;
Milhl	Milli	D'99'		;+1ms x 99 = 99001.25 micS (2nd,199001.25mic)
	Mic50	D'19'		; + 950 mic = 99951.25 micS(2nd.199951.25mic)
	Mic2p5	D'19'		; + 47.5 mic = 99998.75micS(2nd,199998.75mic)
	nop			; + 0.25 mic = 99999 mic S (2nd,199999 micS)
;
	decfsz	Mil100c,F	; If exhausted then 1 micro sec hereafter
	goto	Milhli		; else go out (2nd time, 99999.75 mic S)
	return
;
Milhli	Mic			;  	    	(2nd time, 100000.75 mic S)
	goto	Milhl		; 		(2nd time, 100001.25 mic S)
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	Seconds x n	 (Secs)		;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
Secsr	movwf	Secsc 		; set how many sec ( 1 mic sec up to here)
	nop			; 1.25 micro sec
;
Secsl	Mil100	D'9'		; 
	Milli	D'99'		; + 999 milli sec = 999001.25 micro sec
;
	Mic50	D'19'		; + 950 mic = 999951.25 micro sec
	Mic2p5	D'19'		; + 47.5 mic = 999998.75 micro sec
	nop			; + 0.25 mic = 999999 micro sec
;
	decfsz	Secsc,F		; If exhausted then 1 micro sec hereafter
	goto	Secsli		; else, go out 
	return
;
Secsli	Mic
	goto	Secsl		; (Second time, Sec + 1.25 micro sec)
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	Minutes	x n	 (Mins)		;
;	 Overhead ignored, that is only	;
;	 751.25 Mic S even when 100 Min	;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Minsr	movwf	Minsc		;set how many minutes from parameter
;
Minsl	Secs	D'60'		; 1 Seconds x 60
	decfsz	Minsc,F
	goto	Minsl
	return
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	End of program						;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	end

 

数個のコンパイルエラーを直して試しに実行したら、なんと1回で素直に動いてしまったではありませんか!(びっくり)。何もエラーがない感じ。

まあ、動いているプログラムから作ったコピペが大部分ですからね。そういうわけで、この後で不要なマクロを外したり、Equなどの整頓をしようかと思ってましたが、初版のまま載せておきました。

タクトスイッチは次の写真で、左からMode, Time, Setです。Setを押せば、ModeとTimeのスイッチを使ってカレンダーと時刻の更新ができます。この機能は操作性もよく、気づく問題はありません。とりあえずLCDの4行目を更新専用に使っています。

f:id:a-tomi:20210104155741j:plain

ところで、PICは必ずしもMPLAB X IDEを使わなくともプログラムできます。

この例では単独のMPASMでアセンブリーしてHEXファイルを作り、PICkit2で書き込んでます。(最新のPICkit4で書き込む場合はMPLAB X IPEを使用。) 色々なトラブルにまきこまれないためには、アセンブラーならいまだにこのほうが簡単で単純だと思いますがどうでしょう。

ちなみに最後にアセンブリーリストをつけておきますね。プログラムや変数など、もっと整理して小さくできますが、このままでもプログラムメモリーは小さなPIC12F1822がもつ2048ワード中の856ワード(42%)、データメモリーは128バイト中の69バイト(54%)で収まっています。つまりI2Cセンサーがもっともっとつけられますね。なので、このままにしておきます。

MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE  1


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00001 ;U210103-RTC-DHT11-LCD-V00.asm                                  As of Jan. 3, 2021
                      00002 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00003 ;                                                                               ;
                      00004 ;       Time, Temperature, and Humidity Display with PIC12F1822 V00             ;
                      00005 ;               (C)2014-2021 Akira Tominaga, All rights reserved.               ;
                      00006 ;                                                                               ;
                      00007 ;         Major revisions                                                       ;
                      00008 ;               V00 Initial version             December 31, 2020               ;
                      00009 ;                                                                               ;
                      00010 ;         Function                                                              ;
                      00011 ;               1.Show temperature, & humidity on LCD                           ;
                      00012 ;                                                                               ;
                      00013 ;         Input/output                                                          ;
                      00014 ;               RA0 DHT11 Temp&Humidity-sensor w/ 1-wire protocol               ;
                      00015 ;               RA1 SDA for I2C-RTC  output  usually and input occasionally     ;
                      00016 ;               RA2 SCL for I2C-RTC  output                                     ;
                      00017 ;               RA3 Mode switch (swMode) input pulled-up                        ;
                      00018 ;               RA1 Time switch (swTime) input pulled-up                        ;
                      00019 ;               RA0 Set switch  (swSet)  input pulled-up                        ;
                      00020 ;                                                                               ;
                      00021 ;                                                                               ;
                      00022 ;         Remarks                                                               ;
                      00023 ;               1. Clock = HFINTOSC (   16MHz)                                  ;
                      00024 ;                       Hence 1 step = 0.25 micro seconds                       ;
                      00025 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00026 ;
                      00027         list            p=12F1822      ; list directive to define processor
                      00028         #include        "p12F1822.inc" ; p12F1822 specific variables
                      00001         LIST
                      00002 
                      00003 ;==========================================================================
                      00004 ;  MPASM PIC12F1822 processor include
                      00005 ; 
                      00006 ;  (c) Copyright 1999-2013 Microchip Technology, All rights reserved
                      00007 ;==========================================================================
                      00008 
                      01035         LIST
8007   09A4           00029     __CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_
                            OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
8008   1CFF           00030     __CONFIG _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_LO & _LVP_OFF
                      00031 ;       page
                      00032 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00033 ;       Macro definitions                                       ;
                      00034 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00035 ;
                      00036 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00037 ;       Device dependent Macros                 ;
                      00038 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00039 ;
                      00040 DEVset  macro   
                      00041         BANKSEL OSCCON          ; Bank=1
                      00042         movlw   B'01111010'     ; 16MHz and internal oscillator
                      00043         movwf   OSCCON
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE  2


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00044 ;
                      00045 ;       BANKSEL INTCON          ; Interrupt Con (in all banks hence comment)
                      00046         clrf    INTCON          ; Disable all interrupts
                      00047 ;
                      00048 ; PORTA initialization
                      00049         BANKSEL PORTA           ; Bank=0
                      00050         clrf    PORTA
                      00051 ;       BANKSEL LATA            ; Bank=2
                      00052 ;       clrf    LATA
                      00053         BANKSEL ANSELA          ; Bank=3
                      00054         clrf    ANSELA          ; No use of ADC
                      00055         BANKSEL ADCON0          ; Bank=1
                      00056         clrf    ADCON0          ; No use of ADC
                      00057 ;
                      00058         BANKSEL TRISA           ; Bank=1
                      00059         movlw   B'11111000'     ; RA0,1 and 2 are output
                      00060         movwf   TRISA
                      00061 ;
                      00062         BANKSEL OPTION_REG      ; Bank=1
                      00063         bcf     OPTION_REG,7    ; Enable weak pull-up
                      00064         BANKSEL WPUA            ; Bank=4
                      00065         movlw   B'00111000'     ; Weak Pull-up for RA 3,4 and 5
                      00066         movwf   WPUA            ;  
                      00067 ;
                      00068         clrf    BSR             ; Bank=0
                      00069         InitP                   ; Initialize ports
                      00070         endm
                      00071 ;
                      00072 InitP   macro                   ; Initialize ports
                      00073         movlw   B'11111110'     ; Outputs H excluding DHT11
                      00074         movwf   PORTA
                      00075         endm
                      00076 ;               
                      00077 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00078 ;       I2C Macros for general purpose          ;
                      00079 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;               
                      00080 ; *** for I2C-Master protocol ***
                      00081 ; Sending data to I2C slave
                      00082 I2Csnd  macro   slave,dataa,datalen
                      00083         movlw   slave
                      00084         movwf   I2Cadr
                      00085         movlw   dataa
                      00086         movwf   FSR0L
                      00087         movlw   datalen
                      00088         movwf   DataLen
                      00089         call    I2Csndr
                      00090         endm    
                      00091 ;
                      00092 ; *** Receiving data from I2C slave ***
                      00093 I2Crcv  macro   slave,dataa,datalen
                      00094         movlw   slave
                      00095         movwf   I2Cadr
                      00096         movlw   dataa
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE  3


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00097         movwf   FSR0L
                      00098         movlw   datalen
                      00099         movwf   DataLen
                      00100         call    I2Crcvr
                      00101         endm    
                      00102 ;
                      00103 ; *** I2C start signal ***
                      00104 I2Cstat macro
                      00105         call    I2Cstar
                      00106         endm
                      00107 ;
                      00108 ; *** I2C stop signal ***
                      00109 I2Cstop macro
                      00110         call    I2Cstpr
                      00111         endm
                      00112 ;
                      00113 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00114 ;       I2C Macros for New_LiquidCrystal_I2C    ;
                      00115 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00116 ; ***** for New LiquidCrystal-I2C *****
                      00117 ; *** Start I2C, send LCD adr, and get Ack, without stoP ***
                      00118 LCDsA   macro
                      00119         call    lSndAr          ; I2C start and send it
                      00120         endm
                      00121 ;
                      00122 ;*** Start, I2C,send LCD adr, and send Literal and stoP ***
                      00123 LCDl    macro   lcdLit
                      00124         movlw   lcdLit
                      00125         call    lSndALr
                      00126         endm
                      00127 ;
                      00128 ; *** Set cursor (Col, Row) ***
                      00129 ; Remarks: use Decimal(D'n') when value n is 10 or over
                      00130 LCDsetC macro   Col,Row
                      00131         if      Row==0
                      00132         movlw   H'80'+Col
                      00133         endif
                      00134         if      Row==1
                      00135         movlw   H'C0'+Col
                      00136         endif
                      00137         if      Row==2
                      00138         movlw   H'94'+Col
                      00139         endif
                      00140         if      Row==3
                      00141         movlw   H'D4'+Col
                      00142         endif
                      00143         if      Row>3
                      00144         * row error *
                      00145         endif
                      00146         call    lSetCsr
                      00147         endm
                      00148 ;
                      00149 ; *** lcd.write a char ***
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE  4


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00150 LCDw    macro   lcdChr
                      00151         movlw   lcdChr
                      00152         call    lSetChr
                      00153         endm
                      00154 ;
                      00155 ; *** lcd.write a byte specified ***
                      00156 LCDwb   macro   lcdBs
                      00157         movf    lcdBs,W
                      00158         call    lSetChr
                      00159         endm
                      00160 ;
                      00161 ; *** lcd.clear() ***
                      00162 LCDclr  macro
                      00163         call    lClr
                      00164         endm
                      00165 ;       
                      00166 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00167 ;       Time cosuming macros                    ;
                      00168 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00169 Mic     macro                   ;Consume 1 μS only
                      00170         goto    $+1
                      00171         goto    $+1
                      00172         endm
                      00173 ;
                      00174 Mic2    macro   mic2p           ;Consume 2 μS x n
                      00175         movlw   mic2p
                      00176         call    Mic2r
                      00177         endm
                      00178 ;
                      00179 Mic2p5  macro   mic25p          ; Consume 2.5μS x n
                      00180         movlw   mic25p
                      00181         call    Mic25r
                      00182         endm
                      00183 ;
                      00184 Mic5    macro   mic5p           ; Consume 5μS x n
                      00185         movlw   mic5p
                      00186         call    Mic25r
                      00187         movlw   mic5p
                      00188         call    Mic25r
                      00189         endm
                      00190 ;
                      00191 Mic50   macro   mic50p          ; Consume 50μS x n
                      00192         movlw   mic50p
                      00193         call    Mic50r
                      00194         endm
                      00195 ;
                      00196 Milli   macro   millip          ; Consume mS x n
                      00197         movlw   millip
                      00198         call    Millir
                      00199         endm
                      00200 ;
                      00201 Mil100  macro   mil100p         ; Consume 100 mS x n
                      00202         movlw   mil100p
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE  5


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00203         call    Mil100r
                      00204         endm
                      00205 ; 
                      00206 Secs    macro   secsp           ; Consume Second x n
                      00207         movlw   secsp
                      00208         call    Secsr
                      00209         endm
                      00210 ;
                      00211 Mins    macro   minsp           ; Consume Minute x n
                      00212         movlw   minsp
                      00213         call    Minsr
                      00214         endm
                      00215 ;
                      00216 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00217 ;       Logic macros                            ;
                      00218 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00219 ;
                      00220 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00221 ;       Comparison macros               ;
                      00222 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00223 ;       Compare A w/ B and branch to Smaller, Equal, or Larger(next statm't line) 
                      00224 CabSEL  macro   Aadr,Badr,Smladr,Eqladr
                      00225         movf    Badr,W          ; W=B
                      00226         subwf   Aadr,W          ; W=A-B
                      00227         btfss   STATUS,C        ; A≧B? Yes, skip next
                      00228         goto    Smladr          ;       If A<B goto Smaladr
                      00229         btfsc   STATUS,Z        ; A=B? No skip next
                      00230         goto    Eqladr          ;       If A=B goto Eqladr
                      00231 ;                               ;       If A>B then next (here)
                      00232         endm
                      00233 ;
                      00234 ;       Compare A w/ B and branch to Smaller or Others (Equal or Larger) 
                      00235 CabSO   macro   Aadr,Badr,Smladr
                      00236         movf    Badr,W          ; W=B
                      00237         subwf   Aadr,W          ; W=A-B
                      00238         btfss   STATUS,C        ; A≧B? Yes, skip next
                      00239         goto    Smladr          ;       If A<B goto Smaladr
                      00240 ;                               ;       If A≧B then next (here)
                      00241         endm
                      00242 ;
                      00243 ;       Compare A w/ B and branch to Equal, or Other(next statm't line) 
                      00244 CabEO   macro   Aadr,Badr,Eqladr
                      00245         movf    Badr,W          ; W=B
                      00246         subwf   Aadr,W          ; W=A-B
                      00247         btfsc   STATUS,Z        ; A=B? 
                      00248         goto    Eqladr          ;       If A=B goto Eqljmp
                      00249 ;                               ;       else next (here)
                      00250         endm
                      00251 ;
                      00252 ;       Compare A w/ literal and branch to Smaller, Equal, or Larger(next statm't) 
                      00253 CalSEL  macro   Aadr,Blit,Smladr,Eqladr
                      00254         movlw   Blit            ; W=B
                      00255         subwf   Aadr,W          ; W=A-B
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE  6


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00256         btfss   STATUS,C        ; A≧B? Yes, skip next
                      00257         goto    Smladr          ;       If A<B goto Smaladr
                      00258         btfsc   STATUS,Z        ; A=B? No skip next
                      00259         goto    Eqladr          ;       If A=B goto Eqladr
                      00260 ;                               ;       If A>B then next (here)
                      00261         endm
                      00262 ;
                      00263 ;       Compare A w/ literal and branch to Smaller, or Others (Equal or Larger) 
                      00264 CalSO   macro   Aadr,Blit,Smladr
                      00265         movlw   Blit            ; W=B
                      00266         subwf   Aadr,W          ; W=A-B
                      00267         btfss   STATUS,C        ; A≧B? Yes, skip next
                      00268         goto    Smladr          ;       If A<B goto Smaladr
                      00269 ;                               ;       If A≧B then next (here)
                      00270         endm
                      00271 ;
                      00272 ;       Compare A w/ literal and branch to Equal, or Others 
                      00273 CalEO   macro   Aadr,Blit,Eqladr
                      00274         movlw   Blit            ; W=B
                      00275         subwf   Aadr,W          ; W=A-B
                      00276         btfsc   STATUS,Z        ; A=B? No skip next
                      00277         goto    Eqladr          ;       If A=B goto Eqladr
                      00278 ;                               ;       else next (here)
                      00279         endm
                      00280 ;
                      00281 ;       Compare A w/ literal and branch to Large, or Others
                      00282 CalLO   macro   Aadr,Blit,Ladr
                      00283         movlw   Blit            ; W=B
                      00284         subwf   Aadr,W          ; W=A-B
                      00285         btfss   STATUS,C        ; A≧B? Yes, skip next
                      00286         goto    $+3             ;       If A<B goto Others
                      00287         btfss   STATUS,Z        ; A=B? Yes skip next
                      00288         goto    Ladr            ;       If A>B goto Laddr
                      00289 ;                               ;       If A≦B then next (here)
                      00290         endm
                      00291 ;
                      00292 ;       Compare A with Literal and branch to Un-equal, or Others
                      00293 CalUO   macro   Aadr,Blit,Uneqladr
                      00294         movlw   Blit            ; W=B literal
                      00295         subwf   Aadr,W          ; W=A-B 
                      00296         btfss   STATUS,Z        ; A=B?
                      00297         goto    Uneqladr        ; No, goto unequal
                      00298 ;                               ;       If yes then next
                      00299         endm
                      00300 ;
                      00301 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00302 ;       Files and Equations                                     ;
                      00303 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00304 ;
                      00305 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00306 ;       Files                           ;
                      00307 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00308         cblock  H'20'
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE  7


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00309 ; For Variables to be shown
  00000020            00310         Moji1                   ; RTC Mode char byte
  00000021            00311         Moji2                   ; Show =
  00000022            00312         Dig10                   ; Decimal value 10
  00000023            00313         Dig1                    ; Decimal value 1
                      00314 ;
                      00315 ; For RTC support
  00000024            00316         ModeN   ; Mode to point BCD mem addr of RTC
  00000025            00317         ModeChr ; Character to show mode
  00000026            00318         RvMax   ; Max number of RTC data in ModeN
  00000027            00319         RvMin   ; Minimum num of RTC data in ModeN
  00000028            00320         Byteh   ; Work area as high byte of a word
  00000029            00321         Bytel   ; Work area as low byte of a word
  0000002A            00322         RTCmem  ; RTC memory address
  0000002B            00323         BCDsec  ; RTC memory 0 = Second BCD     00-59
  0000002C            00324         BCDmin  ; RTC memory 1 = Min BCD        00-59
  0000002D            00325         BCDhr   ; RTC memory 2 = Hour BCD       00-23
  0000002E            00326         BCDdow  ; RTC memory 3 = Day of Week    01-07
  0000002F            00327         BCDday  ; RTC memory 4 = Day BCD        01-31
  00000030            00328         BCDmon  ; RTC memory 5 = Month BCD      01-12
  00000031            00329         BCDyr   ; RTC memory 6 = Year yy BCD    00-99
                      00330 ;
                      00331 ; For LCD support
  00000032            00332         Abyte                   ; LCD I2C addr with R/W bit
  00000033            00333         Dbyte                   ; Data byte to save Sbyte
  00000034            00334         Ebyte                   ; The same purpose as Dbyte
  00000035            00335         Wbyte                   ; Working byte
                      00336 ;
                      00337 ; For I2C protocols
  00000036            00338         I2Cadr                  ; Destinated slave I2C address
  00000037            00339         DataLen                 ; Number of bytes to be sent/received
                      00340 ;
                      00341 ; For DHT11 input data area
  00000038            00342         rhH                     ; Relative humidity high byte
  00000039            00343         rhL                     ; Relative humidity low byte
  0000003A            00344         tcH                     ; Temp-C high byte, also binH (B2D work)
  0000003B            00345         tcL                     ; Temp-C low byte, also binL (B2D work)
  0000003C            00346         chkSum                  ; Checksum
                      00347 ;       
                      00348 ;For DHT11 work area
  0000003D            00349         Sbyte                   ; Byte sent/received
  0000003E            00350         Bytectr                 ; Byte coounter of reading data
  0000003F            00351         Bitctr                  ; Bit coounter of reading data
                      00352 ;
                      00353 ; Areas for time consuming subroutines
  00000040            00354         Mic25c
  00000041            00355         Mic50c
  00000042            00356         Millic
  00000043            00357         Mil100c
  00000044            00358         Secsc
  00000045            00359         Minsc
                      00360 ;
                      00361         endc
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE  8


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00362 ;
                      00363 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00364 ;       Equations                       ;
                      00365 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00366 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00367 ;       For PORTA               ;
                      00368 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00369 ;DHT11  equ     0               ; PORTdht DHT111 one wire signal
                      00370 ;Cl     equ     1               ; PORTI2C SCL
                      00371 ;Dl     equ     2               ; PORTI2C SDA
                      00372 ;swMode equ     3               ; PORTsw Mode Switch
                      00373 ;swTime equ     4               ; PORTsw Time switch
                      00374 ;swSet  equ     5               ; PORTsw Set switch
                      00375 ;
                      00376 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00377 ; ***   Logical PORTdht         ; Change this when port changed
                      00378 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  0000000C            00379 PORTdht equ     PORTA
  00000000            00380 DHT11   equ     0               ; DHT11 one-wire signal
  0000010C            00381 LATdht  equ     LATA            ; Latch for dht port
  0000008C            00382 TRISdht equ     TRISA           ; TRIS for dht
                      00383 ;
                      00384 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00385 ; ***   Logical PORTI2C         ; Change this when port changed
                      00386 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  0000000C            00387 PORTI2C equ     PORTA           ; 
  00000002            00388 Dl      equ     2               ; I2C Data line = SDA
  00000001            00389 Cl      equ     1               ; I2C Clock line = SCL
  0000010C            00390 LATI2C  equ     LATA            ; LATch for I2C port
  0000008C            00391 TRISI2C equ     TRISA           ; TRIS reg for I2C
                      00392 ;
                      00393 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00394 ; ***   Logical PORTsw          ; Change this when port changed
                      00395 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  0000000C            00396 PORTsw  equ     PORTA
  00000003            00397 swMode  equ     3               ; Mode switch input ulled-up
  00000004            00398 swTime  equ     4               ; Time switch input pulled-up
  00000005            00399 swSet   equ     5               ; Set switch input pulled-up
                      00400 ;
                      00401 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00402 ;       Values & Equations              ;
                      00403 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00404 ; *** for RTC   ***
  00000068            00405 RTCi2cA equ     H'68'           ; RTC I2C address (for Arduino)
  000000D0            00406 rtcAw   equ     RTCi2cA*2       ; RTC I2C address<<1 and Write
  000000D1            00407 rtcAr   equ     RTCi2cA*2+H'01' ; RTC I2C address<<1 and Read
  000000D0            00408 DS3231  equ     rtcAw           ; RTC DS3231 address (to write)
                      00409 ;
  0000002B            00410 RTCdata equ     BCDsec          ; RTC memory data top
  00000006            00411 ModeMax equ     6               ; RTC data pointer ModeN max
  00000000            00412 ModeMin equ     0               ; RTC data pointer ModeN minimum
                      00413 ;
                      00414 ; Max and Minimum values for RTC memory
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE  9


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

  00000059            00415 secMax  equ     H'59'
  00000000            00416 secMin  equ     0
  00000059            00417 minMax  equ     H'59'
  00000000            00418 minMin  equ     0
  00000023            00419 hrMax   equ     H'23'
  00000000            00420 hrMin   equ     0
  00000007            00421 dowMax  equ     H'07'
  00000001            00422 dowMin  equ     H'01'
  00000031            00423 dayMax  equ     H'31'
  00000001            00424 dayMin  equ     H'01'
  00000012            00425 monMax  equ     H'12'
  00000001            00426 monMin  equ     H'01'
  00000006            00427 Modeyr  equ     6
  00000099            00428 yrMax   equ     H'99'
  00000000            00429 yrMin   equ     0
                      00430 ;
                      00431 ;Characters to show Mode of RTC access
  00000059            00432 ChMY    equ     A'Y'
  0000003D            00433 ChMEq   equ     A'='
  0000004D            00434 ChMM    equ     A'M'
  00000044            00435 ChMd    equ     A'D'
  00000057            00436 ChMw    equ     A'W'
  00000068            00437 ChMh    equ     A'h'
  0000006D            00438 ChMm    equ     A'm'
  00000053            00439 ChMS    equ     A'S'
                      00440 ; *** for LCD   ***
  00000027            00441 LCDi2cA equ     H'27'           ; LCD I2C address (for Arduino)
  0000004E            00442 lcdAw   equ     LCDi2cA*2       ; LCD I2C address<<1 and Write
  0000004F            00443 lcdAr   equ     LCDi2cA*2+H'01' ; LCD I2C address<<1 and Read
  0000004E            00444 LCD2004 equ     lcdAw           ; LCD LCD2004 address ( to write)
                      00445 ;
                      00446 ; *** for DHT   ***
                      00447 ;address equations
  0000003A            00448 binH    equ     tcH
  0000003B            00449 binL    equ     tcL
                      00450 ;
                      00451 ; *** for I2C ***
  00000001            00452 Clkt    equ     1       ; Clock-time/4 multiplier of 2.5μS
  00000001            00453 Clkq    equ     1       ; Quick time within clock  2μS
                      00454 ;
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 10


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00455         page
                      00456 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00457 ;       Initializing                                            ;
                      00458 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0000                  00459         org     0
0000   2805           00460         goto    Startp          ; Go to start entry
0004                  00461         org     4               ; This is Interrupt entry
0004   0009           00462         retfie  
                      00463 ;
                      00464 Startp  DEVset                  ; Define ports
0005   0021               M         BANKSEL OSCCON          ; Bank=1
0006   307A               M         movlw   B'01111010'     ; 16MHz and internal oscillator
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
0007   0099               M         movwf   OSCCON
                          M ;
                          M ;       BANKSEL INTCON          ; Interrupt Con (in all banks hence comment)
0008   018B               M         clrf    INTCON          ; Disable all interrupts
                          M ;
                          M ; PORTA initialization
0009   0020               M         BANKSEL PORTA           ; Bank=0
000A   018C               M         clrf    PORTA
                          M ;       BANKSEL LATA            ; Bank=2
                          M ;       clrf    LATA
000B   0023               M         BANKSEL ANSELA          ; Bank=3
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
000C   018C               M         clrf    ANSELA          ; No use of ADC
000D   0021               M         BANKSEL ADCON0          ; Bank=1
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
000E   019D               M         clrf    ADCON0          ; No use of ADC
                          M ;
000F   0021               M         BANKSEL TRISA           ; Bank=1
0010   30F8               M         movlw   B'11111000'     ; RA0,1 and 2 are output
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
0011   008C               M         movwf   TRISA
                          M ;
0012   0021               M         BANKSEL OPTION_REG      ; Bank=1
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
0013   1395               M         bcf     OPTION_REG,7    ; Enable weak pull-up
0014   0024               M         BANKSEL WPUA            ; Bank=4
0015   3038               M         movlw   B'00111000'     ; Weak Pull-up for RA 3,4 and 5
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
0016   008C               M         movwf   WPUA            ;  
                          M ;
0017   0188               M         clrf    BSR             ; Bank=0
                          M         InitP                   ; Initialize ports
0018   30FE               M         movlw   B'11111110'     ; Outputs H excluding DHT11
0019   008C               M         movwf   PORTA
001A   0185           00465         clrf    FSR0H           ; Clear FSR0H forever
001B   0187           00466         clrf    FSR1H           ; Clear FSR1H forever
                      00467 ;
                      00468         Milli   D'50'           ; Wait devices stabilized
001C   3032               M         movlw   D'50'
001D   2326               M         call    Millir
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 11


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

001E   2029           00469         call    LCDinir         ; Set-up LCD
                      00470 ;
                      00471 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00472 ;       Main program loop                                       ;
                      00473 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
001F   2074           00474 Mainp   call    RTCrdr          ; Read clock
0020   2086           00475         call    DspTime         ; Display time
                      00476 ;
0021   218F           00477         call    DHTrd           ; Read DHT11
0022   21D6           00478         call    DspTr           ; Display temperature celsium
0023   21FF           00479         call    DspHr           ; Disuplay relative humidity
                      00480         Secs    1               ; for about 1 second
0024   3001               M         movlw   1
0025   2342               M         call    Secsr
                      00481 ;
0026   1E8C           00482         btfss   PORTsw,swSet    ; Set switch ?
0027   20E5           00483         call    RTCupdr
0028   281F           00484         goto    Mainp           ; Contilue infinite loop
                      00485 ;
                      00486 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00487 ;       LCDini= LCD initializing routine                        ;
                      00488 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  00000029            00489 LCDinir equ     $
                      00490         LCDsA                   ; Send LCD addr
0029   2241               M         call    lSndAr          ; I2C start and send it
                      00491         I2Cstop
002A   22DB               M         call    I2Cstpr
                      00492 ;
                      00493         LCDl    H'00'           ; Start,send adr & 0x00, and Stop
002B   3000               M         movlw   H'00'
002C   2246               M         call    lSndALr
                      00494         Mil100  1
002D   3001               M         movlw   1
002E   2333               M         call    Mil100r
                      00495 ;
                      00496         LCDl    H'34'
002F   3034               M         movlw   H'34'
0030   2246               M         call    lSndALr
                      00497         LCDl    H'30'
0031   3030               M         movlw   H'30'
0032   2246               M         call    lSndALr
                      00498         Milli   5
0033   3005               M         movlw   5
0034   2326               M         call    Millir
                      00499 ;
                      00500         LCDl    H'34'
0035   3034               M         movlw   H'34'
0036   2246               M         call    lSndALr
                      00501         LCDl    H'30'
0037   3030               M         movlw   H'30'
0038   2246               M         call    lSndALr
                      00502         Mic50   4
0039   3004               M         movlw   4
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 12


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

003A   231B               M         call    Mic50r
                      00503 ;
                      00504         LCDl    H'34'
003B   3034               M         movlw   H'34'
003C   2246               M         call    lSndALr
                      00505         LCDl    H'30'
003D   3030               M         movlw   H'30'
003E   2246               M         call    lSndALr
                      00506         Mic50   4
003F   3004               M         movlw   4
0040   231B               M         call    Mic50r
                      00507 ;
                      00508         LCDl    H'24'
0041   3024               M         movlw   H'24'
0042   2246               M         call    lSndALr
                      00509         LCDl    H'20'
0043   3020               M         movlw   H'20'
0044   2246               M         call    lSndALr
                      00510         Mic50   4
0045   3004               M         movlw   4
0046   231B               M         call    Mic50r
                      00511 ;
                      00512         LCDl    H'24'
0047   3024               M         movlw   H'24'
0048   2246               M         call    lSndALr
                      00513         LCDl    H'20'
0049   3020               M         movlw   H'20'
004A   2246               M         call    lSndALr
                      00514         LCDl    H'84'
004B   3084               M         movlw   H'84'
004C   2246               M         call    lSndALr
                      00515         LCDl    H'80'
004D   3080               M         movlw   H'80'
004E   2246               M         call    lSndALr
                      00516         Mic50   4
004F   3004               M         movlw   4
0050   231B               M         call    Mic50r
                      00517 ;
                      00518         LCDl    H'04'
0051   3004               M         movlw   H'04'
0052   2246               M         call    lSndALr
                      00519         LCDl    H'00'
0053   3000               M         movlw   H'00'
0054   2246               M         call    lSndALr
                      00520         LCDl    H'C4'
0055   30C4               M         movlw   H'C4'
0056   2246               M         call    lSndALr
                      00521         LCDl    H'C0'
0057   30C0               M         movlw   H'C0'
0058   2246               M         call    lSndALr
                      00522         Mic50   3
0059   3003               M         movlw   3
005A   231B               M         call    Mic50r
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 13


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00523 ;
                      00524         LCDl    H'04'
005B   3004               M         movlw   H'04'
005C   2246               M         call    lSndALr
                      00525         LCDl    H'00'
005D   3000               M         movlw   H'00'
005E   2246               M         call    lSndALr
                      00526         LCDl    H'14'
005F   3014               M         movlw   H'14'
0060   2246               M         call    lSndALr
                      00527         LCDl    H'10'
0061   3010               M         movlw   H'10'
0062   2246               M         call    lSndALr
                      00528         Milli   2
0063   3002               M         movlw   2
0064   2326               M         call    Millir
                      00529 ;
                      00530         LCDl    H'04'
0065   3004               M         movlw   H'04'
0066   2246               M         call    lSndALr
                      00531         LCDl    H'00'
0067   3000               M         movlw   H'00'
0068   2246               M         call    lSndALr
                      00532         LCDl    H'64'
0069   3064               M         movlw   H'64'
006A   2246               M         call    lSndALr
                      00533         LCDl    H'60'
006B   3060               M         movlw   H'60'
006C   2246               M         call    lSndALr
                      00534         Mic50   3
006D   3003               M         movlw   3
006E   231B               M         call    Mic50r
                      00535 ;
                      00536         LCDl    H'08'           ; backlight on
006F   3008               M         movlw   H'08'
0070   2246               M         call    lSndALr
                      00537         Milli   1
0071   3001               M         movlw   1
0072   2326               M         call    Millir
0073   0008           00538         return
                      00539 ;
                      00540 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00541 ;       RTC reading routine     ;
                      00542 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0074   01AA           00543 RTCrdr  clrf    RTCmem          ; set RTC memory addr 0
                      00544         I2Csnd DS3231,RTCmem,1  ; send it to DS3231
0075   30D0               M         movlw   DS3231
0076   00B6               M         movwf   I2Cadr
0077   302A               M         movlw   RTCmem
0078   0084               M         movwf   FSR0L
0079   3001               M         movlw   1
007A   00B7               M         movwf   DataLen
007B   227B               M         call    I2Csndr
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 14


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00545         Milli   1               ; wait a little (maybe unneeded)
007C   3001               M         movlw   1
007D   2326               M         call    Millir
                      00546         I2Crcv DS3231,RTCdata,7 ; receive 7 byte data from DS3231
007E   30D0               M         movlw   DS3231
007F   00B6               M         movwf   I2Cadr
0080   302B               M         movlw   RTCdata
0081   0084               M         movwf   FSR0L
0082   3007               M         movlw   7
0083   00B7               M         movwf   DataLen
0084   2288               M         call    I2Crcvr
0085   0008           00547         return
                      00548 ;
                      00549 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00550 ;       Display-Time routine                                    ;
                      00551 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  00000086            00552 DspTime equ     $
                      00553 ; Display year
                      00554         LCDsetC 0,0             ; Set cursor to top
                          M         if      0==0
0086   3080               M         movlw   H'80'+0
                          M         endif
                          M         if      0==1
                          M         movlw   H'C0'+0
                          M         endif
                          M         if      0==2
                          M         movlw   H'94'+0
                          M         endif
                          M         if      0==3
                          M         movlw   H'D4'+0
                          M         endif
                          M         if      0>3
                          M         * row error *
                          M         endif
0087   224D               M         call    lSetCsr
                      00555         LCDw    A'2'
0088   3032               M         movlw   A'2'
0089   225F               M         call    lSetChr
                      00556         LCDw    A'0'
008A   3030               M         movlw   A'0'
008B   225F               M         call    lSetChr
                      00557 ;
008C   0831           00558         movf    BCDyr,W         ; Get RTC format year
008D   00A3           00559         movwf   Dig1            ; Set it to Dig1
008E   300F           00560         movlw   H'0F'           ; Remove upper nibble
008F   05A3           00561         andwf   Dig1,F          ;  by AND
0090   0E31           00562         swapf   BCDyr,W         ; Get RTC year nibble-swapped
0091   00A2           00563         movwf   Dig10           ; Set it to Dig10
0092   300F           00564         movlw   H'0F'           ; Remove upper nibble
0093   05A2           00565         andwf   Dig10,F         ; by AND
0094   2236           00566         call    D2Cr            ; convert to characters
                      00567         LCDwb   Dig10
0095   0822               M         movf    Dig10,W
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 15


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

0096   225F               M         call    lSetChr
                      00568         LCDwb   Dig1
0097   0823               M         movf    Dig1,W
0098   225F               M         call    lSetChr
                      00569         LCDw    A'-'
0099   302D               M         movlw   A'-'
009A   225F               M         call    lSetChr
                      00570 ;       
                      00571 ; Display month
009B   0830           00572         movf    BCDmon,W        ; Same logic for month, as above
009C   00A3           00573         movwf   Dig1
009D   300F           00574         movlw   H'0F'
009E   05A3           00575         andwf   Dig1,F
009F   0E30           00576         swapf   BCDmon,W
00A0   00A2           00577         movwf   Dig10
00A1   300F           00578         movlw   H'0F'
00A2   05A2           00579         andwf   Dig10,F
00A3   2236           00580         call    D2Cr            ; convert to characters
                      00581         LCDwb   Dig10
00A4   0822               M         movf    Dig10,W
00A5   225F               M         call    lSetChr
                      00582         LCDwb   Dig1
00A6   0823               M         movf    Dig1,W
00A7   225F               M         call    lSetChr
                      00583         LCDw    A'-'    
00A8   302D               M         movlw   A'-'
00A9   225F               M         call    lSetChr
                      00584 ;
                      00585 ; Display day
00AA   082F           00586         movf    BCDday,W        ; Same logic for day, as above
00AB   00A3           00587         movwf   Dig1
00AC   300F           00588         movlw   H'0F'
00AD   05A3           00589         andwf   Dig1,F
00AE   0E2F           00590         swapf   BCDday,W
00AF   00A2           00591         movwf   Dig10
00B0   300F           00592         movlw   H'0F'
00B1   05A2           00593         andwf   Dig10,F
00B2   2236           00594         call    D2Cr            ; convert to characters
                      00595         LCDwb   Dig10
00B3   0822               M         movf    Dig10,W
00B4   225F               M         call    lSetChr
                      00596         LCDwb   Dig1
00B5   0823               M         movf    Dig1,W
00B6   225F               M         call    lSetChr
                      00597         LCDw    A' '
00B7   3020               M         movlw   A' '
00B8   225F               M         call    lSetChr
                      00598 ;
                      00599 ; Display hour
00B9   082D           00600         movf    BCDhr,W         ; Same logic for hour, as above
00BA   00A3           00601         movwf   Dig1
00BB   300F           00602         movlw   H'0F'
00BC   05A3           00603         andwf   Dig1,F
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 16


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

00BD   0E2D           00604         swapf   BCDhr,W
00BE   00A2           00605         movwf   Dig10
00BF   300F           00606         movlw   H'0F'
00C0   05A2           00607         andwf   Dig10,F
00C1   2236           00608         call    D2Cr            ; convert to characters
                      00609         LCDwb   Dig10
00C2   0822               M         movf    Dig10,W
00C3   225F               M         call    lSetChr
                      00610         LCDwb   Dig1
00C4   0823               M         movf    Dig1,W
00C5   225F               M         call    lSetChr
                      00611         LCDw    A':'
00C6   303A               M         movlw   A':'
00C7   225F               M         call    lSetChr
                      00612 ;
                      00613 ; Display minute
00C8   082C           00614         movf    BCDmin,W        ; Same logic for minute, as above
00C9   00A3           00615         movwf   Dig1
00CA   300F           00616         movlw   H'0F'
00CB   05A3           00617         andwf   Dig1,F
00CC   0E2C           00618         swapf   BCDmin,W
00CD   00A2           00619         movwf   Dig10
00CE   300F           00620         movlw   H'0F'
00CF   05A2           00621         andwf   Dig10,F
00D0   2236           00622         call    D2Cr            ; convert to characters
                      00623         LCDwb   Dig10
00D1   0822               M         movf    Dig10,W
00D2   225F               M         call    lSetChr
                      00624         LCDwb   Dig1
00D3   0823               M         movf    Dig1,W
00D4   225F               M         call    lSetChr
                      00625         LCDw    A':'
00D5   303A               M         movlw   A':'
00D6   225F               M         call    lSetChr
                      00626 ;
                      00627 ; Display second
00D7   082B           00628         movf    BCDsec,W        ; Same logic for second, as above
00D8   00A3           00629         movwf   Dig1
00D9   300F           00630         movlw   H'0F'
00DA   05A3           00631         andwf   Dig1,F
00DB   0E2B           00632         swapf   BCDsec,W
00DC   00A2           00633         movwf   Dig10
00DD   300F           00634         movlw   H'0F'
00DE   05A2           00635         andwf   Dig10,F
00DF   2236           00636         call    D2Cr            ; convert to characters
                      00637         LCDwb   Dig10
00E0   0822               M         movf    Dig10,W
00E1   225F               M         call    lSetChr
                      00638         LCDwb   Dig1
00E2   0823               M         movf    Dig1,W
00E3   225F               M         call    lSetChr
00E4   0008           00639         return
                      00640 ;
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 17


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00641 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00642 ;       RTC updating routine                                    ;
                      00643 ;               Display value for current ModeN                 ;
                      00644 ;               If swMode pushed, display next unit to update   ;
                      00645 ;               If swTime pushed, increase value and display it ;
                      00646 ;               If swSet pushed,  update RTC (RTCwtr)           ;
                      00647 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
00E5   1E8C           00648 RTCupdr btfss   PORTsw,swSet    ; swSet still on?
00E6   28E5           00649         goto    $-1             ; then wait for off
00E7   3006           00650         movlw   Modeyr          ; set initial mode year
00E8   00A4           00651         movwf   ModeN
                      00652 ;
00E9   0824           00653 RTCudm  movf    ModeN,W         ; Large loop on ModeN
00EA   000B           00654         brw
00EB   28F2           00655         goto    Mdsecr          ; case ModeN=0 
00EC   28F9           00656         goto    Mdminr          ; case ModeN=1 
00ED   2900           00657         goto    Mdhrr           ; case ModeN=2 
00EE   2907           00658         goto    Mddowr          ; case ModeN=3 
00EF   290E           00659         goto    Mddayr          ; case ModeN=4 
00F0   2915           00660         goto    Mdmonr          ; case ModeN=5 
00F1   291C           00661         goto    Mdyrr           ; case ModeN=6 
                      00662 ;
                      00663 ; Macro used within  this section
                      00664 Mdsetup macro   TMc,Rmax,Rmin
                      00665         movlw   TMc
                      00666         movwf   ModeChr
                      00667         movlw   Rmax
                      00668         movwf   RvMax
                      00669         movlw   Rmin
                      00670         movwf   RvMin
                      00671         goto    Mdnext
                      00672         endm
                      00673 ;
                      00674 ; set up environment for update and display
                      00675 Mdsecr  Mdsetup ChMS,secMax,secMin
00F2   3053               M         movlw   ChMS
00F3   00A5               M         movwf   ModeChr
00F4   3059               M         movlw   secMax
00F5   00A6               M         movwf   RvMax
00F6   3000               M         movlw   secMin
00F7   00A7               M         movwf   RvMin
00F8   2923               M         goto    Mdnext
                      00676 Mdminr  Mdsetup ChMm,minMax,minMin
00F9   306D               M         movlw   ChMm
00FA   00A5               M         movwf   ModeChr
00FB   3059               M         movlw   minMax
00FC   00A6               M         movwf   RvMax
00FD   3000               M         movlw   minMin
00FE   00A7               M         movwf   RvMin
00FF   2923               M         goto    Mdnext
                      00677 Mdhrr   Mdsetup ChMh,hrMax,hrMin
0100   3068               M         movlw   ChMh
0101   00A5               M         movwf   ModeChr
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 18


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

0102   3023               M         movlw   hrMax
0103   00A6               M         movwf   RvMax
0104   3000               M         movlw   hrMin
0105   00A7               M         movwf   RvMin
0106   2923               M         goto    Mdnext
                      00678 Mddowr  Mdsetup ChMw,dowMax,dowMin
0107   3057               M         movlw   ChMw
0108   00A5               M         movwf   ModeChr
0109   3007               M         movlw   dowMax
010A   00A6               M         movwf   RvMax
010B   3001               M         movlw   dowMin
010C   00A7               M         movwf   RvMin
010D   2923               M         goto    Mdnext
                      00679 Mddayr  Mdsetup ChMd,dayMax,dayMin
010E   3044               M         movlw   ChMd
010F   00A5               M         movwf   ModeChr
0110   3031               M         movlw   dayMax
0111   00A6               M         movwf   RvMax
0112   3001               M         movlw   dayMin
0113   00A7               M         movwf   RvMin
0114   2923               M         goto    Mdnext
                      00680 Mdmonr  Mdsetup ChMM,monMax,monMin
0115   304D               M         movlw   ChMM
0116   00A5               M         movwf   ModeChr
0117   3012               M         movlw   monMax
0118   00A6               M         movwf   RvMax
0119   3001               M         movlw   monMin
011A   00A7               M         movwf   RvMin
011B   2923               M         goto    Mdnext
                      00681 Mdyrr   Mdsetup ChMY,yrMax,yrMin
011C   3059               M         movlw   ChMY
011D   00A5               M         movwf   ModeChr
011E   3099               M         movlw   yrMax
011F   00A6               M         movwf   RvMax
0120   3000               M         movlw   yrMin
0121   00A7               M         movwf   RvMin
0122   2923               M         goto    Mdnext
                      00682 ;
0123   2148           00683 Mdnext  call    Rdspr           ; Display X=nn
0124   1E0C           00684         btfss   PORTsw,swTime   ; Is Time pushed ?
0125   292B           00685         goto    Rinc            ;  Yes, goto  Rinc
0126   1D8C           00686         btfss   PORTsw,swMode   ; Is Mode pushed ?
0127   292F           00687         goto    Rnxtm           ;  Yes, goto Rnxtm
0128   1E8C           00688         btfss   PORTsw,swSet    ; Is Set pushed ?
0129   293A           00689         goto    Rwrite          ;  Yes, goto Rwrite
012A   2923           00690         goto    Mdnext          ; If no button, small loop for button
                      00691 ;
                      00692 ;       Time pushed here
012B   2169           00693 Rinc    call    Rincr           ; Increase value in that mode
                      00694         Mil100  2               ; 0.2 sec for increasing value
012C   3002               M         movlw   2
012D   2333               M         call    Mil100r
012E   2923           00695         goto    Mdnext          ; return to loop for button
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 19


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00696 ;
                      00697 ;       Mode pushed here
012F   1D8C           00698 Rnxtm   btfss   PORTsw,swMode   ; Mode button still pushed
0130   292F           00699         goto    $-1             ; then wait for release
                      00700         CalEO   ModeN,0,Msmax   ; If current ModeN=0 goto Msmax
0131   3000               M         movlw   0               ; W=B
0132   0224               M         subwf   ModeN,W         ; W=A-B
0133   1903               M         btfsc   STATUS,Z        ; A=B? No skip next
0134   2937               M         goto    Msmax           ;       If A=B goto Eqladr
                          M ;                               ;       else next (here)
0135   03A4           00701         decf    ModeN,F         ; set next mode
0136   28E9           00702 Rnxtme  goto    RTCudm          ; and return to large loop for mode
                      00703 ;
0137   3006           00704 Msmax   movlw   Modeyr          ; get maximum mode
0138   00A4           00705         movwf   ModeN           ; and set it
0139   28E9           00706         goto    RTCudm          ; and return to large loop for mode
                      00707 ;       
013A   1E8C           00708 Rwrite  btfss   PORTsw,swSet    ; Set button still on?
013B   293A           00709         goto    $-1             ; then wait for release
013C   2186           00710         call    RTCwtr          ; and write to RTC
                      00711 ;
                      00712         LCDsetC D'10',3         ; Set cursor to Row3, Column 10
                          M         if      3==0
                          M         movlw   H'80'+D'10'
                          M         endif
                          M         if      3==1
                          M         movlw   H'C0'+D'10'
                          M         endif
                          M         if      3==2
                          M         movlw   H'94'+D'10'
                          M         endif
                          M         if      3==3
013D   30DE               M         movlw   H'D4'+D'10'
                          M         endif
                          M         if      3>3
                          M         * row error *
                          M         endif
013E   224D               M         call    lSetCsr
                      00713         LCDw    A' '            ; Clear RTC setting message
013F   3020               M         movlw   A' '
0140   225F               M         call    lSetChr
                      00714         LCDw    A' '
0141   3020               M         movlw   A' '
0142   225F               M         call    lSetChr
                      00715         LCDw    A' '
0143   3020               M         movlw   A' '
0144   225F               M         call    lSetChr
                      00716         LCDw    A' '
0145   3020               M         movlw   A' '
0146   225F               M         call    lSetChr
0147   0008           00717         return                  ; exit from RTC updating routine
                      00718 ;
                      00719 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 20


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00720 ;       Display value pointed by ModeN  ;
                      00721 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0148   0825           00722 Rdspr   movf    ModeChr,W
0149   00A0           00723         movwf   Moji1
014A   303D           00724         movlw   ChMEq
014B   00A1           00725         movwf   Moji2
                      00726 ;
014C   302B           00727         movlw   BCDsec          ; Point BCD area top
014D   0086           00728         movwf   FSR1L           ; set it to FSR1L
014E   0824           00729         movf    ModeN,W         ; Get Mode number
014F   0786           00730         addwf   FSR1L,F         ; Point current BCD area        
0150   0E01           00731         swapf   INDF1,W         ; get high nibble to low in W
0151   00A2           00732         movwf   Dig10           ; set it to Dig10
0152   300F           00733         movlw   H'0F'           ; Clear high nibble
0153   05A2           00734         andwf   Dig10,F         ;  of Dig10
0154   0801           00735         movf    INDF1,W         ; get low nibble to low
0155   00A3           00736         movwf   Dig1            ; set it to Dig1
0156   300F           00737         movlw   H'0F'           ; Clear high nibble
Message[305]: Using default destination of 1 (file).
0157   05A3           00738         andwf   Dig1            ;  of Dig1
0158   2236           00739         call    D2Cr            ; Convert Decimals to Characters
                      00740 ;
0159   215B           00741         call    TMdspr
015A   0008           00742         return
                      00743 ;
                      00744 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00745 ;       Time Mode displaying routine            ;
                      00746 ;               to update RTC                   ;
                      00747 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
015B   3020           00748 TMdspr  movlw   Moji1           ; Point Byte0 address
015C   0084           00749         movwf   FSR0L           ;  set it to use INDF0
015D   3004           00750         movlw   4               ; Set four chars
015E   00BE           00751         movwf   Bytectr         ;  to Byte counter
                      00752 ;
                      00753         LCDsetC D'10',3         ; Set cursor to Row3, Column 10
                          M         if      3==0
                          M         movlw   H'80'+D'10'
                          M         endif
                          M         if      3==1
                          M         movlw   H'C0'+D'10'
                          M         endif
                          M         if      3==2
                          M         movlw   H'94'+D'10'
                          M         endif
                          M         if      3==3
015F   30DE               M         movlw   H'D4'+D'10'
                          M         endif
                          M         if      3>3
                          M         * row error *
                          M         endif
0160   224D               M         call    lSetCsr
                      00754 ;
0161   0800           00755 TMdspl  movf    INDF0,W         ; Get byte content
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 21


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

0162   00BD           00756         movwf   Sbyte           ; Set it to Sbyte
                      00757         LCDwb   Sbyte           ;  and send it
0163   083D               M         movf    Sbyte,W
0164   225F               M         call    lSetChr
0165   0A84           00758         incf    FSR0L,F         ; point next byte
0166   0BBE           00759         decfsz  Bytectr,F       ; Check if all done
0167   2961           00760         goto    TMdspl          ; No. loop
0168   0008           00761         return
                      00762 ;
                      00763 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00764 ;       Increase value pointed by ModeN ;
                      00765 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0169   302B           00766 Rincr   movlw   BCDsec          ; Point BCD area top
016A   0086           00767         movwf   FSR1L           ; set it to pointer
016B   0824           00768         movf    ModeN,W         ; get ModeN to add
016C   0786           00769         addwf   FSR1L,F         ; Point current BCD area
                      00770 ;
                      00771         CabSO   INDF1,RvMax,Rigo ;If smaller than max, goto Rigo
016D   0826               M         movf    RvMax,W         ; W=B
016E   0201               M         subwf   INDF1,W         ; W=A-B
016F   1C03               M         btfss   STATUS,C        ; A≧B? Yes, skip next
0170   2974               M         goto    Rigo            ;       If A<B goto Smaladr
                          M ;                               ;       If A≧B then next (here)
0171   0827           00772         movf    RvMin,W         ; Else, get minimum value
0172   0081           00773         movwf   INDF1           ; and set it to INDF1 (BCD area)
0173   0008           00774         return
                      00775 ;
0174   0801           00776 Rigo    movf    INDF1,W         ; Get BCD value
0175   390F           00777         andlw   H'0F'           ; clear left nibble
0176   00A9           00778         movwf   Bytel           ; and set to Bytel
0177   0E01           00779         swapf   INDF1,W         ; Get BCD nibbles swapped
0178   390F           00780         andlw   H'0F'           ; clear left nibble
0179   00A8           00781         movwf   Byteh           ; and set to Byteh
                      00782 ;
017A   0AA9           00783         incf    Bytel,F         ; Bytel+1
                      00784         CalSO   Bytel,D'10',Rie ; If Bytel≦9,goto Rie
017B   300A               M         movlw   D'10'           ; W=B
017C   0229               M         subwf   Bytel,W         ; W=A-B
017D   1C03               M         btfss   STATUS,C        ; A≧B? Yes, skip next
017E   2984               M         goto    Rie             ;       If A<B goto Smaladr
                          M ;                               ;       If A≧B then next (here)
017F   3010           00785         movlw   D'16'           ; Else increase digit 10
0180   0781           00786         addwf   INDF1,F         ;
0181   30F0           00787         movlw   H'F0'           ; and clear digit 1
0182   0581           00788         andwf   INDF1,F
0183   0008           00789         return
                      00790 
0184   0A81           00791 Rie     incf    INDF1,F         ; Increase BCD value
0185   0008           00792         return                  ; and return
                      00793 ;
                      00794 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00795 ;       RTC writing routine     ;
                      00796 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 22


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

0186   01AA           00797 RTCwtr  clrf    RTCmem          ; Set memory address zero
                      00798         I2Csnd  DS3231,RTCmem,8 ; Send data, includign memory addr in top
0187   30D0               M         movlw   DS3231
0188   00B6               M         movwf   I2Cadr
0189   302A               M         movlw   RTCmem
018A   0084               M         movwf   FSR0L
018B   3008               M         movlw   8
018C   00B7               M         movwf   DataLen
018D   227B               M         call    I2Csndr
018E   0008           00799         return
                      00800 ;
                      00801 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00802 ;       DHT11 Reading routine                           ;
                      00803 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
018F   3005           00804 DHTrd   movlw   5               ; Set # of DHT bytes 5
0190   00BE           00805         movwf   Bytectr         ;  to Bytectr
                      00806 ;
0191   3038           00807         movlw   rhH             ; Point top of DHT data input
0192   0084           00808         movwf   FSR0L           ; Set it to INDF0
                      00809 ;
                      00810 ;       Start signal
0193   100C           00811         bcf     PORTdht,DHT11   ; Set DHT-line L
                      00812 ;
                      00813         Milli   D'20'           ; for 20mS
0194   3014               M         movlw   D'20'
0195   2326               M         call    Millir
0196   140C           00814         bsf     PORTdht,DHT11   ; Set DHT-line H
                      00815         Mic2    D'10'           ; for 20 micro sec
0197   300A               M         movlw   D'10'
0198   230B               M         call    Mic2r
                      00816 ;
                      00817 ;Header checking from DHT11
0199   0021           00818         BANKSEL TRISdht         ; Point tris bank
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
019A   140C           00819         bsf     TRISdht,DHT11   ; Set TRIS-dht input
019B   0024           00820         BANKSEL WPUA            ; Point WPUA bank
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
019C   140C           00821         bsf     WPUA,DHT11      ; Pull-up
019D   0188           00822         clrf    BSR             ; Point bank 0
                      00823         Mic                     ; wait 1 micro sec for ready
019E   299F               M         goto    $+1
019F   29A0               M         goto    $+1
                      00824 ;
01A0   180C           00825         btfsc   PORTdht,DHT11   ; Wait response 1/2 from DHT L
01A1   29A0           00826         goto    $-1             ;  until L
                      00827         Mic5    D'13'           ; Wait 65 within 80 micS
01A2   300D               M         movlw   D'13'
01A3   2312               M         call    Mic25r
01A4   300D               M         movlw   D'13'
01A5   2312               M         call    Mic25r
                      00828 ;
01A6   1C0C           00829         btfss   PORTdht,DHT11   ; Wait response 2/2 from DHT H
01A7   29A6           00830         goto    $-1             ;  until H
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 23


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00831         Mic5    D'13'           ; Wait 65 within 80 micS
01A8   300D               M         movlw   D'13'
01A9   2312               M         call    Mic25r
01AA   300D               M         movlw   D'13'
01AB   2312               M         call    Mic25r
                      00832 ;
01AC   180C           00833         btfsc   PORTdht,DHT11   ; Wait Start (L 50 mic sec) from DHT
01AD   29AC           00834         goto    $-1
                      00835         Mic5    D'6'            ; When L, wait for 30 mic sec
01AE   3006               M         movlw   D'6'
01AF   2312               M         call    Mic25r
01B0   3006               M         movlw   D'6'
01B1   2312               M         call    Mic25r
                      00836 ;
                      00837 ; Read each byte from DHT11
01B2   3008           00838 DHbc    movlw   8               ; Set # of bits = 8 in a byte of DHT
01B3   00BF           00839         movwf   Bitctr          ;  to Bitctr
                      00840 ;
01B4   1C0C           00841 DHbcl   btfss   PORTdht,DHT11   ; Wait Data signal H from DHT
01B5   29B4           00842         goto    $-1
                      00843         Mic50   1               ; When H (1=70,0=27 micS), wait 50 micS
01B6   3001               M         movlw   1
01B7   231B               M         call    Mic50r
                      00844 ;       Trigger                 ; *** for timing-validation use only ***
                      00845 ;
01B8   1C0C           00846         btfss   PORTdht,DHT11   ; If still on then data is one, else zero
01B9   29C0           00847         goto    DHszero
                      00848 ;
01BA   143D           00849 DHsone  bsf     Sbyte,0         ; Set 1 to Sbyte bit 0
                      00850         Mic5    D'4'            ; Consume residual H 20 mic S of "1"
01BB   3004               M         movlw   D'4'
01BC   2312               M         call    Mic25r
01BD   3004               M         movlw   D'4'
01BE   2312               M         call    Mic25r
01BF   29C1           00851         goto    DHeck           ; Goto Check end of one byte
                      00852 ;
01C0   103D           00853 DHszero bcf     Sbyte,0         ; Set zero to Sbyte bit 0
01C1   0BBF           00854 DHeck   decfsz  Bitctr,F        ; One byte (8 bits) end ?
01C2   29C9           00855         goto    DHnxtbi         ; No, goto continue bit proc
                      00856 ;
01C3   083D           00857 DHbye   movf    Sbyte,W         ; If one byte end, here
01C4   0080           00858         movwf   INDF0           ; Set data to DHTdata entry
01C5   0A84           00859         incf    FSR0L,F         ; Point next entry of DHTdata
                      00860 ;
01C6   0BBE           00861         decfsz  Bytectr,F       ; All bytes end?
01C7   29B2           00862         goto    DHbc            ; If not end of bytes, next byte
01C8   29CB           00863         goto    DHcksr          ; If end, checksum validation
                      00864 ;
01C9   0DBD           00865 DHnxtbi rlf     Sbyte,F         ; Bit continues. Shift left.
01CA   29B4           00866         goto    DHbcl           ; and next bit checking
                      00867 ;
  000001CB            00868 DHcksr  equ     $               ; Checksum validation, if needed
                      00869 ;
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 24


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00870 ;  End of receive
                      00871 ;
                      00872 ;Change data line mode to ooutput
                      00873 ;       Wait the last space ending
                      00874         Mic2    D'40'           ; Residual 28 mic sec space + alpha 
01CB   3028               M         movlw   D'40'
01CC   230B               M         call    Mic2r
                      00875 ;                               ; + 50 mic sec until pull-down end
01CD   0022           00876         BANKSEL LATdht          ; Data line high when output mode
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
01CE   140C           00877         bsf     LATdht,DHT11    ; Lat-DHT11 high
01CF   0021           00878         BANKSEL TRISdht         ; Select tris bank
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
01D0   100C           00879         bcf     TRISdht,DHT11   ; Set DHT11 output mode
01D1   0188           00880         clrf    BSR             ; Select bank 0
                      00881 ;
                      00882         Mic                     ; Wait one micro Sec
01D2   29D3               M         goto    $+1
01D3   29D4               M         goto    $+1
01D4   140C           00883         bsf     PORTdht,DHT11   ; Signal high
01D5   0008           00884         return
                      00885 ;
                      00886 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00887 ;       Display temperature                                     ;
                      00888 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  000001D6            00889 DspTr   equ     $
                      00890         LCDsetC 1,1
                          M         if      1==0
                          M         movlw   H'80'+1
                          M         endif
                          M         if      1==1
01D6   30C1               M         movlw   H'C0'+1
                          M         endif
                          M         if      1==2
                          M         movlw   H'94'+1
                          M         endif
                          M         if      1==3
                          M         movlw   H'D4'+1
                          M         endif
                          M         if      1>3
                          M         * row error *
                          M         endif
01D7   224D               M         call    lSetCsr
                      00891         LCDw    A'T'
01D8   3054               M         movlw   A'T'
01D9   225F               M         call    lSetChr
                      00892         LCDw    A'e'
01DA   3065               M         movlw   A'e'
01DB   225F               M         call    lSetChr
                      00893         LCDw    A'm'
01DC   306D               M         movlw   A'm'
01DD   225F               M         call    lSetChr
                      00894         LCDw    A'p'
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 25


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

01DE   3070               M         movlw   A'p'
01DF   225F               M         call    lSetChr
                      00895         LCDw    A'e'
01E0   3065               M         movlw   A'e'
01E1   225F               M         call    lSetChr
                      00896         LCDw    A'r'
01E2   3072               M         movlw   A'r'
01E3   225F               M         call    lSetChr
                      00897         LCDw    A'a'
01E4   3061               M         movlw   A'a'
01E5   225F               M         call    lSetChr
                      00898         LCDw    A't'
01E6   3074               M         movlw   A't'
01E7   225F               M         call    lSetChr
                      00899         LCDw    A'u'
01E8   3075               M         movlw   A'u'
01E9   225F               M         call    lSetChr
                      00900         LCDw    A'r'
01EA   3072               M         movlw   A'r'
01EB   225F               M         call    lSetChr
                      00901         LCDw    A'e'
01EC   3065               M         movlw   A'e'
01ED   225F               M         call    lSetChr
                      00902         LCDw    A' '
01EE   3020               M         movlw   A' '
01EF   225F               M         call    lSetChr
                      00903         LCDw    A'='
01F0   303D               M         movlw   A'='
01F1   225F               M         call    lSetChr
                      00904         LCDw    A' '
01F2   3020               M         movlw   A' '
01F3   225F               M         call    lSetChr
01F4   222A           00905 DspTgo  call    B2Dr            ; Convert binary data to Decimals
01F5   2236           00906         call    D2Cr            ; Convert Decimals to Characters
                      00907         LCDwb   Dig10
01F6   0822               M         movf    Dig10,W
01F7   225F               M         call    lSetChr
                      00908         LCDwb   Dig1
01F8   0823               M         movf    Dig1,W
01F9   225F               M         call    lSetChr
                      00909         LCDw    H'DF'           ; degree
01FA   30DF               M         movlw   H'DF'
01FB   225F               M         call    lSetChr
                      00910         LCDw    A'C'
01FC   3043               M         movlw   A'C'
01FD   225F               M         call    lSetChr
01FE   0008           00911         return
                      00912 ;
                      00913 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00914 ;       Disuplay relative humidity                              ;
                      00915 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  000001FF            00916 DspHr   equ     $
                      00917         LCDsetC 1,2
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 26


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                          M         if      2==0
                          M         movlw   H'80'+1
                          M         endif
                          M         if      2==1
                          M         movlw   H'C0'+1
                          M         endif
                          M         if      2==2
01FF   3095               M         movlw   H'94'+1
                          M         endif
                          M         if      2==3
                          M         movlw   H'D4'+1
                          M         endif
                          M         if      2>3
                          M         * row error *
                          M         endif
0200   224D               M         call    lSetCsr
                      00918         LCDw    A'R'
0201   3052               M         movlw   A'R'
0202   225F               M         call    lSetChr
                      00919         LCDw    A'e'
0203   3065               M         movlw   A'e'
0204   225F               M         call    lSetChr
                      00920         LCDw    A'l'
0205   306C               M         movlw   A'l'
0206   225F               M         call    lSetChr
                      00921         LCDw    A'.'
0207   302E               M         movlw   A'.'
0208   225F               M         call    lSetChr
                      00922         LCDw    A'H'
0209   3048               M         movlw   A'H'
020A   225F               M         call    lSetChr
                      00923         LCDw    A'u'
020B   3075               M         movlw   A'u'
020C   225F               M         call    lSetChr
                      00924         LCDw    A'm'
020D   306D               M         movlw   A'm'
020E   225F               M         call    lSetChr
                      00925         LCDw    A'i'
020F   3069               M         movlw   A'i'
0210   225F               M         call    lSetChr
                      00926         LCDw    A'd'
0211   3064               M         movlw   A'd'
0212   225F               M         call    lSetChr
                      00927         LCDw    A'i'
0213   3069               M         movlw   A'i'
0214   225F               M         call    lSetChr
                      00928         LCDw    A't'
0215   3074               M         movlw   A't'
0216   225F               M         call    lSetChr
                      00929         LCDw    A'y'
0217   3079               M         movlw   A'y'
0218   225F               M         call    lSetChr
                      00930         LCDw    A' '
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 27


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

0219   3020               M         movlw   A' '
021A   225F               M         call    lSetChr
                      00931         LCDw    A'='
021B   303D               M         movlw   A'='
021C   225F               M         call    lSetChr
                      00932         LCDw    A' '
021D   3020               M         movlw   A' '
021E   225F               M         call    lSetChr
                      00933 ;
021F   0838           00934         movf    rhH,W
0220   00BA           00935         movwf   binH
                      00936 ;
0221   222A           00937         call    B2Dr
0222   2236           00938         call    D2Cr
                      00939         LCDwb   Dig10
0223   0822               M         movf    Dig10,W
0224   225F               M         call    lSetChr
                      00940         LCDwb   Dig1
0225   0823               M         movf    Dig1,W
0226   225F               M         call    lSetChr
                      00941         LCDw    A'%'
0227   3025               M         movlw   A'%'
0228   225F               M         call    lSetChr
0229   0008           00942         return
                      00943 ;
                      00944 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00945 ;       Convert mesured Binary data to Decimal                  ;
                      00946 ;               from binH to Dig10+Dig1                         ;
                      00947 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
022A   083A           00948 B2Dr    movf    binH,W          ; Move binH
022B   00A3           00949         movwf   Dig1            ;  to Dig1
022C   01A2           00950         clrf    Dig10           ; Clear Dig10
                      00951 ;
                      00952 B2Dlp   CalSO   Dig1,D'10',B2De
022D   300A               M         movlw   D'10'           ; W=B
022E   0223               M         subwf   Dig1,W          ; W=A-B
022F   1C03               M         btfss   STATUS,C        ; A≧B? Yes, skip next
0230   2A35               M         goto    B2De            ;       If A<B goto Smaladr
                          M ;                               ;       If A≧B then next (here)
0231   300A           00953         movlw   D'10'
0232   02A3           00954         subwf   Dig1,F
0233   0AA2           00955         incf    Dig10,F
0234   2A2D           00956         goto    B2Dlp
                      00957 ;       
0235   0008           00958 B2De    return
                      00959 ;       
                      00960 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00961 ;       Convert Decimals to Characters                          ;
                      00962 ;               changing Dec10-1 to characers                   ;
                      00963 ;               with clearing leading-zero                      ;
                      00964 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0236   3030           00965 D2Cr    movlw   H'30'           ; Left nibble of numeric chars
0237   04A2           00966         iorwf   Dig10,F         ; Convert Dig10 to character
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 28


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

0238   04A3           00967         iorwf   Dig1,F          ; Convert Dig1 to character
                      00968 ;
                      00969         CalEO   Dig10,H'30',D2Czb ; Check leading 0 ?
0239   3030               M         movlw   H'30'           ; W=B
023A   0222               M         subwf   Dig10,W         ; W=A-B
023B   1903               M         btfsc   STATUS,Z        ; A=B? No skip next
023C   2A3E               M         goto    D2Czb           ;       If A=B goto Eqladr
                          M ;                               ;       else next (here)
023D   0008           00970         return                  ; No, return
                      00971 ;
023E   3020           00972 D2Czb   movlw   A' '            ; If zero, replace with blank
023F   00A2           00973         movwf   Dig10           ;       at Dig10
0240   0008           00974         return
                      00975 ;
                      00976 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00977 ;       LCD slave-adr sending routine                   ;
                      00978 ;               with address in Sbyte, getting Ack.     ;
                      00979 ;               (start-I2C included, without stop-I2C)  ;
                      00980 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  00000241            00981 lSndAr  equ     $
                      00982         I2Cstat                 ; start I2C
0241   22D4               M         call    I2Cstar
0242   304E           00983         movlw   lcdAw           ; get LCD slave adr
0243   00BD           00984         movwf   Sbyte           ; set it to Sbyte
0244   22E8           00985         call    Sendr           ; and send it
0245   0008           00986         return
                      00987 ;
                      00988 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      00989 ;       LCD I2C adr and a Literal sending routine       ;
                      00990 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0246   00B3           00991 lSndALr movwf   Dbyte           ; save literal to Dbyte
0247   2241           00992         call    lSndAr          ; send adr
0248   0833           00993         movf    Dbyte,W         ; get saved literal
0249   00BD           00994         movwf   Sbyte
024A   22E8           00995         call    Sendr           ; send it
                      00996         I2Cstop                 ; stop I2C
024B   22DB               M         call    I2Cstpr
024C   0008           00997         return
                      00998 ;
                      00999 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      01000 ;       Set-cursor routine for LCD called by lcdSetC    ;
                      01001 ;       If W=0xab, send 0xaC, 0xa8, 0xbC, and 0xb8      ;
                      01002 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
024D   00B4           01003 lSetCsr movwf   Ebyte           ; save Value into Ebyte
024E   2254           01004         call    lSetCss         ; send left nibble
024F   0E34           01005         swapf   Ebyte,W         ; set W w/ swapping nibbles
0250   2254           01006         call    lSetCss         ; send right nibble
                      01007 ;
                      01008         Mic50   1
0251   3001               M         movlw   1
0252   231B               M         call    Mic50r
0253   0008           01009         return
                      01010 ;
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 29


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      01011 ;       lSetCss subroutine to send a nibble
0254   00B5           01012 lSetCss movwf   Wbyte
0255   300F           01013         movlw   H'0F'
0256   04B5           01014         iorwf   Wbyte,F         ; set xF
0257   30FC           01015         movlw   H'FC'
0258   0535           01016         andwf   Wbyte,W         ; change it to xC
0259   00B5           01017         movwf   Wbyte           ; set it to Wbyte, too
025A   2246           01018         call    lSndALr         ; send S, adr, nibble+C, and P
                      01019 ;
025B   30FB           01020         movlw   B'11111011'     ; get complement of 0C-08
025C   0535           01021         andwf   Wbyte,W         ; and change C to 8, ie x8
025D   2246           01022         call    lSndALr         ; send S, adr, nibble+8, and P
025E   0008           01023         return
                      01024 ;
                      01025 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      01026 ;       LCD send-char routine                   ;
                      01027 ;       If W=0xab, send 0xaD, 0xa9, 0xbD, and 0xb9      ;
                      01028 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
025F   00B4           01029 lSetChr movwf   Ebyte           ; save Value into Ebyte
                      01030 ;       sending left nibble
0260   2264           01031         call    lSetChs
                      01032 ;
                      01033 ;       sending right nibble
0261   0E34           01034         swapf   Ebyte,W         ; replace left nibble w/ right
0262   2264           01035         call    lSetChs
0263   0008           01036         return
                      01037 ;
                      01038 ;       LCD subroutine to send a character  ;
0264   00B5           01039 lSetChs movwf   Wbyte           ; W to Wbyte
0265   300F           01040         movlw   H'0F'           ; set right nibble bits of 
0266   04B5           01041         iorwf   Wbyte,F         ;   Wbyte on
0267   30FD           01042         movlw   H'FD'           ; leave left nibble + right D
0268   0535           01043         andwf   Wbyte,W         ;  into W
0269   00B5           01044         movwf   Wbyte           ; save it into Wbyte
026A   2246           01045         call    lSndALr         ; send S, adr, nibble+D, and P
                      01046 ;
026B   0835           01047         movf    Wbyte,W
026C   30FB           01048         movlw   B'11111011'     ; target bit 2 to off (D to 9)
026D   0535           01049         andwf   Wbyte,W         ; make left nibble + right 9
026E   2246           01050         call    lSndALr         ; send S, adr, nibble+9, and P  
026F   0008           01051         return
                      01052 ;
                      01053 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      01054 ;       LCD.clear routine                               ;
                      01055 ;       Send 0x8C, 0x88, 0x0C, and 0x08                 ;
                      01056 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  00000270            01057 lClr    equ     $
                      01058         LCDw    H'8C'
0270   308C               M         movlw   H'8C'
0271   225F               M         call    lSetChr
                      01059         LCDw    H'88'
0272   3088               M         movlw   H'88'
0273   225F               M         call    lSetChr
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 30


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      01060         LCDw    H'0C'
0274   300C               M         movlw   H'0C'
0275   225F               M         call    lSetChr
                      01061         LCDw    H'08'
0276   3008               M         movlw   H'08'
0277   225F               M         call    lSetChr
                      01062         Mic50   1
0278   3001               M         movlw   1
0279   231B               M         call    Mic50r
027A   0008           01063         return
                      01064 ;
                      01065 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      01066 ;       I2C Send byte-string                            ;
                      01067 ;         when called,                                  ;
                      01068 ;               I2C device adr in I2Cadr byte           ;
                      01069 ;               Data length in DataLen                  ;
                      01070 ;               Data Addr in FSR0L (INDF0)              ;
                      01071 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
027B   0836           01072 I2Csndr movf    I2Cadr,W
027C   00BD           01073         movwf   Sbyte
                      01074 ;       rlf     Sbyte,F ; shift leftt (if adr for Arduino)
027D   103D           01075         bcf     Sbyte,0 ; indicate write
                      01076 ;
                      01077         I2Cstat         ; Start I2C
027E   22D4               M         call    I2Cstar
027F   22E8           01078         call    Sendr
                      01079 
0280   0800           01080 Sdata   movf    INDF0,W ; Get a sending character
0281   00BD           01081         movwf   Sbyte   ; Set it to Sbyte
0282   22E8           01082         call    Sendr   ; Send it to the device
                      01083 ;
0283   0A84           01084         incf    FSR0L,F ; point next char
0284   0BB7           01085         decfsz  DataLen,F ; Have all chars sent ?
0285   2A80           01086         goto    Sdata           ; No, loop
                      01087 ;
                      01088 ; Stop signal and return
                      01089         I2Cstop
0286   22DB               M         call    I2Cstpr
0287   0008           01090         return  
                      01091 ;
                      01092 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      01093 ;       I2C Receive byte-string                         ;
                      01094 ;         when called,                                  ;
                      01095 ;               I2C device adr in I2Cadr byte           ;
                      01096 ;               Data length in DataLen                  ;
                      01097 ;               Data Addr in FSR0L (INDF0)              ;
                      01098 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  00000288            01099 I2Crcvr equ     $
                      01100         I2Cstat         ; Start I2C
0288   22D4               M         call    I2Cstar
0289   0836           01101         movf    I2Cadr,W ; Get I2C dev addr
028A   00BD           01102         movwf   Sbyte   ; Set it into Sbyte
                      01103 ;       rlf     Sbyte,F ; Shift left (if adr for Arduino)
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 31


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

028B   143D           01104         bsf     Sbyte,0 ; indicate read
028C   22E8           01105         call    Sendr   ; Send slave addr to read
                      01106 ;
  0000028D            01107 I2Crbyt equ     $
028D   0021           01108         BANKSEL TRISI2C ;
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
028E   150C           01109         bsf     TRISI2C,Dl ; Set Dline input mode
028F   0188           01110         clrf    BSR     ; Point Bank 0
                      01111 ;
0290   3008           01112         movlw   8       ; Bits in a reciving byte
0291   00BF           01113         movwf   Bitctr  ; into loop counter 
                      01114 I2Crblp Mic2p5  2*Clkt  ; Timing before raising clock
0292   3002               M         movlw   2*Clkt
0293   2312               M         call    Mic25r
0294   148C           01115         bsf     PORTI2C,Cl ; Set clock high
                      01116         Mic2p5  Clkt    ; Timing after raising clock
0295   3001               M         movlw   Clkt
0296   2312               M         call    Mic25r
                      01117 ;
0297   190C           01118         btfsc   PORTI2C,Dl
0298   2A9B           01119         goto    Rbith
                      01120 ;       goto    Rbitl
                      01121 ;
0299   103D           01122 Rbitl   bcf     Sbyte,0 ; Clear bit 0
029A   2A9C           01123         goto    Rbitnxt ; and goto next
                      01124 ;
029B   143D           01125 Rbith   bsf     Sbyte,0 ; Set bit 0
                      01126 Rbitnxt Mic2    Clkq    ; Timing after checking
029C   3001               M         movlw   Clkq
029D   230B               M         call    Mic2r
029E   108C           01127         bcf     PORTI2C,Cl ; Set clock low
                      01128 ;       Mic2p5  Clkt    ; Timing after clock falling
029F   0BBF           01129         decfsz  Bitctr,F ; Still bits?
02A0   2AA2           01130         goto    Rbcont  ; Yes, continue
02A1   2AA4           01131         goto    Rbend   ; No, end of one byte
                      01132 ;
02A2   0DBD           01133 Rbcont  rlf     Sbyte,F ; Shit left
02A3   2A92           01134         goto    I2Crblp ; and goto loop
                      01135 ;
02A4   083D           01136 Rbend   movf    Sbyte,W ; Get received byte
02A5   0080           01137         movwf   INDF0   ; Set it to INDF0
02A6   0A84           01138         incf    FSR0L,F ; increase index
02A7   0BB7           01139         decfsz  DataLen,F ; DataLen-1
02A8   2AAA           01140         goto    Sackr   ; Send Ack and continue
02A9   2ABA           01141         goto    Snackr  ; Send Nack and stop
                      01142 ;
                      01143 ;Set Dl output mode and send Ack to conitinue
  000002AA            01144 Sackr   equ     $
02AA   0022           01145         BANKSEL LATI2C  ; Data line high when output mode
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
02AB   150C           01146         bsf     LATI2C,Dl ; Lat-Dl on
02AC   0021           01147         BANKSEL TRISI2C ; 
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 32


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

02AD   110C           01148         bcf     TRISI2C,Dl ; Set Dl output mode
02AE   0188           01149         clrf    BSR     ; Point Bank 0
                      01150 ;
02AF   110C           01151         bcf     PORTI2C,Dl ; Send Ack
                      01152         Mic2    Clkq    ; Timing after clock falling
02B0   3001               M         movlw   Clkq
02B1   230B               M         call    Mic2r
02B2   148C           01153         bsf     PORTI2C,Cl ; Show Ack
                      01154         Mic2p5  2*Clkt
02B3   3002               M         movlw   2*Clkt
02B4   2312               M         call    Mic25r
02B5   108C           01155         bcf     PORTI2C,Cl ; Set clock low
                      01156         Mic2    Clkq
02B6   3001               M         movlw   Clkq
02B7   230B               M         call    Mic2r
02B8   150C           01157         bsf     PORTI2C,Dl ; Return Dline to high
02B9   2A8D           01158         goto    I2Crbyt         ; Next byte process
                      01159 ;
                      01160 ;Set Dl output mode and send Nack
  000002BA            01161 Snackr  equ     $
02BA   0022           01162         BANKSEL LATI2C  ; Data line high when output mode
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
02BB   150C           01163         bsf     LATI2C,Dl ; Lat-Dl on
02BC   0021           01164         BANKSEL TRISI2C ; 
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
02BD   110C           01165         bcf     TRISI2C,Dl ; Set Dl output mode
02BE   0188           01166         clrf    BSR     ; Point Bank 0
                      01167 ;
02BF   150C           01168         bsf     PORTI2C,Dl ; Send Nack
                      01169         Mic2    Clkq    ; Timing after clock falling
02C0   3001               M         movlw   Clkq
02C1   230B               M         call    Mic2r
02C2   148C           01170         bsf     PORTI2C,Cl ; Show Nack
                      01171         Mic2p5  2*Clkt
02C3   3002               M         movlw   2*Clkt
02C4   2312               M         call    Mic25r
02C5   108C           01172         bcf     PORTI2C,Cl      ; Set clock low
                      01173         Mic2p5  Clkt
02C6   3001               M         movlw   Clkt
02C7   2312               M         call    Mic25r
                      01174         I2Cstop         ; and stop I2C once
02C8   22DB               M         call    I2Cstpr
                      01175         Mic5    D'6'    ; for 30 micro sec
02C9   3006               M         movlw   D'6'
02CA   2312               M         call    Mic25r
02CB   3006               M         movlw   D'6'
02CC   2312               M         call    Mic25r
                      01176 ;
                      01177         I2Cstat         ; then start I2C again
02CD   22D4               M         call    I2Cstar
02CE   0836           01178         movf    I2Cadr,W ; Get I2C dev addr
02CF   00BD           01179         movwf   Sbyte   ; Set it into Sbyte
                      01180 ;       rlf     Sbyte,F ; Shift left (if adr for Arduino)
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 33


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

02D0   103D           01181         bcf     Sbyte,0 ; indicate write
02D1   22E8           01182         call    Sendr   ; Send it
                      01183 ;
                      01184         I2Cstop
02D2   22DB               M         call    I2Cstpr
02D3   0008           01185         return
                      01186 ;
                      01187 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      01188 ;       I2C Start signal routine                        ;
                      01189 ;               when dataline mode is output            ;
                      01190 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
02D4   110C           01191 I2Cstar bcf     PORTI2C,Dl ; set SDA low
                      01192         Mic2    Clkq
02D5   3001               M         movlw   Clkq
02D6   230B               M         call    Mic2r
02D7   108C           01193         bcf     PORTI2C,Cl ; set SCL low
                      01194         Mic2p5  2*Clkt
02D8   3002               M         movlw   2*Clkt
02D9   2312               M         call    Mic25r
02DA   0008           01195         return
                      01196 ;
                      01197 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      01198 ;       I2C Stop signal routine                         ;
                      01199 ;               when dataline mode is output            ;
                      01200 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
02DB   108C           01201 I2Cstpr bcf     PORTI2C,Cl ; set SCL low
                      01202         Mic2    Clkq
02DC   3001               M         movlw   Clkq
02DD   230B               M         call    Mic2r
02DE   110C           01203         bcf     PORTI2C,Dl ; set SDA low
                      01204         Mic2p5  2*Clkt
02DF   3002               M         movlw   2*Clkt
02E0   2312               M         call    Mic25r
02E1   148C           01205         bsf     PORTI2C,Cl ; Clock line rasing
                      01206         Mic2p5  Clkt
02E2   3001               M         movlw   Clkt
02E3   2312               M         call    Mic25r
02E4   150C           01207         bsf     PORTI2C,Dl ; Data line rasing
                      01208         Mic2    Clkq
02E5   3001               M         movlw   Clkq
02E6   230B               M         call    Mic2r
02E7   0008           01209         return  
                      01210 ;
                      01211 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      01212 ;       I2C One-byte sending routine                    ;
                      01213 ;               with data in Sbyte                      ;
                      01214 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
02E8   3008           01215 Sendr   movlw   8       ; Set bit count in a byte
02E9   00BF           01216         movwf   Bitctr  ; into loop counter 
                      01217 ;
02EA   1BBD           01218 Sloop   btfsc   Sbyte,7 ; Check top bit of Sbyte
02EB   2AEE           01219         goto    Slpdh   ; 
02EC   110C           01220         bcf     PORTI2C,Dl ; If bit low then Data L
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 34


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

02ED   2AEF           01221         goto    Slpnxt
02EE   150C           01222 Slpdh   bsf     PORTI2C,Dl ; If bit high then Data H
                      01223 ;
                      01224 Slpnxt  Mic2    Clkq
02EF   3001               M         movlw   Clkq
02F0   230B               M         call    Mic2r
02F1   148C           01225         bsf     PORTI2C,Cl ; Show bit
                      01226         Mic2p5  2*Clkt
02F2   3002               M         movlw   2*Clkt
02F3   2312               M         call    Mic25r
02F4   108C           01227         bcf     PORTI2C,Cl ;
                      01228         Mic2    Clkq
02F5   3001               M         movlw   Clkq
02F6   230B               M         call    Mic2r
                      01229 ;
02F7   0DBD           01230         rlf     Sbyte,F ; Shift left 
02F8   0BBF           01231         decfsz  Bitctr,F ; All bits done?
02F9   2AEA           01232         goto    Sloop   ; No, loop within a byte
                      01233 ;       
                      01234 ;Receive Ack            
                      01235 ; set data line input mode
02FA   0021           01236         BANKSEL TRISI2C ; 
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
02FB   150C           01237         bsf     TRISI2C,Dl ; Set Dline input mode
02FC   0188           01238         clrf    BSR     ; Point Bank 0
                      01239 ;
                      01240         Mic2    Clkq    ; wait for Ack timing
02FD   3001               M         movlw   Clkq
02FE   230B               M         call    Mic2r
02FF   148C           01241         bsf     PORTI2C,Cl ; Clock H for Acq confirmation
                      01242         Mic2p5  2*Clkt  ; 
0300   3002               M         movlw   2*Clkt
0301   2312               M         call    Mic25r
0302   108C           01243         bcf     PORTI2C,Cl ; Cl L for Dl release by slave
                      01244         Mic2p5  2*Clkt
0303   3002               M         movlw   2*Clkt
0304   2312               M         call    Mic25r
                      01245 ;
                      01246 ; Set Data line output
0305   0022           01247         BANKSEL LATI2C  ; Data line high when output mode
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
0306   150C           01248         bsf     LATI2C,Dl ; Lat-Dl on
0307   0021           01249         BANKSEL TRISI2C ; 
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
0308   110C           01250         bcf     TRISI2C,Dl ; Set Dl output mode
0309   0188           01251         clrf    BSR     ; Point Bank 0
030A   0008           01252         return
                      01253 ;
                      01254 
                      01255 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      01256 ;       Timing subrooutines for general purposes                ;
                      01257 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      01258 ;
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 35


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      01259 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      01260 ;       Make 2.0 micro S x n    (Mic2)  ;
                      01261 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
030B   00C0           01262 Mic2r   movwf   Mic25c          ; + Wset + call = 1 micro sec 
                      01263 ;
030C   0BC0           01264 Mic2l   decfsz  Mic25c,F        ; If exhausted, 1 micro S hereafter
030D   2B0F           01265         goto    Mic2li          ; else go out (2nd time 1.75 mic sec)
030E   0008           01266         return          
                      01267 ;
030F   2B10           01268 Mic2li  goto    $+1             ;            (2nd time 2.25 mic sec)
0310   0000           01269         nop                     ;            (2nd time 2.5 mic sec)
0311   2B0C           01270         goto    Mic2l           ; go back    (2nd time 3 micro sec)
                      01271 ;
                      01272 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      01273 ;       Make 2.5 micro S x n (Mic2p5)   ;
                      01274 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0312   00C0           01275 Mic25r  movwf   Mic25c          ; + Wset + call = 1 micro sec 
0313   0000           01276         nop                     ; 1.25 micro sec
                      01277 ;
0314   0000           01278 Mic25l  nop                     ; 1.5 micro sec (2nd time 4 mic sec)
0315   0BC0           01279         decfsz  Mic25c,F        ; If exhausted, 1 micro S hereafter
0316   2B18           01280         goto    Mic25li         ; else go out (2nd time 2.25 mic sec)
0317   0008           01281         return          
                      01282 ;
                      01283 Mic25li Mic                     ;             (2nd time 3.25 mic sec)
0318   2B19               M         goto    $+1
0319   2B1A               M         goto    $+1
031A   2B14           01284         goto    Mic25l          ; go back    (2nd time 3.75 micro sec)
                      01285 ;
                      01286 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      01287 ;       50 Microseconds x n     Mic50   ;
                      01288 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      01289 ;
031B   00C1           01290 Mic50r  movwf   Mic50c          ; set how many 50 microsec (1 micro sec to here)
031C   0000           01291         nop                     ; 1.25 micro sec up to here
                      01292 ;
                      01293 Mic50l  Mic2p5  D'19'           ; + 47.5 = 48.75 mic sec (2nd time 98.75 mic sec)
031D   3013               M         movlw   D'19'
031E   2312               M         call    Mic25r
031F   0000           01294         nop                     ; + 0.25 = 49 micro sec (2nd time 99 mic sec)
                      01295 ; 
0320   0BC1           01296         decfsz  Mic50c,F        ; If exhausted then 1 mic S hereafter
0321   2B23           01297         goto    Mic50li         ; else go out (2nd time 49.75 mic sec)
0322   0008           01298         return
                      01299 ;
                      01300 ;
                      01301 Mic50li Mic                     ;         (2nd time 50.75 mic sec)
0323   2B24               M         goto    $+1
0324   2B25               M         goto    $+1
0325   2B1D           01302         goto    Mic50l          ; go back (2nd time 51.25 mic sec)
                      01303 ;
                      01304 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      01305 ;       Milliseconds x n        (Milli) ;
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 36


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      01306 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      01307 ;
0326   00C2           01308 Millir  movwf   Millic          ; set how many 1 mil sec (1 mic S up to here)
0327   0000           01309         nop                     ; 1.25 micro sec
                      01310 ;
                      01311 Millil  Mic50   D'19'           ; + 50 mic x 19 = 951.25 mic S (2nd, 1951.25) 
0328   3013               M         movlw   D'19'
0329   231B               M         call    Mic50r
                      01312         Mic2p5  D'19'           ; + 47.5 mic = 998.75 micro S  (2nd, 1998.75)
032A   3013               M         movlw   D'19'
032B   2312               M         call    Mic25r
032C   0000           01313         nop                     ; +0.25 mic = 999 micro sec    (2nd, 1999)
                      01314 ;
032D   0BC2           01315         decfsz  Millic,F        ; If  exhausted then 1 micro sec hereafter
032E   2B30           01316         goto    Millili         ; else go out (2nd, 999.75 mic S)
032F   0008           01317         return
                      01318 ;
                      01319 Millili Mic                     ;               (2nd time 1000.75 mic S)
0330   2B31               M         goto    $+1
0331   2B32               M         goto    $+1
0332   2B28           01320         goto    Millil          ; go back (2nd time 1001.25 mic S)
                      01321 ;
                      01322 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      01323 ;       100 Milliseconds x n    (Mil100);
                      01324 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0333   00C3           01325 Mil100r movwf   Mil100c         ;set how many 100 ms(1 micr sec up to here)
0334   0000           01326         nop                     ; 1.25 micro sec
                      01327 ;
                      01328 Milhl   Milli   D'99'           ;+1ms x 99 = 99001.25 micS (2nd,199001.25mic)
0335   3063               M         movlw   D'99'
0336   2326               M         call    Millir
                      01329         Mic50   D'19'           ; + 950 mic = 99951.25 micS(2nd.199951.25mic)
0337   3013               M         movlw   D'19'
0338   231B               M         call    Mic50r
                      01330         Mic2p5  D'19'           ; + 47.5 mic = 99998.75micS(2nd,199998.75mic)
0339   3013               M         movlw   D'19'
033A   2312               M         call    Mic25r
033B   0000           01331         nop                     ; + 0.25 mic = 99999 mic S (2nd,199999 micS)
                      01332 ;
033C   0BC3           01333         decfsz  Mil100c,F       ; If exhausted then 1 micro sec hereafter
033D   2B3F           01334         goto    Milhli          ; else go out (2nd time, 99999.75 mic S)
033E   0008           01335         return
                      01336 ;
                      01337 Milhli  Mic                     ;               (2nd time, 100000.75 mic S)
033F   2B40               M         goto    $+1
0340   2B41               M         goto    $+1
0341   2B35           01338         goto    Milhl           ;               (2nd time, 100001.25 mic S)
                      01339 ;
                      01340 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      01341 ;       Seconds x n      (Secs)         ;
                      01342 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      01343 ;
0342   00C4           01344 Secsr   movwf   Secsc           ; set how many sec ( 1 mic sec up to here)
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 37


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

0343   0000           01345         nop                     ; 1.25 micro sec
                      01346 ;
                      01347 Secsl   Mil100  D'9'            ; 
0344   3009               M         movlw   D'9'
0345   2333               M         call    Mil100r
                      01348         Milli   D'99'           ; + 999 milli sec = 999001.25 micro sec
0346   3063               M         movlw   D'99'
0347   2326               M         call    Millir
                      01349 ;
                      01350         Mic50   D'19'           ; + 950 mic = 999951.25 micro sec
0348   3013               M         movlw   D'19'
0349   231B               M         call    Mic50r
                      01351         Mic2p5  D'19'           ; + 47.5 mic = 999998.75 micro sec
034A   3013               M         movlw   D'19'
034B   2312               M         call    Mic25r
034C   0000           01352         nop                     ; + 0.25 mic = 999999 micro sec
                      01353 ;
034D   0BC4           01354         decfsz  Secsc,F         ; If exhausted then 1 micro sec hereafter
034E   2B50           01355         goto    Secsli          ; else, go out 
034F   0008           01356         return
                      01357 ;
                      01358 Secsli  Mic
0350   2B51               M         goto    $+1
0351   2B52               M         goto    $+1
0352   2B44           01359         goto    Secsl           ; (Second time, Sec + 1.25 micro sec)
                      01360 ;
                      01361 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      01362 ;       Minutes x n      (Mins)         ;
                      01363 ;        Overhead ignored, that is only ;
                      01364 ;        751.25 Mic S even when 100 Min ;
                      01365 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0353   00C5           01366 Minsr   movwf   Minsc           ;set how many minutes from parameter
                      01367 ;
                      01368 Minsl   Secs    D'60'           ; 1 Seconds x 60
0354   303C               M         movlw   D'60'
0355   2342               M         call    Secsr
0356   0BC5           01369         decfsz  Minsc,F
0357   2B54           01370         goto    Minsl
0358   0008           01371         return
                      01372 ;
                      01373 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      01374 ;       End of program                                          ;
                      01375 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      01376         end
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 38


SYMBOL TABLE
  LABEL                             VALUE 

ABDEN                             00000000
ABDOVF                            00000007
ACKDT                             00000005
ACKEN                             00000004
ACKSTAT                           00000006
ACKTIM                            00000007
ADCON0                            0000009D
ADCON1                            0000009E
ADCS0                             00000004
ADCS1                             00000005
ADCS2                             00000006
ADDEN                             00000003
ADFM                              00000007
ADFVR0                            00000000
ADFVR1                            00000001
ADGO                              00000001
ADIE                              00000006
ADIF                              00000006
ADON                              00000000
ADPREF0                           00000000
ADPREF1                           00000001
ADRES                             0000009B
ADRESH                            0000009C
ADRESL                            0000009B
AHEN                              00000001
AN0                               00000000
AN1                               00000001
AN2                               00000002
AN3                               00000004
ANSA0                             00000000
ANSA1                             00000001
ANSA2                             00000002
ANSA4                             00000004
ANSELA                            0000018C
APFCON                            0000011D
APFCON0                           0000011D
Abyte                             00000032
B2De                              00000235
B2Dlp                             0000022D
B2Dr                              0000022A
BAUDCON                           0000019F
BCDday                            0000002F
BCDdow                            0000002E
BCDhr                             0000002D
BCDmin                            0000002C
BCDmon                            00000030
BCDsec                            0000002B
BCDyr                             00000031
BCL1IE                            00000003
BCL1IF                            00000003
BF                                00000000
BOEN                              00000004
BORCON                            00000116
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 39


SYMBOL TABLE
  LABEL                             VALUE 

BORRDY                            00000000
BRG16                             00000003
BRGH                              00000002
BSR                               00000008
BSR0                              00000000
BSR1                              00000001
BSR2                              00000002
BSR3                              00000003
BSR4                              00000004
BSR_SHAD                          00000FE6
Bitctr                            0000003F
Bytectr                           0000003E
Byteh                             00000028
Bytel                             00000029
C                                 00000000
C1HYS                             00000001
C1IE                              00000005
C1IF                              00000005
C1IN0N                            00000001
C1IN1N                            00000004
C1INP                             00000000
C1INTN                            00000006
C1INTP                            00000007
C1NCH0                            00000000
C1OE                              00000005
C1ON                              00000007
C1OUT_CM1CON0                     00000006
C1OUT_PORTA                       00000002
C1PCH0                            00000004
C1PCH1                            00000005
C1POL                             00000004
C1SP                              00000002
C1SYNC                            00000000
CCP1AS                            00000295
CCP1AS0                           00000004
CCP1AS1                           00000005
CCP1AS2                           00000006
CCP1ASE                           00000007
CCP1CON                           00000293
CCP1IE                            00000002
CCP1IF                            00000002
CCP1M0                            00000000
CCP1M1                            00000001
CCP1M2                            00000002
CCP1M3                            00000003
CCP1SEL                           00000000
CCPR1H                            00000292
CCPR1L                            00000291
CDAFVR0                           00000002
CDAFVR1                           00000003
CFGS                              00000006
CHS0                              00000002
CHS1                              00000003
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 40


SYMBOL TABLE
  LABEL                             VALUE 

CHS2                              00000004
CHS3                              00000005
CHS4                              00000006
CKE                               00000006
CKP                               00000004
CLKIN                             00000005
CLKOUT                            00000004
CLKR                              00000004
CLKRCON                           0000039A
CLKRDC0                           00000003
CLKRDC1                           00000004
CLKRDIV0                          00000000
CLKRDIV1                          00000001
CLKRDIV2                          00000002
CLKREN                            00000007
CLKROE                            00000006
CLKRSLR                           00000005
CM1CON0                           00000111
CM1CON1                           00000112
CMOUT                             00000115
CPS0                              00000000
CPS1                              00000001
CPS2                              00000002
CPS3                              00000004
CPSCH0                            00000000
CPSCH1                            00000001
CPSCON0                           0000001E
CPSCON1                           0000001F
CPSON                             00000007
CPSOUT                            00000001
CPSRM                             00000006
CPSRNG0                           00000002
CPSRNG1                           00000003
CREN                              00000004
CSRC                              00000007
C_SHAD                            00000000
CabEO                             
CabSEL                            
CabSO                             
CalEO                             
CalLO                             
CalSEL                            
CalSO                             
CalUO                             
ChMEq                             0000003D
ChMM                              0000004D
ChMS                              00000053
ChMY                              00000059
ChMd                              00000044
ChMh                              00000068
ChMm                              0000006D
ChMw                              00000057
Cl                                00000001
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 41


SYMBOL TABLE
  LABEL                             VALUE 

Clkq                              00000001
Clkt                              00000001
D2Cr                              00000236
D2Czb                             0000023E
DACCON0                           00000118
DACCON1                           00000119
DACEN                             00000007
DACLPS                            00000006
DACOE                             00000005
DACOUT                            00000000
DACPSS0                           00000002
DACPSS1                           00000003
DACR0                             00000000
DACR1                             00000001
DACR2                             00000002
DACR3                             00000003
DACR4                             00000004
DC                                00000001
DC1B0                             00000004
DC1B1                             00000005
DC_SHAD                           00000001
DEVset                            
DHEN                              00000000
DHT11                             00000000
DHTrd                             0000018F
DHbc                              000001B2
DHbcl                             000001B4
DHbye                             000001C3
DHcksr                            000001CB
DHeck                             000001C1
DHnxtbi                           000001C9
DHsone                            000001BA
DHszero                           000001C0
DS3231                            000000D0
D_NOT_A                           00000005
DataLen                           00000037
Dbyte                             00000033
Dig1                              00000023
Dig10                             00000022
Dl                                00000002
DspHr                             000001FF
DspTgo                            000001F4
DspTime                           00000086
DspTr                             000001D6
ECCP1AS                           00000295
EEADR                             00000191
EEADRH                            00000192
EEADRL                            00000191
EECON1                            00000195
EECON2                            00000196
EEDAT                             00000193
EEDATH                            00000194
EEDATL                            00000193
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 42


SYMBOL TABLE
  LABEL                             VALUE 

EEIE                              00000004
EEIF                              00000004
EEPGD                             00000007
Ebyte                             00000034
F                                 00000001
FERR                              00000002
FLT0                              00000002
FREE                              00000004
FSR0                              00000004
FSR0H                             00000005
FSR0H_SHAD                        00000FE9
FSR0L                             00000004
FSR0L_SHAD                        00000FE8
FSR1                              00000006
FSR1H                             00000007
FSR1H_SHAD                        00000FEB
FSR1L                             00000006
FSR1L_SHAD                        00000FEA
FVRCON                            00000117
FVREN                             00000007
FVRRDY                            00000006
GCEN                              00000007
GIE                               00000007
GO                                00000001
GO_NOT_DONE                       00000001
HFIOFL                            00000003
HFIOFR                            00000004
HFIOFS                            00000000
I2Cadr                            00000036
I2Crblp                           00000292
I2Crbyt                           0000028D
I2Crcv                            
I2Crcvr                           00000288
I2Csnd                            
I2Csndr                           0000027B
I2Cstar                           000002D4
I2Cstat                           
I2Cstop                           
I2Cstpr                           000002DB
INDF0                             00000000
INDF1                             00000001
INTCON                            0000000B
INTE                              00000004
INTEDG                            00000006
INTF                              00000001
IOCAF                             00000393
IOCAF0                            00000000
IOCAF1                            00000001
IOCAF2                            00000002
IOCAF3                            00000003
IOCAF4                            00000004
IOCAF5                            00000005
IOCAN                             00000392
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 43


SYMBOL TABLE
  LABEL                             VALUE 

IOCAN0                            00000000
IOCAN1                            00000001
IOCAN2                            00000002
IOCAN3                            00000003
IOCAN4                            00000004
IOCAN5                            00000005
IOCAP                             00000391
IOCAP0                            00000000
IOCAP1                            00000001
IOCAP2                            00000002
IOCAP3                            00000003
IOCAP4                            00000004
IOCAP5                            00000005
IOCIE                             00000003
IOCIF                             00000000
IRCF0                             00000003
IRCF1                             00000004
IRCF2                             00000005
IRCF3                             00000006
InitP                             
LATA                              0000010C
LATA0                             00000000
LATA1                             00000001
LATA2                             00000002
LATA4                             00000004
LATA5                             00000005
LATI2C                            0000010C
LATdht                            0000010C
LCD2004                           0000004E
LCDclr                            
LCDi2cA                           00000027
LCDinir                           00000029
LCDl                              
LCDsA                             
LCDsetC                           
LCDw                              
LCDwb                             
LFIOFR                            00000001
LWLO                              00000005
MC1OUT                            00000000
MDBIT                             00000000
MDCARH                            0000039F
MDCARL                            0000039E
MDCH0                             00000000
MDCH1                             00000001
MDCH2                             00000002
MDCH3                             00000003
MDCHODIS                          00000007
MDCHPOL                           00000006
MDCHSYNC                          00000005
MDCIN1                            00000002
MDCIN2                            00000004
MDCL0                             00000000
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 44


SYMBOL TABLE
  LABEL                             VALUE 

MDCL1                             00000001
MDCL2                             00000002
MDCL3                             00000003
MDCLODIS                          00000007
MDCLPOL                           00000006
MDCLSYNC                          00000005
MDCON                             0000039C
MDEN                              00000007
MDMIN                             00000001
MDMS0                             00000000
MDMS1                             00000001
MDMS2                             00000002
MDMS3                             00000003
MDMSODIS                          00000007
MDOE                              00000006
MDOPOL                            00000004
MDOUT_MDCON                       00000003
MDOUT_PORTA                       00000000
MDSLR                             00000005
MDSRC                             0000039D
MFIOFR                            00000002
Mainp                             0000001F
Mddayr                            0000010E
Mddowr                            00000107
Mdhrr                             00000100
Mdminr                            000000F9
Mdmonr                            00000115
Mdnext                            00000123
Mdsecr                            000000F2
Mdsetup                           
Mdyrr                             0000011C
Mic                               
Mic2                              
Mic25c                            00000040
Mic25l                            00000314
Mic25li                           00000318
Mic25r                            00000312
Mic2l                             0000030C
Mic2li                            0000030F
Mic2p5                            
Mic2r                             0000030B
Mic5                              
Mic50                             
Mic50c                            00000041
Mic50l                            0000031D
Mic50li                           00000323
Mic50r                            0000031B
Mil100                            
Mil100c                           00000043
Mil100r                           00000333
Milhl                             00000335
Milhli                            0000033F
Milli                             
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 45


SYMBOL TABLE
  LABEL                             VALUE 

Millic                            00000042
Millil                            00000328
Millili                           00000330
Millir                            00000326
Mins                              
Minsc                             00000045
Minsl                             00000354
Minsr                             00000353
ModeChr                           00000025
ModeMax                           00000006
ModeMin                           00000000
ModeN                             00000024
Modeyr                            00000006
Moji1                             00000020
Moji2                             00000021
Msmax                             00000137
NOT_BOR                           00000000
NOT_DONE                          00000001
NOT_MCLR                          00000003
NOT_PD                            00000003
NOT_POR                           00000001
NOT_RI                            00000002
NOT_RMCLR                         00000003
NOT_T1SYNC                        00000002
NOT_TO                            00000004
NOT_WPUEN                         00000007
OERR                              00000001
OPTION_REG                        00000095
OSC1                              00000005
OSC2                              00000004
OSCCON                            00000099
OSCSTAT                           0000009A
OSCTUNE                           00000098
OSFIE                             00000007
OSFIF                             00000007
OSTS                              00000005
P                                 00000004
P1BSEL                            00000001
P1DC0                             00000000
P1DC1                             00000001
P1DC2                             00000002
P1DC3                             00000003
P1DC4                             00000004
P1DC5                             00000005
P1DC6                             00000006
P1M0                              00000006
P1M1                              00000007
P1RSEN                            00000007
PCIE                              00000006
PCL                               00000002
PCLATH                            0000000A
PCLATH_SHAD                       00000FE7
PCON                              00000096
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 46


SYMBOL TABLE
  LABEL                             VALUE 

PEIE                              00000006
PEN                               00000002
PIE1                              00000091
PIE2                              00000092
PIR1                              00000011
PIR2                              00000012
PLLR                              00000006
PORTA                             0000000C
PORTI2C                           0000000C
PORTdht                           0000000C
PORTsw                            0000000C
PR2                               0000001B
PS0                               00000000
PS1                               00000001
PS2                               00000002
PSA                               00000003
PSS1AC0                           00000002
PSS1AC1                           00000003
PSS1BD0                           00000000
PSS1BD1                           00000001
PSTR1CON                          00000296
PWM1CON                           00000294
RA0                               00000000
RA1                               00000001
RA2                               00000002
RA3                               00000003
RA4                               00000004
RA5                               00000005
RCEN                              00000003
RCIDL                             00000006
RCIE                              00000005
RCIF                              00000005
RCREG                             00000199
RCSTA                             0000019D
RD                                00000000
RSEN                              00000001
RTCdata                           0000002B
RTCi2cA                           00000068
RTCmem                            0000002A
RTCrdr                            00000074
RTCudm                            000000E9
RTCupdr                           000000E5
RTCwtr                            00000186
RX9                               00000006
RX9D                              00000000
RXDTSEL                           00000007
R_NOT_W                           00000002
Rbcont                            000002A2
Rbend                             000002A4
Rbith                             0000029B
Rbitl                             00000299
Rbitnxt                           0000029C
Rdspr                             00000148
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 47


SYMBOL TABLE
  LABEL                             VALUE 

Rie                               00000184
Rigo                              00000174
Rinc                              0000012B
Rincr                             00000169
Rnxtm                             0000012F
Rnxtme                            00000136
RvMax                             00000026
RvMin                             00000027
Rwrite                            0000013A
S                                 00000003
SBCDE                             00000002
SBOREN                            00000007
SCIE                              00000005
SCK                               00000001
SCKP                              00000004
SCL                               00000001
SCS0                              00000000
SCS1                              00000001
SDA                               00000002
SDAHT                             00000003
SDI                               00000002
SDO1SEL                           00000006
SDOSEL                            00000006
SEN                               00000000
SENDB                             00000003
SMP                               00000007
SPBRG                             0000019B
SPBRGH                            0000019C
SPBRGL                            0000019B
SPEN                              00000007
SPLLEN                            00000007
SRCLK0                            00000004
SRCLK1                            00000005
SRCLK2                            00000006
SRCON0                            0000011A
SRCON1                            0000011B
SREN                              00000005
SRI                               00000001
SRLEN                             00000007
SRNQ                              00000005
SRNQEN                            00000002
SRPR                              00000000
SRPS                              00000001
SRQ                               00000002
SRQEN                             00000003
SRRC1E                            00000000
SRRCKE                            00000002
SRRPE                             00000003
SRSC1E                            00000004
SRSCKE                            00000006
SRSPE                             00000007
SS1SEL                            00000005
SSP1ADD                           00000212
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 48


SYMBOL TABLE
  LABEL                             VALUE 

SSP1BUF                           00000211
SSP1CON1                          00000215
SSP1CON2                          00000216
SSP1CON3                          00000217
SSP1IE                            00000003
SSP1IF                            00000003
SSP1MSK                           00000213
SSP1STAT                          00000214
SSPADD                            00000212
SSPBUF                            00000211
SSPCON                            00000215
SSPCON1                           00000215
SSPCON2                           00000216
SSPCON3                           00000217
SSPEN                             00000005
SSPM0                             00000000
SSPM1                             00000001
SSPM2                             00000002
SSPM3                             00000003
SSPMSK                            00000213
SSPOV                             00000006
SSPSTAT                           00000214
SSSEL                             00000005
STATUS                            00000003
STATUS_SHAD                       00000FE4
STKOVF                            00000007
STKPTR                            00000FED
STKUNF                            00000006
STR1A                             00000000
STR1B                             00000001
STR1C                             00000002
STR1D                             00000003
STR1SYNC                          00000004
SWDTEN                            00000000
SYNC                              00000004
Sackr                             000002AA
Sbyte                             0000003D
Sdata                             00000280
Secs                              
Secsc                             00000044
Secsl                             00000344
Secsli                            00000350
Secsr                             00000342
Sendr                             000002E8
Sloop                             000002EA
Slpdh                             000002EE
Slpnxt                            000002EF
Snackr                            000002BA
Startp                            00000005
T0CKI                             00000002
T0CS                              00000005
T0IE                              00000005
T0IF                              00000002
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 49


SYMBOL TABLE
  LABEL                             VALUE 

T0SE                              00000004
T0XCS                             00000000
T1CKI                             00000005
T1CKPS0                           00000004
T1CKPS1                           00000005
T1CON                             00000018
T1GCON                            00000019
T1GGO                             00000003
T1GGO_NOT_DONE                    00000003
T1GPOL                            00000006
T1GSEL                            00000003
T1GSPM                            00000004
T1GSS0                            00000000
T1GSS1                            00000001
T1GTM                             00000005
T1GVAL                            00000002
T1OSCEN                           00000003
T1OSCR                            00000007
T1OSI                             00000005
T1OSO                             00000004
T2CKPS0                           00000000
T2CKPS1                           00000001
T2CON                             0000001C
T2OUTPS0                          00000003
T2OUTPS1                          00000004
T2OUTPS2                          00000005
T2OUTPS3                          00000006
TMR0                              00000015
TMR0CS                            00000005
TMR0IE                            00000005
TMR0IF                            00000002
TMR0SE                            00000004
TMR1                              00000016
TMR1CS0                           00000006
TMR1CS1                           00000007
TMR1GE                            00000007
TMR1GIE                           00000007
TMR1GIF                           00000007
TMR1H                             00000017
TMR1IE                            00000000
TMR1IF                            00000000
TMR1L                             00000016
TMR1ON                            00000000
TMR2                              0000001A
TMR2IE                            00000001
TMR2IF                            00000001
TMR2ON                            00000002
TMdspl                            00000161
TMdspr                            0000015B
TOSH                              00000FEF
TOSL                              00000FEE
TRISA                             0000008C
TRISA0                            00000000
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 50


SYMBOL TABLE
  LABEL                             VALUE 

TRISA1                            00000001
TRISA2                            00000002
TRISA3                            00000003
TRISA4                            00000004
TRISA5                            00000005
TRISI2C                           0000008C
TRISdht                           0000008C
TRMT                              00000001
TSEN                              00000005
TSRNG                             00000004
TUN0                              00000000
TUN1                              00000001
TUN2                              00000002
TUN3                              00000003
TUN4                              00000004
TUN5                              00000005
TX9                               00000006
TX9D                              00000000
TXCKSEL                           00000002
TXEN                              00000005
TXIE                              00000004
TXIF                              00000004
TXREG                             0000019A
TXSTA                             0000019E
UA                                00000001
W                                 00000000
WCOL                              00000007
WDTCON                            00000097
WDTPS0                            00000001
WDTPS1                            00000002
WDTPS2                            00000003
WDTPS3                            00000004
WDTPS4                            00000005
WPUA                              0000020C
WPUA0                             00000000
WPUA1                             00000001
WPUA2                             00000002
WPUA3                             00000003
WPUA4                             00000004
WPUA5                             00000005
WR                                00000001
WREG                              00000009
WREG_SHAD                         00000FE5
WREN                              00000002
WRERR                             00000003
WUE                               00000001
Wbyte                             00000035
Z                                 00000002
Z_SHAD                            00000002
_BOREN_NSLEEP                     00003DFF
_BOREN_OFF                        000039FF
_BOREN_ON                         00003FFF
_BOREN_SBODEN                     00003BFF
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 51


SYMBOL TABLE
  LABEL                             VALUE 

_BORV_19                          00003FFF
_BORV_HI                          00003BFF
_BORV_LO                          00003FFF
_CLKOUTEN_OFF                     00003FFF
_CLKOUTEN_ON                      000037FF
_CONFIG1                          00008007
_CONFIG2                          00008008
_CPD_OFF                          00003FFF
_CPD_ON                           00003EFF
_CP_OFF                           00003FFF
_CP_ON                            00003F7F
_DEVID1                           00008006
_FCMEN_OFF                        00001FFF
_FCMEN_ON                         00003FFF
_FOSC_ECH                         00003FFF
_FOSC_ECL                         00003FFD
_FOSC_ECM                         00003FFE
_FOSC_EXTRC                       00003FFB
_FOSC_HS                          00003FFA
_FOSC_INTOSC                      00003FFC
_FOSC_LP                          00003FF8
_FOSC_XT                          00003FF9
_IDLOC0                           00008000
_IDLOC1                           00008001
_IDLOC2                           00008002
_IDLOC3                           00008003
_IESO_OFF                         00002FFF
_IESO_ON                          00003FFF
_LVP_OFF                          00001FFF
_LVP_ON                           00003FFF
_MCLRE_OFF                        00003FBF
_MCLRE_ON                         00003FFF
_PLLEN_OFF                        00003EFF
_PLLEN_ON                         00003FFF
_PWRTE_OFF                        00003FFF
_PWRTE_ON                         00003FDF
_STVREN_OFF                       00003DFF
_STVREN_ON                        00003FFF
_WDTE_NSLEEP                      00003FF7
_WDTE_OFF                         00003FE7
_WDTE_ON                          00003FFF
_WDTE_SWDTEN                      00003FEF
_WRT_ALL                          00003FFC
_WRT_BOOT                         00003FFE
_WRT_HALF                         00003FFD
_WRT_OFF                          00003FFF
__12F1822                         00000001
binH                              0000003A
binL                              0000003B
chkSum                            0000003C
dayMax                            00000031
dayMin                            00000001
dowMax                            00000007
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 52


SYMBOL TABLE
  LABEL                             VALUE 

dowMin                            00000001
hrMax                             00000023
hrMin                             00000000
lClr                              00000270
lSetChr                           0000025F
lSetChs                           00000264
lSetCsr                           0000024D
lSetCss                           00000254
lSndALr                           00000246
lSndAr                            00000241
lcdAr                             0000004F
lcdAw                             0000004E
minMax                            00000059
minMin                            00000000
monMax                            00000012
monMin                            00000001
rhH                               00000038
rhL                               00000039
rtcAr                             000000D1
rtcAw                             000000D0
secMax                            00000059
secMin                            00000000
swMode                            00000003
swSet                             00000005
swTime                            00000004
tcH                               0000003A
tcL                               0000003B
yrMax                             00000099
yrMin                             00000000


MEMORY USAGE MAP ('X' = Used,  '-' = Unused)

0000 : X---XXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
0040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
0080 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
00C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
0100 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
0140 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
0180 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
01C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
0200 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
0240 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
0280 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
02C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
0300 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
MPASM  5.49    U210103-RTC-DHT11-LCD-V00S.ASM   1-4-2021  10:52:02         PAGE 53


MEMORY USAGE MAP ('X' = Used,  '-' = Unused)


0340 : XXXXXXXXXXXXXXXX XXXXXXXXX------- ---------------- ----------------
8000 : -------XX------- ---------------- ---------------- ----------------

All other memory blocks unused.

Program Memory Words Used:   856
Program Memory Words Free:  1192


Errors   :     0
Warnings :     0 reported,     0 suppressed
Messages :    19 reported,     0 suppressed

 以上、ごく簡単な初荷でした。小サイズのPICが好きな方にもしお役に立てれば幸いです。

 

©2021 Akira Tominaga, All rights reserved.