Sie sind auf Seite 1von 19

;**********************************************************************

; This file is a basic code template for assembly code generation *


; on the PICmicro PIC16F877A. This file contains the basic code *
; building blocks to build upon. *
; *
; *
;**********************************************************************
; *
; Filename: LCD877A.asm *
; Date: 25/02/2003 *
; File Version: 1.2 *
; Author: Free electronics projects
*
; Company: *
; *
;**********************************************************************
; *
; Files required: *
; *
; *
; *
;**********************************************************************
; *
; Notes: THIS IS TEST PROGRAM FOR LCD
*
; PD0 TO PD7 -->
*
; *
; *
; *
;**********************************************************************

list p=16f877A ; list directive to define processor


#include <p16f877A.inc> ; processor specific variable definitions

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_OFF & _XT_OSC & _WRT_OFF &
_LVP_OFF & _CPD_OFF

; '__CONFIG' directive is used to embed configuration data within .asm file.


; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.

;******************************************************************

;***** VARIABLE DEFINITIONS


w_temp EQU 0x71 ; variable used for context saving
status_temp EQU 0x72 ; variable used for context saving
pclath_temp EQU 0x73 ; variable used for context saving

;**** TEMP RAM


cblock 0x24
COUNTH
COUNTL
COUNTH1
COUNTL1
count
ch
DH
MH
Dl
ip1 ; I/P RECIVER DATA
ip2 ; I/P RECIVER DATA

endc

TENMSH equ D'13'


TENMSL equ D'250'

;**********************************************************************
ORG 0x000 ; processor reset vector
clrf PCLATH
nop ; nop required for icd
goto start ; go to beginning of program

ORG 0x004 ; interrupt vector location

movwf w_temp ; save off current W register contents


movf STATUS,w ; move status register into W register
movwf status_temp ; save off contents of STATUS register
movf PCLATH,w ; move pclath register into w register
movwf pclath_temp ; save off contents of PCLATH register

; isr code can go here or be located as a call subroutine elsewhere

movf pclath_temp,w ; retrieve copy of PCLATH register


movwf PCLATH ; restore pre-isr PCLATH register contents
movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
retfie ; return from interrupt

; Start at the reset vector

start
banksel TRISC
movlw 0xFF
movwf TRISC

banksel TRISB
movlw 0x00
movwf TRISB
banksel TRISD
movlw 0x00
movwf TRISD
banksel TRISA ;assembler directive to select bank
movlw 0x00
movwf TRISA ;set all PORTA pins as inputs
banksel ADCON1
movlw 0x06
MOVWF ADCON1
BANKSEL TRISE
MOVLW 0x00
movwf TRISE
banksel ch
movlw 0x00
movwf PORTB
movwf PORTD
movwf PORTE
call initlcd

main
banksel ch

;;; bsf PORTE,2


;;; call ldly
;;; call ldly
;;; bcf PORTE,2

;;; call ldly


;;; call ldly

;GOTO main
up
BANKSEL MH
call tenms
movf PORTC,W
movwf ip1
movwf ip2 ; I/P RECIVER DATA
;swapf inp1,w
;;;;MOVWF PORTB
; call ldly
call tenms
;call main1
;goto main
;up
call tenms
movlw 0x01 ; comparision of I/P data
XORWF ip2,0
BTFSC STATUS,Z
goto p1 ; data0
;call tenms

movlw 0x02; comparision of I/P data


XORWF ip2,0
BTFSC STATUS,Z
goto p2 ; data0
;call tenms

;BTFSC ip2,0
movlw 0x03 ; comparision of I/P data
XORWF ip2,0
BTFSC STATUS,Z
goto p3 ; data1
;call tenms

movlw 0x04 ; comparision of I/P data


XORWF ip2,0
BTFSC STATUS,Z
goto p4 ; data4
; call tenms

movlw 0x05; comparision of I/P data


XORWF ip2,0
BTFSC STATUS,Z
goto p5 ; data5
; call tenms

movlw 0x06 ; comparision of I/P data


XORWF ip2,0
BTFSC STATUS,Z
goto p6 ; data6
; call tenms

movlw 0x07 ; comparision of I/P data


XORWF ip2,0
BTFSC STATUS,Z
goto p7 ; data7

movlw 0x08 ; comparision of I/P data


XORWF ip2,0
BTFSC STATUS,Z
goto p8 ; data8

movlw 0x09 ; comparision of I/P data


XORWF ip2,0
BTFSC STATUS,Z
goto p9 ; data10

movlw 0x0A ; comparision of I/P data


XORWF ip2,0
BTFSC STATUS,Z
goto p10 ; data11

movlw 0x0B ; comparision of I/P data


XORWF ip2,0
BTFSC STATUS,Z
goto p11 ; data12

movlw 0x0C ; comparision of I/P data


XORWF ip2,0
BTFSC STATUS,Z
goto p12 ; data13

movlw 0x0D ; comparision of I/P data


XORWF ip2,0
BTFSC STATUS,Z
goto p23 ; data14

movlw 0x0E ; comparision of I/P data


XORWF ip2,0
BTFSC STATUS,Z
goto p24 ; data14

;movlw 0x0F ; comparision of I/P data


; XORWF ip2,0
;BTFSC STATUS,Z
;goto p15 ; data14
; call tenms
goto up

main1
banksel ch
;bsf PORTE,2
call initlcd
;here goto here
call ldly
call ldly
; bcf PORTE,2
return

p1
banksel ch
CLRF PORTB
movf ip2,w
movwf PORTB

;bsf PORTE,2
CALL ldly
bcf PORTE,2
call lcd1
call tenms
call ldly

bcf PORTE,2
goto up

p2
banksel ch
CLRF PORTB
movf ip2,w
movwf PORTB
bsf PORTE,2
call ldly
;bcf PORTE,2
call lcd2
call tenms
call ldly

bcf PORTE,2
goto up
;----
p3
banksel ch
CLRF PORTB
movf ip2,w; O.K
movwf PORTB
bsf PORTE,2
call ldly
bcf PORTE,2
bcf PORTE,2
call lcd3
call tenms
call ldly
bcf PORTE,2
goto up

p4
banksel ch
CLRF PORTB
movf ip2,w
movwf PORTB
;bsf PORTE,2
call ldly
bcf PORTE,2
call lcd4
call tenms
call ldly
bcf PORTE,2
goto up

p5
banksel ch
CLRF PORTB
movf ip2,w
movwf PORTB
bsf PORTE,2
call lcd5
call tenms
call ldly
bcf PORTE,2
goto up

p6
banksel ch
CLRF PORTB
movf ip2,w
movwf PORTB
;bsf PORTE,2
call lcd6
call tenms
call ldly
bcf PORTE,2
goto up
p7
banksel ch
CLRF PORTB
movf ip2,w
movwf PORTB
; bsf PORTE,2
call lcd7
call tenms
call ldly
bcf PORTE,2
goto up

p8
banksel ch
CLRF PORTB
movf ip2,w
movwf PORTB
; bsf PORTE,2
call lcd8
call tenms
call ldly
bcf PORTE,2
goto up
p9
banksel ch
CLRF PORTB
movf ip2,w
movwf PORTB
;bsf PORTE,2
call lcd9
call tenms
call ldly
bcf PORTE,2
goto up
p10
banksel ch
CLRF PORTB
movf ip2,w
movwf PORTB
; bsf PORTE,2
call lcd10
call tenms
call ldly
bcf PORTE,2
goto up

p11
banksel ch
CLRF PORTB
movf ip2,w
movwf PORTB
;bsf PORTE,2
call lcd11
call tenms
call ldly
bcf PORTE,2
goto up

p12
banksel ch
CLRF PORTB
movf ip2,w
movwf PORTB
;bsf PORTE,2
call lcd12
call tenms
call ldly
bcf PORTE,2
goto up

p23
banksel ch
CLRF PORTB
movf ip2,w
movwf PORTB
; bsf PORTE,2
call lcd23
call tenms
call ldly
bcf PORTE,2
goto up

p24
banksel ch
CLRF PORTB
movf ip2,w
movwf PORTB
; bsf PORTE,2
call lcd24
call tenms
call ldly
bcf PORTE,2
goto up

initlcd
call tenms
call tenms
call tenms
call tenms

movlw 0x30
call lcdout
call tenms
call tenms

movlw 0x30
call lcdout
call tenms

movlw 0x30
call lcdout
call tenms

; movlw 0x30
; call lcdout
;call tenms

movlw 0x3C
call lcdout
call tenms

movlw 0x0E
call lcdout
call tenms

movlw 0x06
call lcdout
call tenms

movlw 0x01
call lcdout
call tenms

LCDA
movlw 0x80 ; ADDRESS OF RAM LOCATION OF LCD
call lcdout ; ( STARTING ADDRESS = 80 )
call tenms

movlw 'C' ; F start


call asc
call tenms

movlw 'P' ; U
call asc
call tenms

movlw ' ' ; Z MOTOR ON


call asc
call tenms

movlw ' ' ; Z 83 OK===ER


call asc
call tenms

movlw ' '; O 84


call asc
call tenms

movlw 0x20; n 85 D = DRY RUN


call asc
call tenms

movlw 'C' ; F 86 R
call asc
call tenms

movlw 'B' ; O 87
call asc
call tenms

movlw ' ' ; N 88


call asc
call tenms

movlw ' ' ; T O==E


call asc
call tenms

movlw 0x20 ; r 8A SWITCH ER OR OK


call asc
call tenms

movlw 'A' ; O
call asc
call tenms

movlw 'F' ; L 8C
call asc
call tenms

movlw 0x20 ; E 8D
call asc
call tenms

movlw ' ' ; r


call asc
call tenms

movlw ' ' ; r 8F


call asc
call tenms

;;;;;;;;;;;;;;;;;;;;;;;;;;

movlw 0xc0 ; COMMAND MODE


call lcdout
call tenms

movlw 'N' ; FAULT 1


call asc
call tenms

movlw 'G' ;
call asc
call tenms

movlw 0x20 ;
call asc
call tenms

movlw ' ' ; C3 ok==er


call asc
call tenms
movlw ' ' ;
call asc
call tenms

movlw 0x20 ; FAULT 2 C5


call asc
call tenms

movlw 'O' ; BLANK


call asc
call tenms

movlw 'T' ; C7
call asc
call tenms

movlw 0x20 ; A
call asc
call tenms

movlw ' ' ; B C9 ok==er


call asc
call tenms

movlw ' ' ; FAULT 3 CA


call asc
call tenms

movlw 0x20;
call asc
call tenms

movlw 'O' ; CC
call asc
call tenms

movlw 'L' ;
call asc
call tenms

movlw 0x20 ;
call asc
call tenms

movlw ' ' ; CF y==n


call asc
call tenms

return
;------------

tenms
nop
movlw .13
movwf COUNTH
movlw .245
movwf COUNTL

ten
decfsz COUNTL,F
goto ten
decfsz COUNTH,F
goto ten
return

tenms1
nop
movlw .19
movwf COUNTH1
movlw .245
movwf COUNTL1

ten1
decfsz COUNTL,F
goto ten1
decfsz COUNTH,F
goto ten1
return

ldly
call tenms
call tenms
call tenms
call tenms
call tenms
call tenms
call tenms
call tenms
call tenms
;call tenms
; call tenms
; call tenms
; call tenms
; call tenms
;;call tenms
;call tenms
; call tenms
;call tenms
;call tenms
;call tenms
;call tenms
;call tenms
; call tenms
;call tenms
;call tenms
; call tenms
; call tenms
; call tenms
;call tenms
;call tenms
return

lcd1
BANKSEL MH

movlw 0x80 ; COMMAND MODE


call lcdout
call tenms

movlw 'C' ; F start


call asc
call tenms

movlw 'P' ; U
call asc
call tenms

movlw ' ' ; Z MOTOR ON


call asc
call tenms

movlw 'O' ; R
call asc
call tenms

movlw 'k' ; A
call asc
call tenms

RETURN

lcd2
BANKSEL MH

movlw 0x80 ; COMMAND MODE


call lcdout
call tenms

movlw 'C' ; F start


call asc
call tenms

movlw 'P' ; U
call asc
call tenms

movlw ' ' ; Z MOTOR ON


call asc
call tenms

movlw 'e' ; R
call asc
call tenms

movlw 'r' ; A
call asc
call tenms

RETURN

lcd3
BANKSEL MH

movlw 0x89 ; COMMAND MODE


call lcdout
call tenms

movlw 'o' ; R
call asc
call tenms

movlw 'k' ; A
call asc
call tenms

RETURN

lcd4
BANKSEL MH

movlw 0x89 ; COMMAND MODE


call lcdout
call tenms

movlw 'e' ; R
call asc
call tenms

movlw 'r' ; A
call asc
call tenms

RETURN

lcd5
BANKSEL MH

movlw 0x8e ; COMMAND MODE


call lcdout
call tenms

movlw 'O' ; R
call asc
call tenms

movlw 'k' ; A
call asc
call tenms

; movlw 'L' ; A
; call asc
; call tenms

RETURN

lcd6
BANKSEL MH

movlw 0x8e ; COMMAND MODE


call lcdout
call tenms

movlw 'e' ; R
call asc
call tenms

movlw 'r' ; A
call asc
call tenms

; movlw 'L' ; A
; call asc
; call tenms

RETURN

lcd7
BANKSEL MH

movlw 0xc3 ; COMMAND MODE


call lcdout
call tenms

movlw 'o' ; R NOT GATE OK I/P PIN == 13 & O/P = 12


call asc
call tenms

movlw 'k' ; A
call asc
call tenms

;'movlw 'g' ; A
; 'call asc
;'call tenms

RETURN

lcd8
BANKSEL MH

movlw 0xc3 ; COMMAND MODE


call lcdout
call tenms

movlw 'e' ; R NOT GATE ERR I/P PIN == 13 & O/P = 12 CHECK
NOT GATE
call asc
call tenms

movlw 'r' ; A
call asc
call tenms

RETURN

lcd9
BANKSEL MH

movlw 0xc9 ; COMMAND MODE


call lcdout
call tenms

movlw 'o' ; R
call asc
call tenms

movlw 'k' ; A
call asc
call tenms

RETURN

lcd10
BANKSEL MH

movlw 0xc9 ; COMMAND MODE


call lcdout
call tenms

movlw 'e' ; R
call asc
call tenms

movlw 'r' ; A
call asc
call tenms

RETURN

lcd11
BANKSEL MH

movlw 0xcf ; COMMAND MODE


call lcdout
call tenms
movlw 'y' ; R
call asc
call tenms

; movlw 'w' ; A
;call asc
;call tenms

RETURN

lcd12
BANKSEL MH

movlw 0xcf ; COMMAND MODE


call lcdout
call tenms

movlw 'n' ; R
call asc
call tenms

; movlw 'd' ; A
;call asc
;call tenms

RETURN

lcd23
BANKSEL MH

movlw 0x80 ; COMMAND MODE


call lcdout
call tenms

movlw 'D' ; F start


call asc
call tenms

movlw 'F' ; U
call asc
call tenms

movlw ' ' ; Z MOTOR ON


call asc
call tenms

movlw 'o' ; R
call asc
call tenms

movlw 'k' ; A
call asc
call tenms

RETURN
lcd24
BANKSEL MH

movlw 0x80 ; COMMAND MODE


call lcdout
call tenms

movlw 'D' ; F start DC FUSE OK


call asc
call tenms

movlw 'F' ; U
call asc
call tenms

movlw ' ' ; Z MOTOR ON


call asc
call tenms

movlw 'e' ; R
call asc
call tenms

movlw 'r' ; A
call asc
call tenms

RETURN

;----------------------------------------------------

;------------------------------------------------------

p0
; bsf PORTE,2
movf ip2,w
movwf PORTB
;call lcd0
call ldly
;call ldly
; call ldly
bcf PORTE,2
call tenms
clrf PORTB
goto up

lcdout
movwf PORTD
bcf PORTE,0 ; 2 - PORTC
bsf PORTE,1 ; 3 - PORTC
bcf PORTE,1 ; 3 - PORTC
call tenms
bsf PORTE,0 ; 2 - PORTC
return

asc
movwf PORTD
bsf PORTE,0 ; 2 - PORTC
bsf PORTE,1 ; 3 - PORTC
bcf PORTE,1 ; 3 - PORTC
call tenms
bcf PORTE,0 ; 2 - PORTC
return

ldly2
call ldly
call ldly
call ldly
call ldly
call ldly
call ldly
call ldly
call ldly
call ldly
call ldly
call ldly
return

; remaining code goes here

end ; directive 'end of program'

; remaining code goes here

; directive 'end of program'

Das könnte Ihnen auch gefallen