Файл: Microcontroller Programming. Thi Micro Chip PIC (Julio Sanchez, 2007).pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 14.06.2025
Просмотров: 8587
Скачиваний: 0
306 |
Chapter 13 |
to send ASCII characters. Since the scarcity of port lines is the original reason for using a master/slave set up, parallel communications may not be a good solution in many cases. On the other hand, communications between master and slave can take place serially, using a single interface line. The discussion of using serial interface between a master and an LCD slave driver PIC is left for the chapter on serial communications.
13.4 Sample Programs
The following section lists the sample programs discussed in this chapter.
13.4.1 LCDTest1
;File name: LCDTest1.asm
;Date: April 13, 2006
;Author: Julio Sanchez
;Processor: 16F84A
;Description:
;Program to exercise 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
;address of each display line is stored in #define
;statements. These statements can be edited to
;accommodate a different set-up.
;Program uses delay loops for interface timing.
;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 |
|
LCD Interfacing and Programming |
307 |
||
; |
_RC_OSC |
Resistor/capacitor oscillator (simplest, 20% |
|
error) |
|||
;|
;|_____ * indicates set up values
;========================= ; 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) |
|
#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
308 |
Chapter 13 |
main: |
||
; Allow LCD time to initialize |
||
; itself |
||
call |
initLCD |
; Then do forced |
; initialization |
||
call |
delay_5ms |
; Wait. |
; Store base address of text buffer in PIC RAM |
||
movlw |
0x0c |
; Start address of text buffer |
movwf |
pic_ad |
; to local variable |
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_5ms |
|
;======================
;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 |
storeMN |
||
; Set DDRAM address to start of first line |
|||
call |
line1 |
||
; Call procedure to display 16 characters in LCD |
|||
call |
display16 |
||
;======================== |
|||
; |
second LCD line |
||
;======================== |
|||
call |
delay_125mcs |
; 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 |
;=======================
LCD Interfacing and Programming |
309 |
; done! ;======================= loopHere:
goto loopHere ;done
;************************************************************ ; INITIALIZE LCD PROCEDURE ;************************************************************ initLCD
;Initialization for Densitron LCD module as follows:
;8-bit interface
;2 display lines of 16 characters each
;cursor on
;left-to-right increment
;cursor shift right
;no display shift
;***********************| |
||||||
; |
COMMAND MODE |
| |
||||
;***********************| |
||||||
bcf |
PORTA,E_line |
; E line low |
||||
bcf |
PORTA,RS_line |
; RS line low for command |
||||
bcf |
PORTA,RW_line |
; Write mode |
||||
call |
delay_125mcs |
;delay 125 |
||||
microseconds |
||||||
;***********************| |
||||||
; |
FUNCTION SET |
| |
||||
;***********************| |
||||||
movlw |
0x38 |
; 0 0 |
1 |
1 1 0 0 0 (FUNCTION SET) |
||
; |
| |
| | |__ font select: |
||||
; |
| |
| | |
1 = 5x10 in 1/8 or 1/11 |
|||
; |
| |
| | |
0 = 1/16 dc |
|||
; |
| |
| |___ Duty cycle select |
||||
; |
| |
| |
0 = 1/8 or 1/11 |
|||
; |
| |
| |
1 = 1/16 |
|||
; |
| |
|___ Interface width |
||||
; |
| |
0 = 4 bits |
||||
; |
| |
1 = 8 bits |
||||
; |
|___ FUNCTION SET COMMAND |
|||||
movwf |
PORTB |
;0011 |
1000 |
|||
call |
pulseE |
;pulseE |
and delay |
|||
;***********************| |
||||||
; |
DISPLAY OFF |
| |
||||
;***********************| |
||||||
movlw |
0x08 |
; 0 0 |
0 |
0 1 0 0 0 (DISPLAY ON/OFF) |
||
; |
| | | |___ Blink character |
|||||
; |
| | | |
1 = on, 0 = off |
||||
; |
| | |___ Cursor on/off |
|||||