Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

Receiver problem

Status
Not open for further replies.

smileguitar

New Member
Lcd Check

Code:
	LIST P=16F877
	#INCLUDE <P16F877.INC>
	errorlevel -302
	errorlevel -207
	__CONFIG _CP_OFF & _PWRTE_ON & _XT_OSC & _WDT_OFF

;==========VARIABLE===============

			CBLOCK	0X20
			NUM1		;FOR NUMBER
			NUM2		;FOR NUMBER
			NUM3		;FOR NUMBER
			NUM4		;FOR NUMBER
			D1
			D2
			D3
			D4
			ENDC

			ORG	0X00
			GOTO	START

TEXT		CALL	LCD_INIT
		BSF	PORTB,2		;R/S SET TO '1'
		MOVLW	H'45'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'6E'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'74'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'65'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'72'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'20'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'43'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'6F'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'64'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'65'
		MOVWF	PORTD
		CALL	CLOCK_E
		RETLW	0X00

WRONG		CALL	LCD_INIT
		CALL	LCD_LINE2
		BSF	PORTB,2		;R/S SET TO '1'
		MOVLW	H'57'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'72'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'6F'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'6E'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'67'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'20'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'43'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'6F'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'64'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'65'
		MOVWF	PORTD
		CALL	CLOCK_E
		RETLW	0X00

CORRECT		CALL	LCD_INIT
		CALL	LCD_LINE2
		BSF	PORTB,2		;R/S SET TO '1'
		MOVLW	H'43'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'6F'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'72'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'72'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'65'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'63'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'74'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'20'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'43'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'6F'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'64'
		MOVWF	PORTD
		CALL	CLOCK_E
		MOVLW	H'65'
		MOVWF	PORTD
		CALL	CLOCK_E
		RETLW	0X00

START		BSF	STATUS,RP0
		MOVLW	B'00000001'
		MOVWF	TRISB
		MOVLW	B'00000000'
		MOVWF	TRISD
		BCF	STATUS,RP0
		CLRF	PORTB
		CLRF	PORTD
		GOTO	BEGIN

BEGIN		CALL	TEXT
		BTFSC	PORTB,0		;SKIP IF ENTER=1
		GOTO	BEGIN		;IF ENTER=0 GO TO START

ONE		MOVLW	D'1'
		MOVWF	NUM1		;SET NUM1=1
		SUBLW	B'00000001'	;NUM1-1
		BTFSS	STATUS,Z	;NUM1-1=0?
		GOTO	TWO		;YES, GO TO NEXT NUMBER
		GOTO	WRONG

TWO		MOVLW	D'2'		
		MOVWF	NUM2		;SET NUM1=2
		SUBLW	B'00000010'	;NUM2-2
		BTFSS	STATUS,Z	;NUM2-2=0?
		GOTO	THREE		;YES, GO TO NEXT NUMBER
		GOTO	WRONG

THREE		MOVLW	D'3'		
		MOVWF	NUM3		;SET NUM1=3
		SUBLW	B'00000011'	;NUM3-3	
		BTFSS	STATUS,Z	;NUM3-3=0?
		GOTO	FOUR		;YES, GO TO NEXT NUMBER
		GOTO	WRONG

FOUR		MOVLW	D'4'		
		MOVWF	NUM4		;SET NUM1=4
		SUBLW	B'00000100'	;NUM4-4
		BTFSS	STATUS,Z	;NUM4-4=0?
		GOTO	WRONG		;NO, RETURN TO START
		GOTO	CORRECT
		BSF	PORTB,5

LCD_INIT	BCF	PORTB,2
		MOVLW	B'00110000'
		MOVWF	PORTD		;FUNCTION SET: 8 BIT INTERFACE
		CALL	CLOCK_E
		MOVLW	B'00001100'
		MOVWF	PORTD		;DISPALY & CURSOR: SET TO DISPLAY ON; CURSOR UNDERLINE OFF; CURSOR BLINK OFF
		CALL	CLOCK_E
		MOVLW	B'00111000'
		MOVWF	PORTD		;FUNCTION SET: 8 BIT; 2 LINE MODE; 5X10 DOT FORMAT
		CALL	CLOCK_E
		MOVWF	B'00000001'
		MOVWF	PORTD		;CLEAR DISPLAY
		CALL	CLOCK_E
		MOVLW	B'00000110'
		MOVWF	PORTD		;CHARACTER ENTRY MODE: INCREMENT; DISPLAY SHIFT ON
		CALL	CLOCK_E
		RETLW	0X00

LCD_LINE2	BCF	PORTB,2		; R/S SET TO '0'
		MOVLW	B'11000000'
		MOVWF	PORTD		; JUMP TO 2ND LINE
		CALL	CLOCK_E
		RETLW	0X00

CLOCK_E		BSF	PORTB,1
		CALL	DELAY2
		BCF	PORTB,1
		RETLW	0X00

DELAY1		MOVLW	D'130'
		MOVWF	D2
		MOVLW	D'221'
		MOVWF	D1
LOOP1		DECFSZ	D1,1
		GOTO	LOOP1
		DECFSZ	D2,1
		GOTO	LOOP1
		RETLW	0X00

DELAY2		MOVLW	D'13'		;DELAY 10ms
		MOVWF	D4
		MOVLW	D'251'
		MOVWF	D3
LOOP2		DECFSZ	D3,1
		GOTO	LOOP2
		DECFSZ	D4,1
		GOTO	LOOP2
		RETLW	0X00

		END

Hello everyone. I'm doing a project that using infrared to open the door.Transmitter is keypad for keying passwords and send to receiver (what I'm doing) to display the passwards in '*' and compare the passwards are correct or incorrect with telling the user by LCD. Above is the coding I created. For my concept is when the keypad is being press (like enter), I'll get the signal and compare the original passwards. Before that, "Enter Code" is promted.

I have download this coding into PIC 16F877 (PIC I'm using), and test it. I found a problem before I press a button, which the promted "Enter Code" is displaying unstopable like "Enter Code Enter Code Enter Code.....". Besides that, when I press the button, LCD display "Enter Code Enter Code Enter Code..Wrong Code Enter Code...." What is the problem? How could I stop it? Is my coding correct?

Someone can give me a hand solving my problem? I'm appreciating it. Thanks in advanced.
 

Attachments

  • LCD+CHECK.asm
    4.2 KB · Views: 110
Last edited:
Code:
BEGIN		CALL	TEXT
		BTFSC	PORTB,0		;SKIP IF ENTER=1
		GOTO	BEGIN		;IF ENTER=0 GO TO START
Obviously, you shouldn't be looping back to BEGIN all the time and printing the greeting message over and over:
Code:
BEGIN		CALL	TEXT
ChkEnter        BTFSC	PORTB,0		;SKIP IF ENTER=1
		GOTO	ChkEnter		;IF ENTER=0 GO TO START


Also your code:
Code:
	GOTO	WRONG		;NO, RETURN TO START
		GOTO	CORRECT
Is wrong no matter which goto you choose because both WRONG and CORRECT should be called and not goto'd.
 
Last edited:
Ooo...now I reallise I made a big mistake....

Thanks!!

Erm... Could know how can I make LCD in sleep if not using?
 
Last edited:
Hello! I've a problem again....

when the button is pressed, the LCD is flashing, after that show "Correct Code" once the codes are correct. But the Enter is not clear, how could I do it? can anyone explain to me?

Thanks in advance!
 
blueroomelectronics said:
There is a display ON/OFF bit you can turn off to save a little power.

so, I need to set the display OFF after the the test displaying, am I right? Is it call the sleep mode of LCD?
 
smileguitar said:
so, I need to set the display OFF after the the test displaying, am I right? Is it call the sleep mode of LCD?

Possibly, they are fairly low power even when running. Hook up a meter and try it out.
 
Status
Not open for further replies.

Latest threads

New Articles From Microcontroller Tips

Back
Top