RTIF EQU 2
INTF EQU 1
RBIF EQU 0
;-------------------------------------------;OPTION
RBPU EQU 7
INTEDG EQU 6
RTS EQU 5
RTE EQU 4
PSA EQU 3
PS2 EQU 2
PS1 EQU 1
PSO EQU 0
;--------------------------------------------;PORTA
MinusBut EQU 4 ;in
CLKout EQU 4
Fout EQu 4
VD1 EQU 3 ;out
FullBut EQU 3 ;in
CLKin EQU 3
VD2 EQU 2 ;out
G_But EQU 2 ;in
DATAout EQU 2
VD3 EQU 1 ;out
L_But EQU 1 ;in
VD4 EQU 0 ;out
IdleBut EQU 0 ;in
DATAin EQU 0
;-------------------------------------------;PORTB
In2 EQU 7 ;in
In1 EQU 6 ;in
IdleIn EQU 5 ;in
FullIn EQU 3 ;in
PlusBut EQU 4 ;in
SESS EQU 4
Out1 EQU 2 ;out
Out2 EQU 1 ;out
Fin EQU 0 ;in
;-------------------------------------------;FLAGS1
In1_State EQU 7 ;Текущее сост. входа 1
In2_State EQU 6 ;Текущее сост. входа 2
;--Register Files-INDF EQU 0x00
TMR0 EQU 0x01
;--STATUS bits-NOT_PD EQU 0x03
NOT_TO EQU 0x04
;--INTCON bits-T0IF EQU 0x02
T0IE EQU 0x05
; Eeprom memory dump
;*** Programm dump ***
org 0x0000 ;Start address
goto START
;Обработчик прерывания
addlw 0xFF
addlw 0xFF
addlw 0xFF
btfsc INTCON,RBIF
;Переход если прерывание по порту B
goto RBProc
btfsc INTCON,INTF
;Если прерывание от ножки INT
goto INTProc
bcf STATUS,RP0
goto INT_END
INTProc
RBProc
INT_END
bcf INTCON,RBIF
bcf INTCON,INTF
bcf INTCON,T0IF
retfie
;Подпрограммы
DEBOUNCE ;Задержка против дребезга
bcf INTCON,GIE
movlw 0xFF
movf LASTBYTE,F
bsf INTCON,GIE
M1_DEBOUNCE
goto M2_DEBOUNCE
M2_DEBOUNCE
goto M3_DEBOUNCE
M3_DEBOUNCE
goto M4_DEBOUNCE
M4_DEBOUNCE
goto M5_DEBOUNCE
M5_DEBOUNCE
goto M6_DEBOUNCE
M6_DEBOUNCE
goto M7_DEBOUNCE
M7_DEBOUNCE
goto M8_DEBOUNCE
M8_DEBOUNCE
goto M9_DEBOUNCE
M9_DEBOUNCE
decfsz LASTBYTE,F
goto M1_DEBOUNCE
return
;вывод на светодиоды
UpdateInd
movf TEMP2
andlw 0x0F
movwf PORTA
return
;чтение ппзу
ReadEEPROM
;Загружаем адрес в W
movlw 02
movwf EEADR
;страница памяти 1
bsf STATUS,RP0
;последовательность команд для чтения из EEPROM
bsf EECON1,RD
;страница памяти 0
bcf STATUS,RP0
;пересылаем считанное значение в W
movf EEDATA,W
return
;запись в ппзу
WriteEEPROM
;Загружаем данные
movwf EEDATA
;Загружаем адрес в W
movlw 02
;устанавливаем адрес
movwf EEADR
;запрещаем прерывания
bcf INTCON,GIE
;страница памяти 1
bsf STATUS,RP0
;разрешаем запись
bsf EECON1,WREN
;последовательность команд для записи в EEPROM
movlw 0x55
movwf EECON2
movlw 0xAA
movwf EECON2
bsf EECON1,WR
;страница памяти 0
bcf STATUS,RP0
;разрешаем прерывания
bsf INTCON,GIE
bsf INTCON,EEIE
return
START
;устанавливаем страницу памяти 1
bsf STATUS,RP0
;устанавливаем прерывание по положительному фронту на ножке int
;и подключаем делитель к WDT
movlw 0x48
option
;устанавливаем пятый бит порта А на ввод
; movlw 0xF9
; movwf 0x06
;устанавливаем второй и третий биты порта В на вывод Out1 Out2
movlw 0x10
movwf 0x05
;устанавливаем страницу памяти 0
bcf STATUS,RP0
;разрешаем прерывания
movlw 0xB8
movwf INTCON
call ReadEEPROM
movwf TEMP2
Wait
btfss PORTB, Out1
goto Programming
;Уходим на счетчик увеличения
call UpdateInd
goto Wait
Programming
;Продседура увеличивающая отображаемое значение
call DEBOUNCE
incf TEMP2
movf TEMP2, W
andlw 0x0F
movwf TEMP2
movf TEMP2, W
call WriteEEPROM
call UpdateInd
goto Wait
END
Задание 4: Откомпилировать проект и протестировать его.
Содержание отчета:
1) Краткое описание EEPROM.
2) Временные диаграммы заданных битов порта А.
Литература:
1) Документация фирмы MICROCHIP в формате pdf.
2) “Микроконтроллеры PIC16C7X” В. А. Ульрих – Наука и Техника 2000г.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.