Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЦУ курсовая АЦП ЦАП.doc
Скачиваний:
33
Добавлен:
11.09.2019
Размер:
647.17 Кб
Скачать

5.Разработка и отладка программы на языке команд мк

Рабочая программа разработана на основе спроектированного алго­ритма функционирования фильтра, результатов анализа и формализации.

Было проведено ассемблирование. Проанализировав содержание листинга программы, устранили возникшие ошибки (внесли исправление в исходный текст, с расширением .asm) и повторили ассемблирование. Далее запустили редактор связей link.exe. Получили выходной файл с расширением .tsk по запросу Parameter – ввели х.

; Распределение памяти ПЗУ (РФ 55)

;0000h – команда перехода к программе инициализации по сигналу RST

;0013h - команда перехода к программе вычисления и вывода выходного отсчёта по

;сигналу на входе

;000Bh – команда перехода к программе формирования импульса запуска устройства по

;сигналу переполнения Т/С0

;00A0h … 00CFh - программа инициализации

;00D0h … 00FFh - программа формирования импульса запуска устройства

;0100h … 07FFh - программа вычисления и вывода выходного отсчёта

; Распределение памяти ОЗУ(BE31)

;70h – 7Fh - стек

;30h,31h - хранение отсчётов Xn, Xn-1

;40h,41h – хранение отсчётов Yn,Yn-1

;50h – хранение отсчётов P1n.

;Программа "Цифровой фильтр (верхних частот)"

;Автор Оськин Александр Игоревич

;Дата 26.02.12

;Разностное уравнение Yn = Xn - Xn-1 - 0,495Yn-1

;Определение символических имён операндов

B6: .EQU 96h ;линия P1.6 для вывода импульса

;запуска АЦП

PB: .EQU 0801h ;порт PB РФ55

PA: .EQU 0800h ;порт PA РФ55

RGRF1: .EQU 0803h ;регистр направления передачи

;порта РB РФ55

RGRF2: .EQU 0802h ;регистр направления передачи

;порта РA РФ55

SRF1: .EQU 00h ;управляющее слово для настройки

;порта PB РФ55

SRF2: .EQU FFh ;управляющее слово для настройки

;порта PA РФ55

TMOD: .EQU 89h ;регистр управления режимами

;таймеров-счётчиков

STMOD: .EQU 02h ;управляющее слово для настройки

;таймера-счётчика

TH0: .EQU 8Ch ;старший байт Т/С0

STH0: .EQU 27h ;управляющее слово для задания

;частоты переполнения T/C0

TR0: .EQU 8Ch ;управляющий бит пуска T/C0

IE: .EQU A8h ;регистр разрешения прерываний

SIE: .EQU 86h ;слово разрешения прерываний

;от T/C0 и входа INT1

B: .EQU F0h ;регистр В

K: .EQU 7Eh ;коэффициент разностного уравнения

KM: .EQU 66h ;коэффициент масштабирования

X: .EQU 30h ;ячейка хранения отсчёта Xn

X1: .EQU 31h ;ячейка хранения отсчёта Xn-1

Y: .EQU 40h ;ячейка хранения отсчёта Yn

Y1: .EQU 41h ;ячейка хранения отсчёта Yn-1

PR: .EQU 50h ;ячейка хранения произведения PRn

.FILLCHAR 00h ;записать в пропусках

;между секциями нули

;Инициализация по сигналу RST

S0: .SECTION

.ORG 0000h

LJMP INIT ;переход к программе

;инициализации

S1: SECTION

.ORG 00A0h

INIT: MOV TMOD, #STMOD ;настройка режима Т/С0

MOV TH0, #STH0 ;задание частоты дискре-

;тизации

SETB TR0 ;пуск Т/С0

MOV A, #SRF1 ;настройка порта PB РФ55

MOV DPTR, #RGRF1 ;на ввод

MOVX @DPTR, A

MOV A, #SRF2 ;настройка порта РA РФ55

MOV DPTR, #RGRF2 ;на вывод

MOVX @DPTR, A

MOV IE, #SIE ;разрешение прерываний

;от Т/С0 и входа INT1

STOP: SJMP STOP ;останов программы

;Формирование импульса пуска АЦП по внутреннему прерыва-

;нию от Т/С0

S2: .SECTION

.ORG 000Bh

LJMP START ;переход к программе

;формирования импульса

;пуска АЦП

S3: .SECTION

.ORG 00D0h

START: CLR B6 ;сброс бита Р1.6

SETB B6 ;установка бита Р1.6

RETI ;возврат из подпрограм-

;мы обработки прерыва-

;ния

;Вычисление выходного отсчёта по сигналу внешнего прерыва-

;ния от входа INT1, рабочий цикл фильтра

S4: .SECTION

.ORG 0013h

LJMP XYOUT ;переход к программе

;рабочего цикла фильтра

S5: .SECTION

.ORG 0100h

XYOUT: MOV DPTR, #PA ;ввод отсчёта Xn из АЦП

MOVX A, @DPTR ;через порт РB РФ55

;программный модуль масштабирования:

;вычисление произведения Xn := KмXn

;входной отсчёт - в аккумуляторе, масштаби-

;рованный отсчёт записать в ячейку ОЗУ

RLC A ;анализ знака Xn

JC M1 ;переход к программе ум-

;ножения отрицательного

;отсчёта Xn на Kм

RRC A ;восстановление положи-

;тельного отсчёта Xn

;в аккумуляторе

MOV B, #KM ;вычисление произведе-

MUL AB ;ния KмXn

MOV X, B ;запоминание масштаби-

;рованного отсчёта Xn

;в памяти

SJMP M2 ;переход к продолжению

M1: RRC A ;восстановление отрица-

;тельного отсчёта Xn

;в аккумуляторе

CPL A ;получение положительно-

INC A ;го отсчёта Xn (смена зна-

;ка)

MOV B, #KM ;вычисление произведе-

MUL AB ;ния KмXn и пересылка

MOV A, B ;в аккумулятор

CPL A ;получение отрицательно-

INC A ;го произведения KмXn

;(смена знака)

MOV X, A ;запоминание масштаби-

;рованного отсчёта Xn

;в памяти

;программный модуль вычисления

;произведения PRn := KYn-1

;Yn-1 хранится в ячейке ОЗУ с адресом Y1

;PRn записать в ячейку ОЗУ с адресом PR

M2: MOV A, Y1 ;копирование Yn-1 в аккуму-

RLC A ;лятор и анализ знака

JC M3 ;переход к программе ум-

;ножения отрицательного

;отсчёта Yn-1 на K

RRC A ;восстановление положи-

;тельного отсчёта Yn-1

;в аккумуляторе

MOV B, #K ;вычисление произведе-

MUL AB ;ния KYn-1

MOV PR, B ;запоминание KYn-1

;в памяти

SJMP M4 ;переход к продолжению

M3: RRC A ;восстановление отрица-

;тельного отсчёта Yn-1

;в аккумуляторе

CPL A ;получение положительно-

INC A ;го отсчёта Yn-1 (смена зна-

;ка)

MOV B, #K ;вычисление произведе-

MUL AB ;ния KYn-1 и пересылка

MOV A, B ;в аккумулятор

CPL A ;получение отрицательно-

INC A ;го произведения KYn-1

;(смена знака)

MOV PR, A ;запоминание KYn-1 в па-

;мяти

;программный модуль вычисления выходного

;отсчёта Yn =Xn - Xn-1 - PRn, слагаемые

;хранятся в ячейках ОЗУ, результат записать

;в ячейку ОЗУ и вывести на ЦАП

M4: MOV A, X ;вычисление отсчёта Yn

SUBB A, X1

CLR c ;и сохранение в памяти

SUBB A, PR ;

MOV Y, A ;

ADD A, #80h ;получение смещённого

;кода Yn для ЦАП

MOV DPTR, #PA ;вывод Yn

MOVX @DPTR, A ;через порт

;РA РФ55

;программный модуль сдвига отсчётов

;в памяти, подготовка следующего рабочего

;цикла

MOV X1, X ;

MOV Y1, Y ;

RETI ;возврат из подпрограммы

;обслуживания прерыва-

;по входу INT1

.END

Отладка:

Tue May 8 2012 17:12 Page 1

2500 A.D. 8051 Macro Assembler - Version 4.02a

------------------------------------------------

Input Filename : osk.asm

Output Filename : osk.obj

1 ;Программа "Цифровой фильтр (верхних частот)"

2

3 ;Автор Оськин Александр Игоревич

4 ;Дата 26.02.12

5 ;Разностное уравнение Yn = Xn - Xn-1 - 0,495Yn-1

6

7

8 ;Определение символических имён операндов

9

10 0096 B6: .EQU 96h ;линия P1.6 для вывода импульса

11 ;запуска АЦП

12 0801 PB: .EQU 0801h ;порт PB РФ55

13 0800 PA: .EQU 0800h ;порт PA РФ55

14 0803 RGRF1: .EQU 0803h ;регистр направления передачи

15 ;порта РB РФ55

16 0802 RGRF2: .EQU 0802h ;регистр направления передачи

17 ;порта РA РФ55

18 0000 SRF1: .EQU 00h ;управляющее слово для настройки

19 ;порта PB РФ55

20 00FF SRF2: .EQU FFh ;управляющее слово для настройки

21 ;порта PA РФ55

22 0089 TMOD: .EQU 89h ;регистр управления режимами

23 ;таймеров-счётчиков

24 0002 STMOD: .EQU 02h ;управляющее слово для настройки

25 ;таймера-счётчика

26 008C TH0: .EQU 8Ch ;старший байт Т/С0

27 0027 STH0: .EQU 27h ;управляющее слово для задания

28 ;частоты переполнения T/C0

29 008C TR0: .EQU 8Ch ;управляющий бит пуска T/C0

30 00A8 IE: .EQU A8h ;регистр разрешения прерываний

31 0086 SIE: .EQU 86h ;слово разрешения прерываний

32 ;от T/C0 и входа INT1

33 00F0 B: .EQU F0h ;регистр В

34 007E K: .EQU 7Eh ;коэффициент разностного уравнения

35 0066 KM: .EQU 66h ;коэффициент масштабирования

36 0030 X: .EQU 30h ;ячейка хранения отсчёта Xn

37 0031 X1: .EQU 31h ;ячейка хранения отсчёта Xn-1

38 0040 Y: .EQU 40h ;ячейка хранения отсчёта Yn

39 0041 Y1: .EQU 41h ;ячейка хранения отсчёта Yn-1

40 0050 PR: .EQU 50h ;ячейка хранения произведения PRn

41

42 .FILLCHAR 00h ;записать в пропусках

43 ;между секциями нули

44

45 ;Инициализация по сигналу RST

46 0000 S0: .SECTION

47 0000 .ORG 0000h

Tue May 8 2012 17:12 Page 2

48 0000 02 00 A0 LJMP INIT ;переход к программе

49 ;инициализации

50 0000 S1: SECTION

51 00A0 .ORG 00A0h

52 00A0 75 89 02 INIT: MOV TMOD, #STMOD ;настройка режима Т/С0

53 00A3 75 8C 27 MOV TH0, #STH0 ;задание частоты дискре-

54 ;тизации

55 00A6 D2 8C SETB TR0 ;пуск Т/С0

56

57 00A8 74 00 MOV A, #SRF1 ;настройка порта PB РФ55

58 00AA 90 08 03 MOV DPTR, #RGRF1 ;на ввод

59 00AD F0 MOVX @DPTR, A

60 00AE 74 FF MOV A, #SRF2 ;настройка порта РA РФ55

61 00B0 90 08 02 MOV DPTR, #RGRF2 ;на вывод

62 00B3 F0 MOVX @DPTR, A

63

64

65 00B4 75 A8 86 MOV IE, #SIE ;разрешение прерываний

66 ;от Т/С0 и входа INT1

67

68 00B7 80 FE STOP: SJMP STOP ;останов программы

69 00B9

70 ;Формирование импульса пуска АЦП по внутреннему прерыва-

71 ;нию от Т/С0

72

73 0000 S2: .SECTION

74 000B .ORG 000Bh

75 000B 02 00 D0 LJMP START ;переход к программе

76 ;формирования импульса

77 ;пуска АЦП

78 0000 S3: .SECTION

79 00D0 .ORG 00D0h

80 00D0 C2 96 START: CLR B6 ;сброс бита Р1.6

81 00D2 D2 96 SETB B6 ;установка бита Р1.6

82

83 00D4 32 RETI ;возврат из подпрограм-

84 ;мы обработки прерыва-

85 ;ния

86

87 ;Вычисление выходного отсчёта по сигналу внешнего прерыва-

88 ;ния от входа INT1, рабочий цикл фильтра

89

90 0000 S4: .SECTION

91 0013 .ORG 0013h

92 0013 02 01 00 LJMP XYOUT ;переход к программе

93 ;рабочего цикла фильтра

94 0000 S5: .SECTION

95 0100 .ORG 0100h

96 0100 90 08 00 XYOUT: MOV DPTR, #PA ;ввод отсчёта Xn из АЦП

97 0103 E0 MOVX A, @DPTR ;через порт РB РФ55

98

99 ;программный модуль масштабирования:

100 ;вычисление произведения Xn := KмXn

101 ;входной отсчёт - в аккумуляторе, масштаби-

102 ;рованный отсчёт записать в ячейку ОЗУ

103

104 0104 33 RLC A ;анализ знака Xn

Tue May 8 2012 17:12 Page 3

105 0105 40 0A JC M1 ;переход к программе ум-

106 ;ножения отрицательного

107 ;отсчёта Xn на Kм

108

109 0107 13 RRC A ;восстановление положи-

110 ;тельного отсчёта Xn

111 ;в аккумуляторе

112

113 0108 75 F0 66 MOV B, #KM ;вычисление произведе-

114 010B A4 MUL AB ;ния KмXn

115

116 010C 85 F0 30 MOV X, B ;запоминание масштаби-

117 ;рованного отсчёта Xn

118 ;в памяти

119

120 010F 80 0D SJMP M2 ;переход к продолжению

121 0111 13 M1: RRC A ;восстановление отрица-

122 ;тельного отсчёта Xn

123 ;в аккумуляторе

124

125 0112 F4 CPL A ;получение положительно-

126 0113 04 INC A ;го отсчёта Xn (смена зна-

127 ;ка)

128 0114 75 F0 66 MOV B, #KM ;вычисление произведе-

129 0117 A4 MUL AB ;ния KмXn и пересылка

130 0118 E5 F0 MOV A, B ;в аккумулятор

131

132 011A F4 CPL A ;получение отрицательно-

133 011B 04 INC A ;го произведения KмXn

134 ;(смена знака)

135

136 011C F5 30 MOV X, A ;запоминание масштаби-

137 ;рованного отсчёта Xn

138 ;в памяти

139

140 ;программный модуль вычисления

141 ;произведения PRn := KYn-1

142 ;Yn-1 хранится в ячейке ОЗУ с адресом Y1

143 ;PRn записать в ячейку ОЗУ с адресом PR

144

145 011E E5 41 M2: MOV A, Y1 ;копирование Yn-1 в аккуму-

146 0120 33 RLC A ;лятор и анализ знака

147

148 0121 40 0A JC M3 ;переход к программе ум-

149 ;ножения отрицательного

150 ;отсчёта Yn-1 на K

151

152 0123 13 RRC A ;восстановление положи-

153 ;тельного отсчёта Yn-1

154 ;в аккумуляторе

155

156 0124 75 F0 7E MOV B, #K ;вычисление произведе-

157 0127 A4 MUL AB ;ния KYn-1

158 0128 85 F0 50 MOV PR, B ;запоминание KYn-1

159 ;в памяти

160 012B 80 0D SJMP M4 ;переход к продолжению

161

Tue May 8 2012 17:12 Page 4

162 012D 13 M3: RRC A ;восстановление отрица-

163 ;тельного отсчёта Yn-1

164 ;в аккумуляторе

165 012E F4 CPL A ;получение положительно-

166 012F 04 INC A ;го отсчёта Yn-1 (смена зна-

167 ;ка)

168 0130 75 F0 7E MOV B, #K ;вычисление произведе-

169 0133 A4 MUL AB ;ния KYn-1 и пересылка

170 0134 E5 F0 MOV A, B ;в аккумулятор

171

172 0136 F4 CPL A ;получение отрицательно-

173 0137 04 INC A ;го произведения KYn-1

174 ;(смена знака)

175 0138 F5 50 MOV PR, A ;запоминание KYn-1 в па-

176 ;мяти

177 ;программный модуль вычисления выходного

178 ;отсчёта Yn =Xn - Xn-1 - PRn, слагаемые

179 ;хранятся в ячейках ОЗУ, результат записать

180 ;в ячейку ОЗУ и вывести на ЦАП

181

182 013A E5 30 M4: MOV A, X ;вычисление отсчёта Yn

183 013C 95 31 SUBB A, X1

184 013E C3 CLR c ;и сохранение в памяти

185 013F 95 50 SUBB A, PR ;

186 0141

187 0141 F5 40 MOV Y, A ;

188

189 0143 24 80 ADD A, #80h ;получение смещённого

190 ;кода Yn для ЦАП

191

192 0145 90 08 00 MOV DPTR, #PA ;вывод Yn

193 0148 F0 MOVX @DPTR, A ;через порт

194 ;РA РФ55

195

196 ;программный модуль сдвига отсчётов

197 ;в памяти, подготовка следующего рабочего

198 ;цикла

199 0149 85 30 31 MOV X1, X ;

200 014C 85 40 41 MOV Y1, Y ;

201 014F 32 RETI ;возврат из подпрограммы

202 ;обслуживания прерыва-

203 ;по входу INT1

204 0150 .END

Lines Assembled : 204 Assembly Errors : 0

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]