Автор работы: Пользователь скрыл имя, 26 Апреля 2013 в 11:42, курсовая работа
В данной курсовой работе будет реализовано устройство, формирующее прямоугольные сигналы, которые будут формироваться после выхода из режима ожидания с помощью нажатия на кнопку. Так же после нажатия кнопки прерывания устройство должно будет формировать пачки импульсов с определенным шагом и временем формирования. Количество сформированных пачек импульсов будут поступать в память EEPROM и оставаться там. К устройству будет подключен 7-ми сегментный индикатор, который будет выводить в десятичной системе счисления количество сформированных пачек.
ВВЕДЕНИЕ 3
1. ЗАДАНИЕ 4
2. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ 5
3. РЕЗУЛЬТАТЫ ПРОДЕЛАННОЙ РАБОТЫ 15
ЗАКЛЮЧЕНИЕ 18
СПИСОК ЛИТЕРАТУРЫ 19
ПРИЛОЖЕНИЕ 20
Рисунок 1 – Режим ожидания на Oscilloscope
Oscilloscope находиться в режиме ожидания, ждет нажатия клавиши. В моем случае клавиша RA3 на Microcontroller View. Все порты (PORTB,0; PORTA,3; PORTA,1; PORTA,2) находятся в режиме ожидания. PORTB,0 – отвечает за прерывание, который зависит от кнопки INT/RB0. PORTA,3 – отвечает за режим ожидания, который зависит от кнопки RA3. PORTA,1 и PORTA,2 находятся в режиме ожидания, как только будет нажата кнопка RA3, PORTA,1 будет показывать прямоугольные импульсы. Как только RA3 снова нажмут, PORTA,2 будет показывать пачки импульсов, вырисовывающиеся с шагом в моем случае шаг равен 4.
Рисунок 2 – Нажатие кнопки RA0
После нажатия RA3, устройство выходит из режима ожидания. На Microcontroller View видно, что RA3 включен. На PORTA,3 видно, что режим перешел из режима ожидания в режим активности. А PORTA,1 модулирует прямоугольные сигналы.
Рисунок 3 – Нажатие клавиши INT/RB0
После нажатия клавиши INT/RB0 на PORTA,2 стали модулироваться пачки импульсов с шагом в 4, первые 3 импульса были смодулированы.
Рисунок 4 – Считывание пачек сигналов
На Рисунке 4 показано считывание, количества импульсов в одной пачке. Т.е. на рисунке 3 было показано 3 импульса, следующие 7 импульсов и так будет идти до 19 импульсов, с шагом в 4 импульса. Когда модуляция дойдет до 19-ти импульсов, то импульсы заново начнут модуляцию с 3 импульсов. После каждой модуляции импульса, количество импульсов записывается в EEPROM Memory Editor в 16-ой системе исчисления и отображается на 7-Segment LED Display Panel в виде десятичного числа.
В данной курсовой работе была изучена работа с PIC Simulator IDE. Так же были изучены команды микроконтроллера PIC, проанализировано формирование прямоугольных сигналов с помощью автоколебательного мультивибратора и устройства формирования сигналов тонального вызова. Был разобран метод сканирования прерываний. Организован вычисляемый переход с помощью goto. Так же была проделана работа с динамической индексацией с помощью 7-ми сегментного индикатора и реализована работа с EEPROM памятью.
; Begin
R0L EQU 0xC
R0H EQU 0xD
R1L EQU 0xE
R1H EQU 0xF
R2L EQU 0x10
R2H EQU 0x11
R3L EQU 0x12
R3H EQU 0x13
R4L EQU 0x14
R4H EQU 0x15
R5L EQU 0x16
R5H EQU 0x17
W_TEMP EQU 0x4F
STATUS_TEMP EQU 0x4E
ORG 0x0000
BCF PCLATH,3
BCF PCLATH,4
GOTO L0002
ORG 0x0004
MOVWF W_TEMP
SWAPF STATUS,W
CLRF STATUS
MOVWF STATUS_TEMP
CALL L0003
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
RETFIE
L0002:
; 1: Dim sec As Word 'длительность гребня для цикла
; The address of 'sec' is 0x18
sec EQU 0x18
; 2: Dim pach As Byte 'количество в пачке для цикла
; The address of 'pach' is 0x1A
pach EQU 0x1A
; 3: Dim n0 As Byte 'начальное количество
; The address of 'n0' is 0x1B
n0 EQU 0x1B
; 4: Dim n1 As Byte 'конечное количество
; The address of 'n1' is 0x1C
n1 EQU 0x1C
; 5: Dim s As Byte 'приращение
; The address of 's' is 0x1D
s EQU 0x1D
; 6: Dim n As Byte 'количество в пачке текущеe
; The address of 'n' is 0x1E
n EQU 0x1E
; 7: Dim bool As Byte
; The address of 'bool' is 0x1F
bool EQU 0x1F
; 8: Dim j As Byte
; The address of 'j' is 0x20
j EQU 0x20
; 9: INTCON.INTE = 1 'разрешает прерывание RB0/INT
BSF 0x0B,4
; 10: INTCON.GIE = 1 'включает все прерывания
BSF 0x0B,7
; 11: n0 = 5
MOVLW 0x05
MOVWF 0x1B
; 12: s = 4
MOVLW 0x04
MOVWF 0x1D
; 13: n1 = 21
MOVLW 0x15
MOVWF 0x1C
; 14: n = n0
MOVF 0x1B,W
MOVWF 0x1E
; 15: While PORTA.3 = 0
L0004:
BTFSC 0x05,3
GOTO L0005
; 16: Wend
GOTO L0004
L0005: MOVLW 0x1F
ANDWF STATUS,F
; 17: bool = 0 '-----------------------------
CLRF 0x1F
; 18: TRISB = %00000001
BSF STATUS,RP0
MOVLW 0x01
MOVWF 0x06
; 19: TRISA = %11101000 '-----------------------------
MOVLW 0xE8
MOVWF 0x05
BCF STATUS,RP0
; 20: m1:
L0001:
; 21: While bool = 0
L0006:
MOVF 0x1F,W
SUBLW 0x00
BTFSS STATUS,Z
GOTO L0007
; 22: PORTA.1 = 0
BCF 0x05,1
; 23: For sec = 1 To 2
MOVLW 0x01
MOVWF 0x18
CLRF 0x19
L0008:
MOVF 0x18,W
MOVWF R0L
MOVF 0x19,W
MOVWF R0H
CLRF R1H
MOVLW 0x02
CALL C003
BTFSS STATUS,Z
GOTO L0009
; 24: Next sec
MOVLW 0x01
ADDWF 0x18,F
MOVLW 0x00
BTFSC STATUS,C
ADDLW 0x01
BTFSC STATUS,C
GOTO L0009
ADDWF 0x19,F
BTFSS STATUS,C
GOTO L0008
L0009: MOVLW 0x1F
ANDWF STATUS,F
; 25: PORTA.1 = 1
BSF 0x05,1
; 26: For sec = 1 To 2
MOVLW 0x01
MOVWF 0x18
CLRF 0x19
L0010:
MOVF 0x18,W
MOVWF R0L
MOVF 0x19,W
MOVWF R0H
CLRF R1H
MOVLW 0x02
CALL C002
BTFSS STATUS,Z
GOTO L0011
; 27: Next sec
MOVLW 0x01
ADDWF 0x18,F
MOVLW 0x00
BTFSC STATUS,C
ADDLW 0x01
BTFSC STATUS,C
GOTO L0011
ADDWF 0x19,F
BTFSS STATUS,C
GOTO L0010
L0011: MOVLW 0x1F
ANDWF STATUS,F
; 28: Wend '-----------------------------
GOTO L0006
L0007: MOVLW 0x1F
ANDWF STATUS,F
;-----------------------------
; 29: While bool = 1
L0012:
MOVF 0x1F,W
SUBLW 0x01
BTFSS STATUS,Z
GOTO L0014
; 28: For pach = 1 To n
MOVLW 0x01
MOVWF 0x1A
L0014:
MOVF 0x1A,W
SUBWF 0x1E,W
BTFSS STATUS,C
GOTO L0016
; 29: PORTA.2 = 0
BCF 0x05,2
; 30: For sec = 1 To 1
MOVLW 0x01
MOVWF 0x18
CLRF 0x19
L0016:
MOVF 0x18,W
MOVWF R0L
MOVF 0x19,W
MOVWF R0H
CLRF R1H
MOVLW 0x01
CALL C002
BTFSS STATUS,Z
GOTO L0017
; 31: Next sec
MOVLW 0x01
ADDWF 0x18,F
MOVLW 0x00
BTFSC STATUS,C
ADDLW 0x01
BTFSC STATUS,C
GOTO L0017
ADDWF 0x19,F
BTFSS STATUS,C
GOTO L0016
L0017: MOVLW 0x1F
ANDWF STATUS,F
; 32: PORTA.2 = 1
BSF 0x05,2
; 33: For sec = 1 To 1
MOVLW 0x01
MOVWF 0x18
CLRF 0x19
L0018:
MOVF 0x18,W
MOVWF R0L
MOVF 0x19,W
MOVWF R0H
CLRF R1H
MOVLW 0x01
CALL C002
BTFSS STATUS,Z
GOTO L0019
; 34: Next sec
MOVLW 0x01
ADDWF 0x18,F
MOVLW 0x00
BTFSC STATUS,C
ADDLW 0x01
BTFSC STATUS,C
GOTO L0019
ADDWF 0x19,F
BTFSS STATUS,C
GOTO L0018
L0019: MOVLW 0x1F
ANDWF STATUS,F
; 35: Next pach
MOVLW 0x01
ADDWF 0x1A,F
BTFSS STATUS,C
GOTO L0014
L0015: MOVLW 0x1F
ANDWF STATUS,F
; 36: PORTA.2 = 0
BCF 0x05,2
; 37: For sec = 1 To 4
MOVLW 0x01
MOVWF 0x18
CLRF 0x19
L0020:
MOVF 0x18,W
MOVWF R0L
MOVF 0x19,W
MOVWF R0H
CLRF R1H
MOVLW 0x04
CALL C003
BTFSS STATUS,Z
GOTO L0020
; 38: Next sec
MOVLW 0x01
ADDWF 0x18,F
MOVLW 0x00
BTFSC STATUS,C
ADDLW 0x01
BTFSC STATUS,C
GOTO L0021
ADDWF 0x19,F
BTFSS STATUS,C
GOTO L0020
L0021: MOVLW 0x1F
ANDWF STATUS,F
; 39: n = n + s
MOVF 0x1E,W
ADDWF 0x1D,W
MOVWF 0x1E
; 40: Write 00, n
MOVLW 0x00
MOVWF EEADR
MOVF 0x1E,W
MOVWF EEDATA
BSF STATUS,RP0
BSF EECON1,2
MOVLW 0x55
MOVWF EECON2
MOVLW 0xAA
MOVWF EECON2
BSF EECON1,1
BCF EECON1,4
; 41: If n > n1 Then n = n0
BCF STATUS,RP0
MOVF 0x1E,W
SUBWF 0x1C,W
BTFSC STATUS,C
GOTO L0023
MOVF 0x1B,W
MOVWF 0x1E
L0023: MOVLW 0x1F
ANDWF STATUS,F
; 42: Wend
GOTO L0012
L0013: MOVLW 0x1F
ANDWF STATUS,F
; 43: Goto m1
GOTO L0001
; 44: End
L0024: GOTO L0024
; 45: On Interrupt
L0003:
; 46: If bool = 0 Then bool = 1 Else bool = 0
MOVF 0x1F,W
SUBLW 0x00
BTFSS STATUS,Z
GOTO L0021
MOVLW 0x01
MOVWF 0x1F
GOTO L0024
L0025: MOVLW 0x1F
ANDWF STATUS,F
CLRF 0x1F
L0026: MOVLW 0x1F
ANDWF STATUS,F
; End of program
; Comparison Routine
C001: MOVWF R1L
MOVLW 0x05
GOTO C007
C002: MOVWF R1L
MOVLW 0x02
GOTO C007
C003: MOVWF R1L
MOVLW 0x06
GOTO C007
; End of listing
END
Информация о работе Разработка устройства, формирующего пачки импульсов