Автор работы: Пользователь скрыл имя, 24 Сентября 2013 в 09:56, контрольная работа
Задание: Разработать программы для ОВЭМ МК51 на языке ASM51 и C51 выполняющие обработку массива чисел, хранящихся во внешнем ОЗУ.
Разрядность данных – 8 бит.
Обозначения: avg – среднее,min – минимальное.
Алгоритм 3*avg – 2*min , размер массива 400.
Код программы на ASM51:
1. Код программы на ASM51..........................................................................................3
2. Код программы на C51................................................................................................6
Содержание
1. Код
программы на ASM51.........................
2. Код
программы на C51...........................
Контрольная работа
Контрольная работа по МПС
Вариант №18
Задание: Разработать программы для ОВЭМ МК51 на языке ASM51 и C51 выполняющие обработку массива чисел, хранящихся во внешнем ОЗУ.
Разрядность данных – 8 бит.
Обозначения: avg – среднее,min – минимальное.
Алгоритм 3*avg – 2*min , размер массива 400.
Код программы на ASM51:
ORG 0000
JMP begin
ORG 0030h
MAX equ R2
MIN equ R3
AVG1 equ R4
AVG2 equ R5
SUM1 equ R6
SUM2 equ R7
BUF equ R1
begin:
;Initialization
mov A,#0
mov R0,100
mov R1,4
mov DPTR,#0
mov SUM1,#0
mov SUM2,#0
mov AVG1,#0
mov AVG2,#0
;Zapolnenie
M2:
mov R0,100
M1:
movx @DPTR,A
inc A
inc DPTR
djnz R0,M1
djnz R1,M2
; Set MIN , Set max
mov DPTR,#0
movx A,@DPTR
mov MIN,A
movx A,@DPTR
mov MAX,A
;;;;;;;;;;;;;;;;;;;;;;;;
mov R1,4
M4:
mov R0,100
M3:
movx A,@DPTR
; MIN ,8 bit
mov B,MIN
cjne A,B,not_equ
jmp end_1
not_equ:
jc less
jmp end_1
less:
mov MIN,A
end_1:
; MAX ,8 bit
mov B,MAX
cjne A,B,not_equ1
jmp end_11
not_equ1:
jnc less1
jmp end_11
less1:
mov MAX,A
end_11:
;Summa ,16 bit
mov B,A
mov A,SUM1
add A,B
mov SUM1,A
jnc M5
inc SUM2
M5:
inc DPTR
djnz R0,M3
djnz R1,M4
; AVG = SUM / 400 (100 *4)
mov R0,4
M6:
mov B,#100
mov A,SUM2
div AB
mov BUF,B
mov SUM2,A
mov B,#100
mov A,SUM1
div AB
add A,BUF
mov SUM1,A
djnz R0,M6
mov A,SUM1
mov AVG1,A
mov A,SUM2
mov AVG2,A
; AVG *3
mov B,#3
mov A,AVG2
mul AB
mov AVG2,A
mov BUF,B
mov B,#3
mov A,AVG1
mul AB
add A,BUF
mov AVG1,A
; MIN * 2
mov B,MIN
mov A,MIN
add A,B
mov BUF,A
; AVG*3 - MIN *2
mov A,AVG2
subb A,#0
mov A,AVG1
subb A,BUF
jmp begin
end
Рисунок 1. Окно программыKeiluVision4, ASM51.
Код программы на C51:
#include <REGX51.H>
xdata char mass[400];
int main(){
int i = 0;
char value = -128, max = 0 , min = 0 ;
int avg = 0 ,result ;
for (i = 0 ; i <400; i++)
mass[i] = value++;
min = mass[0];
max = mass[0];
for (i = 0 ; i <400; i++){
avg += mass[i];
if ( min > mass[i] )
min = mass[i];
if ( max < mass[i] )
max = mass[i];
}
avg /= 400;
result = 3*avg - 2 * min;
return 0 ;
}
Рисунок 2. Окно программыKeiluVision4, C51.