| ??? 11/21/06 13:31 Read: times |
#128353 - Here's the entire code.... Responding to: ???'s previous message |
Note that the LCD is not the issue. I can properly display
data from ADC, Keypad, Ex.RAM, etc.
Also, ignore some of the equates that are not used in the
code, I just left them in there so i can remember them
THanks again
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ASSEMBLER CONTROLS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
$MOD31
$DEBUG
$NOPAGING
$PAGEWIDTH(132)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;EQUATES
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LCD_RS EQU P3.5
LCD_EN EQU P3.4
LCD_DATA EQU P1
flag1 EQU 21h
STORE EQU 20H
CLEAR EQU 01H
HOLDKEY EQU 40h
BLINKCUR EQU 0Dh
OFFCUR EQU 0Ch
BUFFER EQU 24H
LINE EQU R1
COUNT EQU R2
RESET_VALUE EQU 15536
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; INTERRUPT VECTORS/ORGs
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0000H ; reset interrupt vector
LJMP MAIN ; MAIN MODULE
ORG 0023h ;card reader interrupt vector
LJMP CARDswipe ;card reader subroutine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;MAIN MODULE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0030H
MAIN:MOV P1,#00h ;LCD
MOV TMOD,#021h ;sets T1 as 8-bit reload and T0 as 16 bit
mov IE,#81h
MOV TCON,#14H
MOV SCON,#050h ;SETS SERIAL PORT TO MODE 1, ENABLES RECEIVER
MOV A,PCON
SETB ACC.7 ;Set Bit 7 SMOD
MOV PCON,A
MOV TH1,#0F3H ;sets reload value for baud rate
SETB TR1 ;starts timer
LCALL INIT_LCD
LCALL DELAY_1S
MOV A,R2 ; bring in SBUF data
MOV R0, #01h ;clear the screen
LCALL wrLCDcom
MOV R0, #81h ; position cursor
LCALL wrLCDcom
MOV R0, A
LCALL WRLCDDATA ; display SBUF on the screen
LCALL DELAY_1S
LJMP MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; LCD SUBROUTINES FOR HOME MED SYSTEM
; NOVEMBER 2, 2006
; DIGITAL III
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; PLACE CURSOR CHANGES ADDRESS OF CURSOR LOCATION
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
placeCur: dec acc ; acc=0 for line=1
jnz line2 ; if acc=0 then first line
mov a, b
add a, #080h ; construct control word for line 1
sjmp setcur
line2: mov a, b
add a, #0C0h ; construct control word for line 2
setcur: mov r0, a ; place control word
lcall wrLCDcom ; issue command
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; WRITE LCD DATA
; MOVES THE CONTENTS OF R0 TO LCD PORT TO WRITE DATA WORD ON LCD
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
wrLCDdata:clr LCD_EN
setb LCD_RS ; select send Data
mov LCD_DATA, r0 ; load command into port
lcall pulseEwait ; pulse the Enable line
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; WRITE LCD COMMAND
; MOVES THE CONTENTS OF R0 TO LCD PORT TO WRITE COMMAND WORD ON LCD
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
wrLCDcom:clr LCD_EN
clr LCD_RS ; select send Command
mov LCD_DATA, r0 ; load command into port
lcall pulseEwait ; pulse the Enable line
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; PULSE ENABLE WAIT
; GENERATES POSITIVE PULSE ON LCD ENABLE PIN AND WAITS 5.1ms
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
pulseEwait:clr LCD_EN
setb LCD_EN ; pulse the Enable line
clr LCD_EN
mov LCD_DATA, #0ffh ; prepare port for input
LCALL DELAY_5_1MS
LCALL DELAY_5_1MS
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; INITIALIZE LCD
; PERFORMS POWER ON RESET AND SETS FUNCTIONS AND DISPLAY
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
init_LCD:clr LCD_RS ; LCD Register Select line
clr LCD_EN ; Enable line
mov r0, #30h ;
lcall wrLCDcom
mov r0, #30h ;
lcall wrLCDcom
mov r0, #30h ;
lcall wrLCDcom
mov r0, #38h ; Function Set - 2 lines 5x7 fonts
lcall wrLCDcom
mov r0, #0ch ; display ON
lcall wrLCDcom
mov r0, #06h ; set Entry Mode
lcall wrLCDcom ; increment cursor to right, no display shift
mov r0, #01h ; clear display, home cursor
lcall wrLCDcom
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; PRINTS DATA IMMEDIATELY FOLLOWING SUBROUTINE CALL
; ZERO IS DELIMITER
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
prtLCD:pop dph ; pop return address into dptr
pop dpl
prtNext:clr a ; set offset = 0
movc a, @a+dptr ; get chr from code memory
cjne a, #0, chrOK ; if chr = 0 then return
sjmp retPrtLCD
chrOK:mov r0, a
lcall wrLCDdata ; send character
inc dptr ; point at next character
ajmp prtNext ; loop till end of string
retPrtLCD:mov a, #1h ; point to instruction after string
jmp @a+dptr ; return with a jump instruction
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ONE SECOND DELAY LOOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELAY_1S:MOV R7,#20 ;LOOP COUNT
MOV TH0,#3CH ;20*50,000us
MOV TL0,#0B0H
SETB TR0
WAIT: JNB TF0,$
CLR TF0
DJNZ R7,WAIT
CLR TR0
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TWO SECOND DELAY LOOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELAY_2S:MOV R7,#40 ;LOOP COUNT
MOV TH0,#3CH ;40*50,000us
MOV TL0,#0B0H
SETB TR0
WAIT2: JNB TF0,$
CLR TF0
DJNZ R7,WAIT2
CLR TR0
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 5.1 MILLISECOND DELAY LOOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELAY_5_1MS:MOV TH0,#0ECH ;5.1ms
MOV TL0,#14H
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 250 MILLISECOND DELAY LOOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELAY_250mS:MOV R7,#5 ;LOOP COUNT
MOV TH0,#3CH ;5*50,000us
MOV TL0,#0B0H
SETB TR0
WAIT3: JNB TF0,$
CLR TF0
DJNZ R7,WAIT3
CLR TR0
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 100 MILLISECOND DELAY LOOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELAY_100mS:MOV R7,#2 ;LOOP COUNT
MOV TH0,#3CH ;2*50,000us
MOV TL0,#0B0H
SETB TR0
WAIT1: JNB TF0,$
CLR TF0
DJNZ R7,WAIT1
CLR TR0
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Card Reader Subroutine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CARDswipe: push dph
push dpl
push acc
swipe: JNB RI,swipe
CLR RI
MOV A,SBUF
MOV R2, A
pop acc
pop dpl
pop dph
RETI
END
|
| Topic | Author | Date |
| Serial interface- Displaying SBUF data on LCD. | 01/01/70 00:00 | |
| what device? | 01/01/70 00:00 | |
| Just the 'integral part' Part of code | 01/01/70 00:00 | |
| you still did not tell the derivative | 01/01/70 00:00 | |
| Formatted Code | 01/01/70 00:00 | |
| Missing code | 01/01/70 00:00 | |
| Delay | 01/01/70 00:00 | |
| Delay, Baudrate, Freq, etc. | 01/01/70 00:00 | |
| Missing Code | 01/01/70 00:00 | |
| Here's the wrLCDcom SR | 01/01/70 00:00 | |
| is DELAY_5_1MS timer based? | 01/01/70 00:00 | |
| Yes DELAY_5_1MS is timer based | 01/01/70 00:00 | |
| so, you call one device generating an interrupt fr | 01/01/70 00:00 | |
| Already tried that | 01/01/70 00:00 | |
| then keep it that way | 01/01/70 00:00 | |
| Here's the entire code.... | 01/01/70 00:00 | |
I quick look, not an analysis | 01/01/70 00:00 | |
| Have a look at this | 01/01/70 00:00 | |
| Deriviative??? | 01/01/70 00:00 | |
| Derivative | 01/01/70 00:00 | |
| Oops... Derivative..gotcha | 01/01/70 00:00 | |
| OK | 01/01/70 00:00 | |
| TI & RI | 01/01/70 00:00 |



