reset:
rjmp start
reti ; Addr $01
reti ; Addr $02
reti ; Addr $03
rjmp Timer; Addr $04
reti ; Addr $05
reti ; Addr $06
reti ; Addr $07
reti ; Addr $08
reti ; Addr $09
reti ; Addr $0A
reti ; Addr $0B
reti ; Addr $0C
reti ; Addr $0D
reti ; Addr $0E
reti ; Addr $0F
reti ; Addr $10
start:
ldi temp,high(RAMEND)
out SPH, temp
ldi temp, low(RAMEND)
out SPL, temp
ldi Const00,$00
ldi ConstFF,$FF
ldi Ampl,0
out DDRA, ConstFF ;ЦАП
out DDRB , ConstFF ;led
out DDRD, Const00 ;sb1-sb8
out PORTD, ConstFF
out PORTA, Const00
ldi led, 0b11111110
out PORTB,led
ldi temp, 0b00100000
out MCUCR, temp
ldi temp,0b01000010
out TIMSK,temp
ldi timeh,$07
ldi timel,$A1
out OCR1AH, timeh
out OCR1AL, timel
out TCCR1A,Const00
ldi temp, 0b00001001
out TCCR1B,temp ;настройкатаймера
sei
m0:
sbis PIND,0
rjmp m1
sbis PIND,1
rjmp m2
sbis PIND,2
rjmp m3
sbis PIND,3
rjmp m4
sbis PIND,4
rjmp m5
sbis PIND,5
rjmp m6
sbis PIND,6
rjmp m7
sbis PIND,7
rjmp m8 ; опроскнопок
rjmp m0
m1: ldi led, 0b11111110
ldi timeh,$07
ldi timel,$A1
out OCR1AH, timeh
out OCR1AL, timel
out PORTB,led
rjmp m0
m2: ldi led, 0b11111101
ldi timeh,$06
ldi timel,$1A
out OCR1AH, timeh
out OCR1AL, timel
out PORTB,led
rjmp m0
m3: ldi led, 0b11111011
ldi timeh,$05
ldi timel,$16
out OCR1AH, timeh
out OCR1AL, timel
out PORTB,led
rjmp m0
m4: ldi led, 0b11110111
ldi timeh,$04
ldi timel,$5C
out OCR1AH, timeh
out OCR1AL, timel
out PORTB,led
rjmp m0
m5: ldi led, 0b11101111
ldi timeh,$03
ldi timel,$D0
out OCR1AH, timeh
out OCR1AL, timel
out PORTB,led
rjmp m0
m6: ldi led, 0b11011111
ldi timeh,$03
ldi timel,$64
out OCR1AH, timeh
out OCR1AL, timel
out PORTB,led
rjmp m0
m7: ldi led, 0b10111111
ldi timeh,$03
ldi timel,$0D
out OCR1AH, timeh
out OCR1AL, timel
out PORTB,led
rjmp m0
m8: ldi led, 0b01111111
ldi timeh,$02
ldi timel,$C6
out OCR1AH, timeh
out OCR1AL, timel
out PORTB,led
rjmp m0
Timer:inc Ampl
out PORTA,Ampl
reti ; прерывание от Т1
Файл проекта VMLAB
; ************************************************************
; PROJECT:
; AUTHOR:
; ************************************************************
; Micro + software running
; ------------------------------------------------------------
.MICRO "AT90S8515"
.PROGRAM "my_idea.asm"
.TARGET "my_idea.hex"
.TRACE ; Activate micro trace
; Following lines are optional; if not included
; exactly these values are taken by default
; ------------------------------------------------------------
.POWER VDD=5 VSS=0 ; Power nodes
.CLOCK 4meg ; Micro clock
.STORE 1000m ; Trace (micro+signals) storage time
; Micro nodes: RESET, PA0-PA7, PB0-PB7, PC0-PC7, PD0-PD7, PE0-PE2, ACO, TIM1OVF
; Define here the hardware around the micro
; ------------------------------------------------------------
X1 D2A8 PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 out
D1 VDD node1 ; x: Panel LEDs 1 - 8
R1 node1 PB0 1k
D2 VDD node2 ; x: Panel LEDs 1 - 8
R2 node2 PB1 1k
D3 VDD node3 ; x: Panel LEDs 1 - 8
R3 node3 PB2 1k
D4 VDD node4 ; x: Panel LEDs 1 - 8
R4 node4 PB3 1k
D5 VDD node5 ; x: Panel LEDs 1 - 8
R5 node5 PB4 1k
D6 VDD node6 ; x: Panel LEDs 1 - 8
R6 node6 PB5 1k
D7 VDD node7 ; x: Panel LEDs 1 - 8
R7 node7 PB6 1k
D8 VDD node8 ; x: Panel LEDs 1 - 8
R8 node8 PB7 1k
K1 GND PD0
K2 GND PD1
K3 GND PD2
K4 GND PD3
K5 GND PD4
K6 GND PD5
K7 GND PD6
K8 GND PD7
.PLOT V(out)
4. РЕЗУЛЬТАТЫ ЭМУЛЯЦИИ ПРОГРАММЫ В ПАКЕТЕ VMLAB
Рисунок 1 – Результат работы в режиме 1.
Рисунок 2 – Результат работы в режиме 2.
Рисунок 3 – Результат работы в режиме 3.
Рисунок 4 – Результат работы в режиме 4.
Рисунок 5 – Результат работы в режиме 5.
Рисунок 6 – Результат работы в режиме 6.
Рисунок 7 – Результат работы в режиме 7.
Рисунок 8 – Результат работы в режиме 8.
5. АНАЛИЗ ВРЕМЕННЫХ СООТНОШЕНИЙ И ОЦЕНКА ПОГРЕШНОСТЕЙ
Чтобы рассчитать константу k, которую необходимо поместить в регистр сравнения таймера Т1, разделим тактовую частоту процессора на 256, так как за 256 прерываний от таймера формируется 1 период пилообразного напряжения: 4 МГц/256=15625 Гц. Теперь, чтобы определить необходимую константу, разделим 15625 Гц на требуемую частоту сигнала. Проведём, к примеру, расчет для частоты сигнала 8 Гц:
k=15625 Гц/8 Гц=1953,125.
Чтобы поместить полученное значение в регистр сравнения, его необходимо округлить и преобразовать в шестнадцатеричную форму: k=$07A1. Так как почти все рассчитанные значения приходится округлять, это вызывает погрешности в формировании частоты. Анализируя полученные значения частот в пакете VMLAB, можно сделать вывод о том, что погрешности не превышают предел в 1%, который определён в задании.
ВЫВОДЫ
В процессе выполнения курсового проекта была разработана схема программно управляемого генератора линейно-нарастающего напряжения сверхнизкой частоты, а также был составлен алгоритм и текст программы функционирования прибора. Полученное устройство обладает следующими характеристиками:
- возможность установки 8 фиксированных значений частоты сигнала (8, 10, 12, 14, 16, 18, 20, 22 Гц) 8-ю кнопками;
- амплитуда сигнала плавно изменяется в пределах от 0 до 15 В переменным резистором;
- индикация амплитуды осуществляется с помощью 8-ми светодиодов.
В результате эмуляции работы генератора в пакете VMLAB оценены погрешности установки частоты, которые не превышают 1%.
ПРИЛОЖЕНИЕ 1
ПЕРЕЧЕНЬ ЭЛЕМЕНТОВ