Микропроцессорная техника. 2


 

Федеральное государственное бюджетное  образовательное

учреждение высшего профессионального  образования

«Кузбасский государственный  технический университет

имени Т. Ф. Горбачева»

Кафедра электропривода и автоматизации

 

 

 

 

 

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе по дисциплине

«Микропроцессорная техника»

 

 

Вариант № 6

 

 

 

 

 

 

 

      Выполнил:

       ст. гр. ЭА-091

     Луканов В.А.

 

       Проверил:

       Носков А.П.

 

 

 

     Работа защищена с оценкой

      ________________________

                                                                                 «____»_____________2012   г.

 

 

 

 

 

 

 


Кемерово 2012

 

СОДЕРЖАНИЕ


    1. Техническое задание…………………………………………………………3
    1. Введение…………………………………………………………………..3
    1. Основание для разработки……………………………………………….3
    2. Назначение разработки…………………………………………………..4
    3. Требования к программе или программному изделию ..……………....4
        1. Требования к функциональным характеристикам……………..4
        2. Требования к условиям эксплуатации…………………………..5
        3. Требования к составу и параметрам технических средств….....5

     1.5. Требования к ОМК………………………………………………………5

  1. Структурная схема…………………………………………………………...8
  2. Принципиальные электрические схемы...............................................11
    1. Принципиальная электрическая схема привода X …………………..11
    2. Принципиальная электрическая схема привода Y ………………..…13
    3. Принципиальная электрическая схема привода Z ………………...….15
  3. Список литературы……………………………………………………….…17
  4. Приложение1. Текст программы…………………………………………....18

 


1. Техническое задание

1.1.Введение

    1. Основание для разработки

Основанием для разработки является техническое задание курсового проекта по дисциплине «МП техника» на тему: «Микропроцессорная система управления подвесным краном»          Табл. 1.

Вариант 6. Кран-балка подвесная 3,2 т (Рис. 18, 19)

 

 

номинальная скорость двигателей (об/мин)

номинальная мощность (кВт)

Время разгона/торможения (с)

Привод X

1000

2´0,32

не нормируется

Привод Y

1500

0,2

5

Привод Z

750

2,3

3

Габаритные  размеры установки

D (м)

D2 (мм)

D5 (мм)

D10 (мм)

D11 (мм)

Длина цеха (м)

12

1800

2290

530

570

60

Дополнительные  требования к МПС: 1) управление Приводом Y должно осуществляться в симметричном режиме; 2) при температуре радиатора силового модуля более чем 65 ºС необходимо отключить установку и оповестить обслуживающий персонал о неисправности.



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 1. Чертеж установки (кран подвесной 3.2 т)

 


 

Рис. 2. Диаграммы скорости электроприводов (кран подвесной 3.2т)

 

    1. Назначение разработки

Автоматическое управление опорным краном для перемещения  груза по цеху.

    1. Требования к разработке
      1. Режимы работы

а) Режим инициализации:

Режим, при котором определяется начальное положение рабочего органа в пространстве. Для идентификации положения используются сигналы с датчиков положения. Если положение отлично от нулевого то МПС переводит рабочий механизм в нулевое положение.

б) Аварийный режим:

В соответствие с техническим  заданием, при превышении температуры  радиатора силового модуля более  чем на 65°С необходимо отключить установку и оповестить обслуживающий персонал о неисправности.

 

 

в)  Автоматический режим:

В соответствие с заданным количеством циклов происходит отработка  программы. Моменты включения и отключения электрооборудования определяется в соответствии с заданными временными отрезками, показанными на диаграмме скорости (рис. 2).

 


 

Рис. 3. Блок-схема работы МПС в автоматическом режиме 

      1. Требования к условиям эксплуатации
  1. Относительная влажность воздуха от 40-80 %.
  2. Атмосферное давление от 630-800 мм рт. ст. 
  3. Диапазон частот вибрации от 1-10 Гц.
  4. Температура окружающей среды от 5-300 С

 

1.3.3. Требования  к составу и параметрам технических  средств

    • Устройство вывода (ЖКИ)
    • Устройство ввода
    • Однокристальный 8-разрядный микроконтроллер (ОМК)
    • Датчики (положения, температуры)
    • Исполнительные устройства:

А. Для привода X, Z – АДкз, контактное оборудование

Б. Для привода Y – ДПТ

    • Преобразователи энергии:

А. Для привода У  – ШИМ

Б. Для привода Z – Преобразователь  частоты

  • Концевые выключатели
  • Реле

 

1.3.4. Требования  к ОМК

1.  Таймер: для реализации выполнения программного цикла в определенное время и задержки.

2. Модуль ШИМ: для преобразования длительности импульсов тока с целью реализации плавного пуска и остановки привода У, основанного на двигателе постоянного тока с независимым возбуждением.

3. 5 дискретных входов: 2 кнопки управления и трех концевых выключателей.

4. 13 дискретных выходов: 7 для ЖКИ, 2 для управления приводом Х, 2 для управления приводом У, 2 для управления приводом Z.


1.3.5. Выбор двигателей для установки и преобразователя частоты для привода Z

 

   Табл. 2.

Технические данные двигателей для приводов X и Z

Приводы

Тип электродвигателя

Мощность, кВт

η, %

cos φ

n0, об/мин

X

4А71А6У3

2 × 0,37

64,5

0,69

2

4

1000

Z

4А112МВ8У3

3

79

0,74

1,8

6

750


 

Табл. 3.

Технические данные двигателя для привода Y

Тип электродвигателя

Мощность, кВт

U, В

η, %

n0, об/мин

ПБ-12У2

0,23

220

70

1500




 

Табл. 4.

Преобразователь частоты  для привода Z

Тип преобразователя

Мощность

Параметры

ATV31HU30N4

3 кВт

,


 

 

  1. Структурная схема

 

Рис. 4. Структурная схема  МПС

Однокристальный микроконтроллер  предназначен для автоматического  управления приводами подвесного крана.

ЖКИ – жидкокристаллический индикатор предназначен для отображения информации о состоянии процесса

БВД – блок ввода данных предназначен для запуска автоматического управления опорным краном, остановки и для задания количества выполняемых циклов.

БД – блок датчиков предназначен для получения информации о положении приводов и состоянии температуры системы.

БП – блок питания необходим для питания ОМК.

С – блок сигнализации. Включается при превышении температуры над критической в преобразователе частоты.

ПА - пусковая аппаратура обеспечивающее управление приводом X.

ЛП – Логический преобразователь обеспечивающий управление плечами Н-моста в соответствии с заданной схемой управления.

 

 

 

Для исключения влияния на ОМК напряжения из силовых цепей, которое может  привести к выводу из строя, или созданию помех при работе ОМК, применяется гальваническая развязка. В приводах X и Z функцию гальванической развязки выполняет блок реле (БР), а в приводе Y – блок гальванической развязки (БГР)

МС - мостовая схема обеспечивающая управление приводом Y.

ПЧ – преобразователь частоты для управления приводом Z.

X, Y, Z – соответствующие приводы.

 

3. Принципиальные схемы

3.1. Принципиальная  схема управляющей части

Рис. 5. Принципиальная электрическая  схема управляющей части

В соответствие с требованиями технического задания, для выполнения описанных функций, выбираем микроконтроллер PicMicro PIC16F877.

Клавиатура состоит из двух кнопок. Нажатием одной из них подвесная кран-балка запускается, а другой производит остановку. Три концевых датчика, каждый из которых соответствует приводам X, Y и Z соответственно, являются датчиками положения.

 

 

Семь выходов задействованы  на LCD дисплей – четыре линии данных D4-D7, линию выбора операции R/W, линию выбора регистра RS и линию синхронизации Е. Шесть выходов предназначены для управления приводами и два для датчика температуры.

 

3.2. Принципиальная  электрическая схема привода  X


Рис. 6. Принципиальная схема  для управления приводом X

 

Асинхронные двигателя привода Х, подключены к сети параллельно и вращаются в одном направлении, передвигая кран-балку вперед (контактор КМ 1.1 замкнут) либо назад (контактор КМ 2.1 замкнут).

Одновременное включение  контакторов приведет к фазному  короткому замыканию, во избежание  этого, при замыкании одного контактора происходит автоматическое размыкание другого.

Управление контакторами осуществляется с помощью твердотельного реле по схеме приведенной на (рис. 6). RnX_F и RnX_B – сигналы, поступающие с микроконтроллера.

 

Для управления приводом Х выбираем контактор: GMC-12M

Параметры обмотки управления:

Напряжение 220В

Мощность 32ВА

Ток 145мА 

Для управления обмоткой контактора привода Х выбираем симистор: BT134W-600E.

Номинальное напряжение в закрытом состоянии 600В.

Ток отпирания 10мА

Ток в открытом состоянии 1А.

Тип корпуса SOT-223(SC-73)


Для гальванической развязки используем драйвер: MOC-3063-M с максимальным напряжением 600В и током 1А.

Для ограничения тока диода драйвера выбираем резисторы R2.1=R2.2=1000 Ом (ряд Е24, точность 5%).

 

 

3.3. Принципиальная схема привода Y

Принципиальная электрическая  схема привода Y, в состав которой входит двигатель постоянного тока M3, представлена на (рис. 9). Управление транзисторами, размещенными на схеме (рис. 9) осуществляется в соответствии с диаграммой на (рис. 7)

Рис. 7. Диаграммы напряжений на транзисторах и двигателе

Для получения необходимых сигналов управления в схеме используется логический преобразователь, схема которого изображена на (рис.8), где D3.1- D3.3 – интегральные микросхемы К155ЛН1; D3.4, D3.5 - интегральные микросхемы К155ЛИ501

 

Рис.8 Логический преобразователь

Рис.9 Принципиальная схема привода Y

С логического преобразователя  выходит четыре управляющих сигнала, поступающих на драйвер TLP250 (на рис.9, DA), с выхода которого сигнал идет на соответствующие транзисторы (VT1, VT2, VT3, VT4). Транзисторы вида: IGBT, модель: IRGS10B60KD, структура: n-канал c диодом, максимальное напряжение коллектор-эмиттер Uкэ = 600В, максимальный ток Iкэ = 22A , управляющее напряжение 6В, корпус TO220AB.

 


На входах драйверов (см. рис. 9) расположены резисторы R31= R33 = R35 = R37 = 510Ом (ряд Е24, точность 5%) на выходах драйверов - R32= R34 = R36 = R38 = 10Ом (ряд Е24, точность 5%).

 

 

3.4. Принципиальная схема привода Z

В соответствии с параметрами  асинхронного двигателя для привода Z, выбираем преобразователь частоты ATV31HU30N4, расчитанный на максимальный ток I=10.9A, мощность указанная на заводской табличке 3кВт, полная мощность 7.1кВА. Схема преобразователя изображена на (рис.10) где M4 – Привод Z; выводы L1, L2, L3 – выводы питания; Li1, Li2 - выводы ключей управления направлением вращения двигателя (рис 11) . Параметры настройки ПЧ приведены в таблице.

Рис.10 Схема подключение привода Z к преобразователю частоты ATV31HU30N4

Рис.11 Ключи управления

 

Сигналы от ОМК (UP – движение вверх, DOWN – движение вниз) подаются на ПЧ через реле: BS-102B-5 VDC. Напряжение управления 5В, сопротивление обмотки управления Rобм = 125Ом.

Ток коллектора:

Iк = =40 мА

Выбираем транзисторы VT5 и VT6 КТ396А-2, с коэффициентом усиления по току β = 40, напряжение насыщения Uб-э,нас. = 0,6В.

Iб = = = 1мА – ток базы.

Определяем значение сопротивлений R41, R42.

R41= R42= = = 4400 Ом.

Выбираем R41 = R42 = 4,3 кОм (ряд Е24, точность 5%)

Выбираем диоды VD1, VD2 марки Д223, обратное напряжение до 50В, ток до 50 мА.

 

4. Список литературы

  1. Носков А. П. Микропроцессорная техника: методические указания к выполнению курсовой работы. – Кемерово: КузГТУ, 2008. – 32 с.
  2. PIC16F87X. Однокристальные 8-ми разрядные FLACH CMOS микроконтроллеры. – М.: Микро – Чип, 2002.
  3. Справочник по электрическим машинам / Под общей редакцией И. П. Копылова. – М.: Энергоатомиздат, 1988.
  4. Altivar 31H. Преобразователи частоты для АД. Руководство по эксплуатации. – Telemecanique, 2004. – 17 с.


 

  1. Приложение 1

Текст программы


 

;================ Начало Main_LCD.ASM ================

 

;Файл:    Main_LCD.ASM

 

; RB0 - цифровой вход, Stop Button

; RB1 - цифровой вход, Run Button

; RB4 - цифровой вход, InitX Button

; RB5 - цифровой вход, InitY Button

; RB6 - цифровой вход, InitZ Button

 

; RC0 - цифровой выход, привод X вперед 

; RC1 - цифровой выход, привод Х  назад

; RC3 -

; RC4 - датчик температуры

; RC2 - ШИМ, модуль CCP1

; RC5 - Пуск(1)/Стоп(0) привода Y

 

 

list  p=16f877a, r=dec

 

 

include "p16f877a.inc" 

 

 

__CONFIG _CP_OFF & _WDT_OFF & _HS_OSC

 

ERRORLEVEL -302, -305

 

;************ Блок описания переменных************

cblock 0x20

CntStep  ; Счетчик периодов TMR2

WTemp  ; Сохранение W

StaTemp  ; Сохранение STATUS

CntPrim  ; Счетчик

CntSec   ; Счетчик

Cnt   ; Счетчик общего назначения

 

FLAGS  ; Флаги:

;FLAGS,0 - состояние кнопки RunBTN (1(0) - вкл(откл))

;FLAGS,1 - XDrv_F (1(0) - вкл(откл))

;FLAGS,2 - XDrv_B (1(0) - вкл(откл))

;FLAGS,3 - YDrv_L (1(0) - вкл(откл))

;FLAGS,4 - YDrv_R (1(0) - вкл(откл))

;FLAGS,5 - ZDrv_Up (1(0) - вкл(откл))

;FLAGS,6 - ZDrv_Dwn (1(0) - вкл(откл))

;FLAGS,7 - Raising/Falling

Cnt1   ;  

Cnt2   ;

Cnt3   ;

Cnt4   ; Счетчики

 

Count   ; Счетчик общего назначения               

COUNTER  

delay  

temp_wr  

temp_rd 

 

ptr_pos

ptr_count

temp_1 

temp_2 

temp_3 

cmd_byte

temperature 

 

endc

 

;************ Блок описания констант******************

NmbrStep EQU  98 ; Количество шагов изменения скважности

XTime  EQU  90 ; Время включенного состояния привода X 

YTime  EQU  35-10 ; Время включенного состояния привода Y

; (учитывается время на разгон и торможение)

ZTime  EQU  75 ; Время включенного состояния привода Z

Pause  EQU      10 ; Пауза между спуском и подъемом захвата

 

;************ Блок преопределений*********************

 

#define Stp  PORTB,0  ; Стоп

#define Run  PORTB,1  ; Пуск

#define InitX  PORTB,4  ; Датчик начального положения привода Х

#define InitY  PORTB,5  ; Датчик начального положения привода Y

#define InitZ  PORTB,6  ; Датчик начального положения привода Z

 

#define RunX_F  PORTC,0  ; Привод X - вперед

#define RunX_B  PORTC,1  ; Привод X - назад

#define PWM   PORTC,2  ; ШИМ

#define StpY   PORTC,5  ; Пуск/Стоп Y

#define RunZ_Up  PORTC,6  ; Привод Z - вверх

#define RunZ_Down  PORTC,7  ; Привод Z - вниз

 

 

 

 


#define LCD_D4  PORTD, 0 ; LCD data bits

#define LCD_D5  PORTD, 1

#define LCD_D6  PORTD, 2

#define LCD_D7  PORTD, 3

 

#define LCD_D4_DIR TRISD, 0 ; LCD data bits

#define LCD_D5_DIR TRISD, 1

#define LCD_D6_DIR TRISD, 2

#define LCD_D7_DIR TRISD, 3

 

#define LCD_ON  PORTD, 7 ; LCD ON

#define LCD_E  PORTD, 6 ; LCD E clock

#define LCD_RW  PORTD, 5 ; LCD read/write line

#define LCD_RS  PORTD, 4 ; LCD register select line

 

#define LCD_ON_DIR TRISD, 7  

#define LCD_E_DIR  TRISD, 6 

#define LCD_RW_DIR TRISD, 5 

#define LCD_RS_DIR TRISD, 4 

 

#define LCD_INS 0 

#define LCD_DATA 1

 

;*********** Маленькие, но удобные  макросы**************

 

Bank0 MACRO   

bcf  STATUS,RP0

ENDM

 

Bank1 MACRO  

bsf  STATUS,RP0

ENDM

 

rlcd MACRO MYREGISTER

   IF MYREGISTER == 1

bsf  STATUS, C

call  LCDRead

   ELSE

bcf  STATUS, C

call  LCDRead

   ENDIF

ENDM

 

PUSH MACRO       

movwf  WTemp

swapf  STATUS, 0

movf  StaTemp

ENDM

 

POP  MACRO

swapf  StaTemp, 0

movwf  STATUS

 

 

 

 


swapf  WTemp, 1

swapf  WTemp, 0

ENDM

;********* Конец блока макросов*************

 

 

org 0x0000  

 

nop   

 

clrf INTCON    ; Все прерывания запрещаются

 

clrf PCLATH  

 

goto START  

 

;********** Начало обработчика прерываний **********

org 0x0004  

 

PUSH

btfsc  INTCON, INTF ; Прерывание от RB0? 

goto  IntB0

btfsc  PIR1, TMR2IF ; Прерывание от TMR2?

goto  IntTMR2

goto  IntEnd   ; В случае неопознанного прерывания

 

IntTMR2

bcf  PIR1,TMR2IF  ; Сбрасываем флаг прерывания

 

btfss  CntStep,1

goto  JMP1

movlw  0x01

 

btfss  FLAGS, 7

goto  $+6

 

btfsc  FLAGS,4 

addwf  CCPR1L,1 ; Увеличивем скважность, если Raising YDrv_R

; 50%->100%

btfsc  FLAGS,3

subwf  CCPR1L,1 ; Увеличивем скважность, если Raising YDrv_L

; 50%-->0%

goto  JMP1

 

btfsc  FLAGS,4 

subwf  CCPR1L,1 ; Уменьшаем скважность, если Folling YDrv_R

; 100%-->50%

btfsc  FLAGS,3

addwf  CCPR1L,1 ; Уменьшаем скважность, если Folling YDrv_L

; 0%-->50%

 

 

 

 

 

 


JMP1

incf  CntStep,1 

movlw  NmbrStep

subwf  CntStep,0

btfss  STATUS, Z  ; Проверяем счетчик

goto  IntEnd

 

Bank1

bcf  PIE1,TMR2IE  ; Запрещаем прерывание от TMR2

Bank0

clrf  CCP1CON  ; Отключаем CCP1

bcf  T2CON,TMR2ON ; Отключаем TMR2

 

btfss  FLAGS, 7

goto  $+6

 

btfsc  FLAGS,4

bsf  PWM   ; Открываем vs1 vs3, если Raising YDrv_R

btfsc  FLAGS,3

bсf  PWM   ; Открываем vs2 vs4, если Raising YDrv_L

goto  IntEnd

 

movlw  b'00000000'  ;Закрываем vs1-vs4, если Falling

movwf  PORTC

 

goto  IntEnd     

 

IntB0

bcf  INTCON, GIE ; Запрещаем все прерывания

bcf  INTCON, INTF

call  LCD_Write_Stop

clrf  PORTC

goto  $-1

goto  IntEnd

 

IntEnd

POP

retfie

 

;********** Конец обработчика прерываний************

 

 

 

;***************** Блок подпрограмм ****************

 

LCD_Init

Bank1

bcf  LCD_ON_DIR

Bank0

bsf  LCD_ON   ; Подключаем питание

call  Delay30ms

clrf  PORTA

 

 

 

 


Bank1      ;configure control lines

bcf  LCD_E_DIR

bcf  LCD_RW_DIR

bcf  LCD_RS_DIR

Bank0

 

movlw  0xff    ; Wait ~15ms @ 20 MHz

movwf  COUNTER

movlw  0xFF

movwf  delay

call  DelayXCycles

decfsz  COUNTER, F

goto  $-3

 

; movlw  b'00110000'   ;#1 Send control sequence

movlw  b'00100000'   ;#1 Send control sequence

movwf  temp_wr

bcf  STATUS,C

call  LCDWriteNibble

 

movlw  0xff    ;Wait ~4ms @ 20 MHz

movwf  COUNTER

movlw  0xFF

movwf  delay

call  DelayXCycles

decfsz  COUNTER, F

goto  $-3

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

;28---2

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

; movlw  b'00110000'   ;#2 Send control sequence

movlw  b'00100000'   ;#2 Send control sequence

movwf  temp_wr

bcf  STATUS,C

call  LCDWriteNibble

 

movlw  0xFF    ;Wait ~100us @ 20 MHz

movwf  delay

call  DelayXCycles

;28--08      

; movlw  b'0011000'   ;#3 Send control sequence

movlw  b'10000000'

movwf  temp_wr

bcf  STATUS,C

call  LCDWriteNibble

 

;test delay

movlw  0xFF    ;Wait ~100us @ 20 MHz

movwf  delay

call  DelayXCycles

 

 

 

 

 

 


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

;0C--0

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

 

; movlw  b'00100000'   ;#4 set 4-bit

movlw  b'00000000'   ;#4 set 4-bit

movwf  temp_wr

bcf  STATUS,C

call  LCDWriteNibble

;0x0C

movlw  b'11000000'   ;#4 set 4-bit

movwf  temp_wr

bcf  STATUS,C

call  LCDWriteNibble

call      Delay1ms

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

;0x01

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

; movlw  b'00100000'   ;#4 set 4-bit

movlw  b'00000000'   ;#4 set 4-bit

movwf  temp_wr

bcf  STATUS,C

call  LCDWriteNibble

;0x01

movlw  b'00010000'   ;#4 set 4-bit

movwf  temp_wr

bcf  STATUS,C

call  LCDWriteNibble

 

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

call   LongDelay ;10ms

    call  LongDelay ;2ms

call  LongDelay ;2ms

call  LongDelay ;2ms

call  LongDelay ;2ms

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

;0x02

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

movlw  b'00000000'   ;#4 set 4-bit

movwf  temp_wr

bcf  STATUS,C

call  LCDWriteNibble

;0x02

movlw  b'00100000'   ;#4 set 4-bit

movwf  temp_wr

bcf  STATUS,C

call  LCDWriteNibble

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

; rcall  LCDBusy   ;Busy?

call  LongDelay ;2ms

call  LongDelay ;2ms

 

 

 

 

 


call  LongDelay ;2ms

call  LongDelay ;2ms

call  LongDelay ;2ms

call  LongDelay ;2ms

call  LongDelay ;2ms

 

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

 

call  LCDBusy   ;Busy?

 

movlw  b'00101000'   ;#5   Function set

movwf  temp_wr

call  i_write

 

movlw  b'00001101'   ;#6  Display = ON

movwf  temp_wr

call  i_write

 

movlw  b'00000001'   ;#7   Display Clear

movwf  temp_wr

call  i_write

 

movlw  b'00000110'   ;#8   Entry Mode

movwf  temp_wr

call  i_write 

 

movlw  b'10000000'   ;DDRAM addresss 0000

movwf  temp_wr

call  i_write

 

movlw  b'00000010'   ;return home

movwf  temp_wr

call  i_write

 

 

return

 

 

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

Delay1ms      ;Approxiamtely at 4Mhz

    banksel delay

clrf  delay

Delay_1

nop

decfsz  delay

goto  Delay_1

return

 

Delay30ms      ;more than 30 at 4 Mhz 

movlw  0x28

movwf  delay

 

 

 

 

 


Delay_2

nop

decfsz  delay

goto  Delay_2

return

 

LongDelay

movlw  0x09

movwf  delay

Delay_3

nop

decfsz  delay

goto  Delay_3

return

 

DelayXCycles

decfsz  delay, F

goto  DelayXCycles

return

 

 

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

 

LCDWriteNibble

btfss  STATUS, C   ; Set the register select

bcf  LCD_RS

btfsc  STATUS, C 

bsf  LCD_RS

 

bcf  LCD_RW   ; Set write mode

 

Bank1

bcf  LCD_D4_DIR  ; Set data bits to outputs

bcf  LCD_D5_DIR

bcf  LCD_D6_DIR

bcf  LCD_D7_DIR

Bank0

 

NOP      ; Small delay

NOP

 

bsf  LCD_E   ; Setup to clock data

 

btfss  temp_wr, 7   ; Set high nibble

bcf  LCD_D7 

btfsc  temp_wr, 7

bsf  LCD_D7

btfss  temp_wr, 6

bcf  LCD_D6 

btfsc  temp_wr, 6

bsf  LCD_D6

 

 

 

 

 


btfss  temp_wr, 5

bcf  LCD_D5 

btfsc  temp_wr, 5

bsf  LCD_D5

btfss  temp_wr, 4

bcf  LCD_D4

btfsc  temp_wr, 4

bsf  LCD_D4 

 

NOP

NOP

 

bcf  LCD_E   ; Send the data

 

return

 

LCDWrite

call  LCDWriteNibble

Bank0

swapf  temp_wr, f

call  LCDWriteNibble

Bank0

swapf  temp_wr,f

 

return

 

LCDBusy

; Check BF

rlcd  LCD_INS

btfsc  temp_rd, 7

goto  LCDBusy

return

 

LCDRead

Bank1

bsf  LCD_D4_DIR  ; Set data bits to inputs

bsf  LCD_D5_DIR

bsf  LCD_D6_DIR

bsf  LCD_D7_DIR  

Bank0 

 

btfss  STATUS, C   ; Set the register select

bcf  LCD_RS

btfsc  STATUS, C 

bsf  LCD_RS

 

bsf  LCD_RW   ;Read = 1

 

NOP

NOP   

 

bsf  LCD_E   ; Setup to clock data

 

 

 

 


NOP

NOP

NOP

NOP

 

btfss  LCD_D7   ; Get high nibble

bcf   temp_rd, 7

btfsc  LCD_D7

bsf   temp_rd, 7

btfss  LCD_D6   

bcf   temp_rd, 6

btfsc  LCD_D6

bsf   temp_rd, 6

btfss  LCD_D5   

bcf   temp_rd, 5

btfsc  LCD_D5

bsf   temp_rd, 5

btfss  LCD_D4   

bcf   temp_rd, 4

btfsc  LCD_D4

bsf   temp_rd, 4

 

bcf  LCD_E   ; Finished reading the data

 

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

 

bsf  LCD_E   ; Setup to clock data

 

NOP

NOP

 

btfss  LCD_D7   ; Get low nibble

bcf   temp_rd, 3

btfsc  LCD_D7

bsf   temp_rd, 3

btfss  LCD_D6   

bcf   temp_rd, 2

btfsc  LCD_D6

bsf   temp_rd, 2

btfss  LCD_D5   

bcf   temp_rd, 1

btfsc  LCD_D5

bsf   temp_rd, 1

btfss  LCD_D4

 

 

 

 

 


bcf   temp_rd, 0

btfsc  LCD_D4

bsf   temp_rd, 0

 

bcf  LCD_E   ; Finished reading the data

 

FinRd

return

 

i_write      ;write instruction

call  LCDBusy

bcf  STATUS, C

call  LCDWrite

return

 

LCD_DO      ;выполнить

movwf  temp_wr   ;передача данных

call  LCDBusy

bsf  STATUS, C 

call  LCDWrite

call  Delay1ms

return

 

LCD_Write_Init     ; выводит Init...

movlw  b'10000000'   ; переход в начало

movwf  temp_wr   ; первой строки

call   i_write

movlw  0x49

call   LCD_DO  

movlw  0x6E

call   LCD_DO 

movlw  0x69

call   LCD_DO 

movlw  0x74

call   LCD_DO

movlw  0x2E

call   LCD_DO

movlw  0x2E

call   LCD_DO

movlw  0x2E

call   LCD_DO

return

 

LCD_Write_Init_finish    ; выводит Init finish

movlw  b'10000000'   ; переход в начало

movwf  temp_wr   ; первой строки

call   i_write

movlw  0x49

call   LCD_DO  

movlw  0x6E

call   LCD_DO

 

 

 

 

 


movlw  0x69

call   LCD_DO 

movlw  0x74

call   LCD_DO

movlw  0x20

call   LCD_DO

movlw  0x66

call   LCD_DO

movlw  0x69

call   LCD_DO

movlw  0x6E

call   LCD_DO

movlw  0x69

call   LCD_DO

movlw  0x73

call   LCD_DO

movlw  0x68

call   LCD_DO

return

 

LCD_Write_finish     ; выводит Finish!!!

movlw  b'10000000'   ; переход в начало

movwf  temp_wr   ; первой строки

call   i_write

 

movlw  0x46

call   LCD_DO

movlw  0x69

call   LCD_DO

movlw  0x6E

call   LCD_DO

movlw  0x69

call   LCD_DO

movlw  0x73

call   LCD_DO

movlw  0x68

call   LCD_DO

movlw  0x21

call   LCD_DO

movlw  0x21

call   LCD_DO

movlw  0x21

call   LCD_DO

return   

 

LCD_Write_Run     ; выводит Run

movlw  b'10000000'   ; переход в начало

movwf  temp_wr   ; первой строки

call   i_write

movlw  0x52

call   LCD_DO  

movlw  0x75

 

 

 

 


call   LCD_DO 

movlw  0x6E

call   LCD_DO 

return 

 

LCD_Write_Stop     ; выводит STOP!!!

movlw  b'10000000'   ; переход в начало

movwf  temp_wr   ; первой строки

call   i_write

movlw  0x53

call   LCD_DO  

movlw  0x54

call   LCD_DO 

movlw  0x4F

call   LCD_DO 

movlw  0x50

call   LCD_DO

movlw  0x21