Исходный текст программы

LIST P=18F452, F=INHX32

#include <P18F452S.INC>

reg0 equ 080h

reg1 equ 081h

reg2 equ 082h

reg3 equ 083h

reg4 equ 084h

reg5 equ 085h

org 100h

Start

movlw 0;Установка позиции дисплея

;00h=начало первой строки

;40h= - второй строки

call LCD_SET;Команда на установку дисплея

print string001;Вывести строку символов до 0

;с текущей позиции дисплея

movlw 40;Установка позиции дисплея

call LCD_SET;Начало второй строки

movlw '@';Вывод символа в текущую позицию дисплея

call LCD_DATA

main_loop;Начало основного цикла

call RX_KEY;Ждём нажатия на клавишу

movwf reg5;Помещаем код клавиши во врем. регистр

cmp reg5,1B;Сравниваем в.р. с кодом 1В (ESC)

bz strin01;если нет, если да то переход на....

movf reg5,w;то выводим символ нажатой клавиши

call LCD_DATA;на дисплей

goto main_loop;Возврат на начало цикла

strin01

;ВНИМАНИЕ: в этой программе строка символов,

;для вывода как бегущая строка, находится по адресу 200h

movlw.55;Задаём кол-во символов в строке

movwf reg0;во в.р.

clrf TBLPTRU;Очистить старший адрес т.к. он не исп.; (чтобы не мешал;)

clrf reg2;в.р. позиции в строке

cik02 movf reg2,w;Берём из в.р. позицию в строке

movwf TBLPTRL;Помещаем как младший адрес

movlw 2; 2 как старший адрес

movwf TBLPTRH;т.к. адрес строки 200h

movlw 0

call LCD_SET

movlw.16;заносим в в.р.кол-во выводимых символов

movwf reg1;за один раз.

cik001 tblrd*+;читаем из Flash символ по адресу 0002XXh

;TBLPTRU=00h

;TBLPTRH=02h

;TBLPTRL=XXh

;в TABLAT

movf TABLAT,w;Помещаем символ в W

call LCD_DATA;Выводим символ....

decfsz reg1;повторяем этот цикл 16 раз

bra cik001;пока не ноль.

call pause;программа задержки

incf reg2,f;переход позиции на сл. символ.

decfsz reg0;повторяем вывод до конца символов

bra cik02;в строке

bra Start;переход на старт программы

pause

movlw.255

movwf reg4

pz02

movlw.255

movwf reg3

pz01 nop

nop

nop

nop

nop

nop

nop

nop

nop

nop

decfsz reg3

goto pz01

; bra pz01

decfsz reg4

bra pz02

return

string001 db "INIT_OK SET",0

; dw 0000h

; dd 00000000h

; dq 0..0h

org 200h

string002 db " STUDENT GRUPPI 6-UI-7 SOKOV ALEKS ",0

end; Конец текста программы.

Варианты заданий к лабораторной работе

№ Варианта клавиша № Варианта клавиша
      x
  n   z
  z   p
  m    
  c    
  h   y
      q
  v    
      b
      a
  f   c
      d
      e

Каждый студент изменяет текст программы таким образом, чтобы неподвижная информация соответствовала его фамилии, а при нажатии, соответствующую варианту бегущей строкой выводился текст типа: “Фамилия Имя Отчество - студент факультета АиУ МГТУ МАМИ ”

В отчёт по данной лабораторной работе включается:

1. Краткая теоретическая часть

2. Исходный текст программы

3. Результат бегущей строки преподаватель проверяет визуально на учебном стенде.

Контрольные вопросы:

1. Какого должно быть значение регистров TBLPTRU, TBLPTRH, TBLPTRL если начало текста бегущей строки будет с адреса 0003FAh?

2. Как необходимо продолжить макрос print, если неподвижная информация обозначена меткой student?

3. Какие изменения необходимо внести в программу, чтобы перед выводом бегущей строки во второй строке индикатора был выведен порядковый номер студента?

4. Объясните назначение команды bz strin01?

5. Объясните назначение команды clrf reg2?

ПРИЛОЖЕНИЕ А

(обязательно)

Московский Государственный Технический Университет “МАМИ”

Факультет “Автоматизация и управление”

Кафедра “Автоматика и Процессы Управления”

Отчёт по лабораторному практикуму

По дисциплине: “Программно – логическое управление”

Студент: ______________________________/______________/группа __________

ПРЕПОДАВАТЕЛЬ:____________________/_______________/

Защишено с оценкой _____________

Дата: ____________200_ г.

Москва – 200_ г.

Приложение В.Команды микроконтроллера

Мнемоника Операнды Описание команды До выполнения Примеры выполнения команды После выполнения
ADDWF f, d, a Сложение W и f W+f W = 0x1b f = 0x02 ADDWF reg, 0, 0 W = 0x1d, f = 0x02
ADDWF reg, 1, 0 W = 0x02, f = 0x1d
ADDWFC f, d, a Сложение W и f и бита С W+f +C W = 0x1b f = 0x02 C= 1 ADDWFC reg, 0, 0 W = 0x1e, f = 0x02
ADDWFC reg, 1, 0 W = 0x02, f = 0x1e
ANDWF f, d, a Логическое «И» W и f 1*1=1, 1*0=0, 0*1=0, 0*0=0 W=10010111 f = 10111011 ANDWF reg, 0, 0 W=10010011, f = 10111011
ANDWF reg, 1, 0 W =10111011, f=10010011
CLRF f, a Очистка (обнуление) f f=0x4a CLRF reg, 0 f=0x0
COMF f, d, a Инверсия f f=11001100 W=? COMF reg, 0, 0 f=00110011 W=?
COMF reg, 1, 0 W=00110011 f=11001100
CPFSEQ f, a Сравнить W и f, проп. если W=f W = 0x1а f = 0x09 CPFSEQ reg, 0 Cлед. Команда выполняется
CPFSGT f, a Сравнить W и f, проп. если W>f W = 0x1а f = 0x09 CPFSGT reg, 0 Cлед. команда пропускается
CPFSLT f, a Сравнить W и f, проп. если W<f W = 0x1а f = 0x09 CPFSLT reg, 0 Cлед. команда выполняется
DECF f, d, a Декремент f f-1 f = 0x07 W=? DECF reg, 0,0 W = 0x06, f = 0x07
DECF reg, 1,0 W =? f = 0x06
DECFSZ f, d, a Декремент f, проп. если f=0 f = 0x07 W=? DECFSZ reg, 0, 0 W = 0x06, f = 0x07 Cлед. Команда выполняется
DECFSZ reg, 1, 0 W =?,f = 0x06 Cлед.Команда выполняется
DCFSNZ f, d, a Декремент f, проп. если f не 0 f = 0x07 W=? DCFSNZ reg, 0, 0 W = 0x06,f = 0x07 Cлед. Команда выполняется
DCFSNZ reg, 1, 0 W =?,f = 0x06 Cлед. команда выполняется
INCF f, d, a Инкремент f f+1 f = 0x07 W=? INCF reg, 0,0 W = 0x08, f = 0x07
INCF reg, 1,0 W =? f = 0x07
INCFSZ f, d, a Инкремент f, проп. если f =0x00 f = 0x07 W=? INCFSZ reg, 0,0  
INCFSZ reg, 1,0  
INFSNZ f, d, a Инкремент f, проп. если f =0x00 f = 0x07 W=? INFSNZ reg, 0,0  
INFSNZ reg, 1,0  
IORWF f, d, a Логическое «ИЛИ» W и f W=10010111 f =10111011 IORWF reg, 0, 0 W =1011111 f=10111011
IORWF reg, 1, 0 f=1011111 W=10111011
MOVF f, d, a Переместить f в W f = 0x04 W=? MOVF reg, 0, 0 f = 0x04 W=0x04
MOVFF fs, fd Переместить fs в fd fs= 0x1c fn=? MOVFF reg1, reg2 fs= 0x1c fn= 0x1c
MOVWF f, a Переместить W в f f =? W=0x07 MOVF reg, 0 f = 0x07 W=0x07
MULWF f, a Умножение W и f      
NEGF f, a Негативное значение f      
RLCF f, d, a Сдвиг влево через перенос W=? f = 0010001 1)С=1 2)С=0 RLCF reg, 0, 0 f= 0010001 1)W=0100011 2)W=0100010
RLCF reg, 1, 0 W=? 1)f=0100011 2)f=0100010
RLNCF f, d, a Сдвиг влево без переноса W=? f = 0010001 RLCNF reg, 0, 0 f= 0010001 W=0100010
RLCNF reg, 1, 0 W=? f=0100010
RRCF f, d, a Сдвиг вправо через перенос W=? f = 00100100 1)С=1 2)С=0 RRCF reg, 0, 0 f= 00100100 1)W=10010010 2)W=00010010
RRCF reg, 1, 0 W= 00100100 1)f=10010010 2)f=00010010
RRNCF f, d, a Сдвиг вправо без переноса W=? f = 00100100 RRNCF reg, 0, 0 f= 00100100 W=00010010
RRNCF reg, 1, 0 W= 00100100 f=00010010
SETF f Установить все биты f в 1 f = 00100100 SETF reg f=11111111
SUBFWB f, d, a Вычитание f из W c заемом W= 11111111 f = 00000001 1)С=1 2)С=0 SUBFWB reg, 0, 0 f= 00000001 1)W=11111101 2)W=11111110
SUBFWB reg, 1, 0 W= 00000001 1)f=11111101 2)f=11111110
SUBWF f, d, a Вычитание W из f f= 0x3d W= 0x1c SUBWF reg, 0, 0 W=0x21 f=0x3d
SUBWF reg, 1, 0 f=0x21 W=0x3d
SUBWFB f, d, a Вычитание W из f c заемом W-f-C f= 0x3d W= 0x1c C=1 SUBWFB reg, 0, 0 W=0x20 f=0x3d
SUBWFB reg, 1, 0 f=0x20 W=0x3d
SWAPF f, d, a Поменять местами полубайты в f W=? f = 11110000 SWAPF reg, 0, 0 W= 00001111 f = 11110000
SWAPF reg, 1, 0 W=? f = 00001111
TSTFSZ f, a Тест f, проп. если f=0x0 f=0x0 TSTFSZ reg, 0 Cлед. команда пропускается
XORWF f, d, a Логическое исключающее «ИЛИ» W= 11001100 f = 10101010 XORWF reg, 0, 0 W=01100110 f = 10101010
XORWF reg, 1, 0 f=01100110 W = 10101010
Бит ориентированные команды
BCF f, b, a Сброс бита в f (b=0…7) f = 11100001 BCF reg, 2, 0 f= 11000001
BCF reg, 7, 0 f = 11100000
BSF f, b, a Установка бита в f f = 11100001 BSF reg, 4, 0 f= 11101001
BSF reg, 6, 0 f = 11100011
BTFSC f, b, a Тест бита, проп. если b=0 f = 11100001 BTFSC reg, 1, 0 Cлед. команда выполняется
BTFSC reg, 5, 0 Cлед. команда пропускается
BTFSS f, b, a Тест бита, проп. если b=1 f = 11100001 BTFSS reg, 1, 0 Cлед. команда пропускается
BTFSS reg, 5, 0 Cлед. команда выполняется
BTG f, b, a Инверсия бита в f f = 11100001 BTG reg, 6, 0 f = 11100011
BTG reg, 7, 0 f = 11100000
BC n Переход, если перенос (С=1) 1) C=1 2) C=0 BC metka 1) Переход к метке 2) Нет перехода
BN n Переход, если нег. резулт. (N=1) 1) N=1 2) N=0 BN metka 1) Переход к метке 2) Нет перехода
BNC n Переход, если нет переноса (С=0) 1) C=1 2) C=0 BNC metka 1) Нет перехода 2) Переход к метке
BNN n Переход, если пол. резулт. (N=0) 1) N=1 2) N=0 BNN metka 1) Нет перехода 2) Переход к метке
BNOV n Переход, если нет переполн. (OV=0) 1) OV=1 2) OV=0 BNOV metka 1) Нет перехода 2) Переход к метке
BNZ n Переход, если не нуль (Z=0) 1) Z=1 2) Z=0 BNZ metka 1) Нет перехода 2) Переход к метке
BOV n Переход, если переполнение (OV=1) 1) OV=1 2) OV=0 BOV metka 1) Переход к метке 2) Нет перехода
BRA n Безусловный переход - BRA metka Переход к метке
BZ n Переход, если нег. резулт. (N=1) 1) N=1 2) N=0 BN metka 1) Переход к метке 2) Нет перехода
CALL n, s Переход на подпрограмму - СALL prog, 0 Переход на подпрограмму
CLRWDT - Сбросить сторожевой таймер      
DAW - Десятичная коррекция W      
GOTO n Переход по адресу - GOTO metka  
NOP - Нет операции - - -
POP - Чтение вершины стека      
PUSH - Запись в вершину стека      
RCALL n Короткий переход на подпрограмму - RСALL prog, 0 Переход на подпрограмму
RESET - Программный сброс      
RETFIE s Возврат из подпрограммы с разрешением прерываний      
RETLW k Возврат из подпрограммы с загрузкой W      
RETURN s Возврат из подпрограммы - RETURN Возврат к основной программе
SLEEP - Переход в SLEEP режим - SLEEP  
ADDLW k Прибавть константу к W W= 0x3d k = 0x21 ADDLW 0x21 W= 0x5e
ANDLW k Логическое «И» константы и W W=10010111 k = 10111011 ANDLW B’10111011’ W=10010011
IORLW k Логическое «ИЛИ» константы и W W=10010111 k =10111011 IORLW B’10111011’ W =1011111
LFSR f, k Поместить константу в FSR (k=0…3) f=2 k=0x3AB LFSR 2, 0x3AB LFSRH=0x03 LFSRL=0xAB
MOVLB k Поместить константу в BSR BSR=0x02 MOVLB 0x05 BSR=0x05
MOVLW k Поместить константу в W W=? MOVLW 0x5A W=0x5A
MULLW k Умножение константы на W W=0xC4 PRODH=? PRODL=? MULLW 0xC4 W=0xE2 PRODH=0xAD PRODL=0x08
RETLW k Возврат из подпрограммы с загрузкой W      
SUBLW k Вычитание W из константы k k=0x5D W =0x11 SUBLW 0x5D W =0x4C
XORLW k Логическое исключающее «ИЛИ» константы и W W= 11001100 k = 10101010 XORLW B’10101010’ W=01100110
             

Литература

1. Современные микроконтроллеры: Архитектура, средства проектирования, примеры применения, ресурсы сети Интернет. ©”Телесистемы”. Под ред. Коршуна И.В.; Составоение, пер с англ. и литературная обработка Горбунова Б.Б. – М:Издательство “Аким ”, 1998.- 272 с.,ил.

2. Петров И.В. Программируемые контроллеры. Стандартные языки и примеры прикладного проектирования / Под ред. В.П. Дьяконова. – М.:СОЛОН – Пресс, 2004. – 256 с.:ил. –(Серия “Библиотека инженера”

3. Ульрих В.А. Микроконтроллеры PIC16X7XX. Изд. 2-е, перераб. и доп.- СПб:Наука т Техника, 2002.- 320 стр. с ил.

Под редакцией С.Л. Корякина-Черняка, члена Международной академии информационных процессов и технологий


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: