Файл: Microcontroller Programming. Thi Micro Chip PIC (Julio Sanchez, 2007).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 14.06.2025

Просмотров: 8567

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

LCD Interfacing and Programming

315

goto

endstr1

; End of string

;ASSERT: valid string character in w

;store character in text buffer (by FSR)

movwf

INDF

; store in buffer by FSR

incf

FSR,f

; increment buffer pointer

; Restore table character counter from variable

movf

index,w

; Get value into w

addlw

1

; Bump to next

character

movwf

index

; Store table index in

variable

goto

get_msg_char

; Continue

endstr1:

return

; Routine for returning message stored in program area msg1:

addwf

PCL,f

; Access table

retlw

‘M’

retlw

‘i’

retlw

‘n’

retlw

‘n’

retlw

‘e’

retlw

‘s’

retlw

‘o’

retlw

‘t’

retlw

‘a’

retlw

0

;=================================

;second text string procedure ;================================= storeUniv:

;Processing identical to procedure StoreMSU

movwf

index

; Store w in index

; Store base address of text buffer in FSR

movf

pic_ad,0 ; first display RAM address to W

addwf

index,0

; Add offset to address

movwf

FSR

; W to FSR

; Initialize index for text string access

movlw

0

; Start at 0

movwf

index

; Store index in variable

; w still = 0

get_msg_char2:

call

msg2

; Get character from table

; Test for zero terminator

andlw

0x0ff

btfsc

STATUS,Z ; Test zero flag


316

Chapter 13

goto

endstr2

; End of string

;ASSERT: valid string character in w

;store character in text buffer (by FSR)

movwf

INDF

; Store in buffer by FSR

incf

FSR,f

; Increment buffer pointer

; Restore table character counter from variable

movf

index,w

; Get value into w

addlw

1

; Bump to next character

movwf

index

; Store table index in

variable

goto

get_msg_char2

; Continue

endstr2:

return

; Routine for returning message stored in program area msg2:

addwf

PCL,f

; Access table

retlw

‘S’

retlw

‘t’

retlw

‘a’

retlw

‘t’

retlw

‘e’

retlw

‘,’

retlw

0x20

retlw

‘M’

retlw

‘a’

retlw

‘n’

retlw

‘k’

retlw

‘a’

retlw

‘t’

retlw

‘o’

retlw

0

end

13.4.2 LCDTest2 Program

;File name: LCDTest2.asm

;Date: April 16, 2006

;Author: Julio Sanchez

;Processor: 16F84A

;Description:

;Program to exercises 8-bit PIC-to-LCD interface.

;Code assumes that LCD is driven by Hitachi HD44780

;controller and that the display supports two lines

;each one with 16 characters. The wiring and base


LCD Interfacing and Programming

317

;address of each display line is stored in #define

;statements. These statements can be edited to

;accommodate a different set-up.

;Program uses the busy flag to synchronize processor

;access, although delay loops are still required in

;some cases.

;Displays: Minnesota State, Mankato

;WARNING:

;Code assumes 4Mhz clock. Delay routines must be

;edited for faster clock

;

;Displays: Minnesota State, Mankato

;===========================

;switches ;===========================

;Switches used in __config directive:

;

_CP_ON

Code protection ON/OFF

; *

_CP_OFF

;

*

_PWRTE_ON

Power-up timer ON/OFF

;_PWRTE_OFF

;

_WDT_ON

Watchdog timer ON/OFF

; * _WDT_OFF

;

_LP_OSC

Low power crystal

occilator

; * _XT_OSC

External parallel

resonator/crystal oscillator

;

_HS_OSC

High speed crystal resonator (8 to

10 MHz)

;

Resonator: Murate

Erie CSA8.00MG =

8 MHz

;

_RC_OSC

Resistor/capacitor oscillator

; |

(simplest, 20% error)

;|

;|_____ * indicates set up values presently selected

;========================= ; set up and configuration ;=========================

processor 16f84A

include

<p16f84A.inc>

__config

_XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF

;=====================================================

;

constant definitions

; for PIC-to-LCD pin wiring and LCD line addresses

;=====================================================

#define E_line 1

;|

#define RS_line 2

;| — from wiring diagram

#define RW_line 3

;|

; LCD line addresses (from LCD data sheet)


318

Chapter 13

#define LCD_1

0x80

;

First LCD line constant

#define LCD_2

0xc0

;

Second LCD line constant

;Note: The constants that define the LCD display line

;addresses have the high-order bit set in

;order to facilitate the controller command

;

;=====================================================

;

variables in PIC RAM

;=====================================================

;Reserve 16 bytes for string buffer cblock 0x0c

strData endc

;Leave 16 bytes and Continue with local variables

cblock

0x1d

; Start of block

count1

; Counter # 1

count2

; Counter # 2

count3

; Counter # 3

pic_ad

; Storage for start of text area

; (labeled strData) in PIC RAM

J

; counter J

K

; counter K

index

; Index into text table (also used

; for auxiliary storage)

endc

;=========================================================

;

program

;=========================================================

org

0

; start at address

goto

main

; Space for interrupt handlers

org

0x08

main:

movlw

b’00000000’

; All lines to output

tris

PORTA

; in Port-A

tris

PORTB

; and port B

movlw

b’00000000’

; All outputs ports low

movwf

PORTA

movwf

PORTB

; Wait and initialize HD44780

call

delay_5

; Allow LCD time to initialize

; itself

call

initLCD

; Then do forced

initialization

; Store base address of text buffer in PIC RAM

movlw

0x0c

; Start address for buffer


LCD Interfacing and Programming

319

movwf

pic_ad

; to local variable

;======================

;first LCD line ;======================

;Store 16 blanks in PIC RAM, starting at address stored

;in variable pic_ad

call blank16

;Call procedure to store ASCII characters for message

;in text buffer

movlw

d’3’

; Offset into buffer

call

storeMSU

; Set DDRAM address to start of first line

call

line1

; Call procedure to display 16 characters in LCD

call

display16

;========================

;

second LCD line

;========================

call

busyTest ; Wait for termination

call

blank16

; Blank buffer

;Call procedure to store ASCII characters for message

;in text buffer

movlw

d’1’

; Offset into buffer

call

storeUniv

call

line2

; DDRAM address of LCD line 2

call

display16

;=======================

;

done!

;=======================

loopHere:

goto

loopHere

;done

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

; INITIALIZE LCD PROCEDURE

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

initLCD:

;***********************|

;

COMMAND MODE

|

;***********************|

bcf

PORTA,E_line

;E line low

bcf

PORTA,RS_line

;RS line low

call

delay_125

;delay 125

microseconds

;***********************|

;

FUNCTION SET

|

;***********************|

movlw

0x38

; 0 0 1 1 1 0 0 0 (FUNCTION SET)

;

| | | |__ font select: