Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2012, 16:31   #1
Serega852
 
Регистрация: 13.06.2012
Сообщений: 6
По умолчанию Необходима помошь с программой

мне надо полные комментарии к программе....либо блок схему для нее....очень срочно и очень важно



; Только одна кнопка !!!!!!!
; Имеем три массива на основе их анализа все ясно
; Анализом ловим передний фронт и до нового ни Гу-Гу.
;оприс сделан долгим - жгут стенда = 1.5 m ;
; tic = 20 mS



org 20h
ct_opros db 0
ct_poz db 0
flag db 0
poz_pnt db 0


tic equ flag.0


org 30H
out_dim ds 7 ; запись в сегментный регистр
out_pnt db 0 ; Указатель к нему


org 38h
ct_del db 0
save_dat db 0
index db 0
ct_keypress db 0




org 40h
scan_dimold ds 8
scan_dimprev ds 8
scan_dimnew ds 8




org 0
jmp start


org 0Bh ; таймер 0 - от таймера ФМ

setb tic

mov TH0, #high(10000h - 20000)
mov TL0, #low(10000h - 20000)

reti




org 100h

start:

; Таймер + ПРЕРЫВАНИЕ

mov TH0, #high(10000h - 20000)
mov TL0, #low(10000h - 20000); измерение в течении 20 мс


;обнулим диалог-регистр


clr TxD

mov R0,out_pnt
mov a,@R0; Загрузка значения элемента массива,
dec out_pnt
movx @R0,a



;setb TMOD.0
;clr TMOD.1
mov TMOD,#1


setb TR0
setb EA
setb ET0
;

mov out_pnt,#out_dim

cikl:
; Есть на выдачу ?

mov a,out_pnt
cjne a,#out_dim,out_byte
jmp wait_tic

out_byte:

jb INT0,wait_tic ; Выходной регистр занят?

push 0

setb TxD
mov R0,out_pnt
mov a,@R0
dec out_pnt
movx @R0,a

pop 0


wait_tic:

jnb tic,cikl

;jbc !!!!!



;---------- просканируем матрицу

clr tic


mov index,#0


mov ct_keypress,#0
mov P2, #(not (01h))
mov R0, #scan_dimnew
mov R1,#8


scan:

call del
mov a,P1
cpl a
; mov c,P1.6
; mov T1,c

mov @R0,a
inc R0

push acc
mov a,P2
rl a
mov P2,a
pop acc




jz scan1

;------ определим и запомним линию нажатой клавиши

mov a,R0
setb c ;компенсация inc R0
subb a,#scan_dimnew
mov index,a
inc ct_keypress ;

; ---------------

scan1:

djnz R1,scan

mov P2,#0ffh



mov a, ct_keypress ;
jz shiftm ; ни одна клавиша не нажата

;scan2:
cjne a,#01h,cikl ; нажато больше одной клавиши


;------------ просканировали

;scan3:


; анализ массивов. B index смещение в массиве и он же номер опроса
; и одновременно сформируем код кнопки

; Одна кнопка нажата ?


mov R7,#0
mov R1,#8



; сколько кнопок нажато в линейке ?
mov a, #scan_dimnew
add a,index
mov R0,a
mov a,@R0


sear:
rrc a
xch a,R7
addc a,#0
xch a,R7
djnz R1,sear


cjne R7,#01h,cikl ; нажато больше одной кнопки в линейке

; -------------


; анализ и сдвиг массивов, вывод. ???? B R7 разряд



; --------определим, это нажатие или удержание кнопки

;contf:

;contf1:


cpl INT1


mov a, #scan_dimold
add a,index
mov R0,a

mov a, #scan_dimprev
add a,index
mov R1,a

mov a,@R0

xrl a,@R1
jz shiftm ;это не нажатие кнопки



;mov a, #scan_dimprev
;add a,index
;mov R0,a

mov a, #scan_dimnew
add a,index
mov R0,a

mov a,@R0
xrl a,@R1

jnz shiftm ; это не нажатие кнопки



;mov a, #scan_dimold
;add a,index
;mov R1,a

;mov a,@R0

;xrl a,@R1
;jz shiftm ;это не нажатие кнопки



; есть передний фронт и удержание кнопки
;сформируем байт на выдачу


;переведем позицию в код

cpl T0


mov a,@R0
mov poz_pnt,#0
setb c


poz_cod:
rlc a
jc contf
inc poz_pnt
jmp poz_cod

contf:

;mov a,#0

mov a,index

;cpl a
;anl a,#7h

rl a
rl a
rl a
orl a,poz_pnt ;R7

mp20:
; cpl p2.0
; jmp mp20


;--- введем клавишу SHIFT

mov c,Rxd
mov acc.6,c

; -------


jb INT0,s_byte
; Выведем байт

mp21:
cpl T1
; jmp mp21




wr_di:


setb TxD
nop
nop
nop
nop
movx @R0,a

; nop
; nop

; clr TxD
; movx @R0,a

; jmp wr_di
Serega852 вне форума Ответить с цитированием
Старый 13.06.2012, 16:32   #2
Serega852
 
Регистрация: 13.06.2012
Сообщений: 6
По умолчанию

jmp shiftm ;


;jmp cikl

s_byte:

;В буфере есть место?

push acc

mov a,#(out_pnt-1)
clr c
subb a,out_pnt

pop acc

jnc s_byte1

;jmp shiftm ;



jmp cikl ;Переполнение


s_byte1:

;Поставим в очередь

push 0 ; 0 = R0
mov R0,out_pnt ;
mov @R0,a
inc out_pnt
pop 0

;проверка переполнения ?

; А теперь сдвинем массивы

shiftm:

; Весь массив сдвинуть !!!!!!!!

mov R7,#8


;mov a, #scan_dimprev
;add a,index
mov R0, #scan_dimprev



;mov a, #scan_dimold
;mov a, #scan_dimold
;add a,index
mov R1,#scan_dimold


shift1:

;mov a, #scan_dimprev
;add a,index
;mov R0,a

;mov a, #scan_dimold
;add a,index
;mov R1,a

mov a,@R0
mov @R1,a

inc R1
inc R0


djnz R7,shift1




mov R7,#8


;mov a, #scan_dimnew
;add a,index
mov R0, #scan_dimnew


;mov a, #scan_dimprev
;add a,index
mov R1,#scan_dimprev


shift2:

;mov a, #scan_dimnew
;add a,index
;mov R0,a

;mov a, #scan_dimprev
;add a,index
;mov R1,a

mov a,@R0
mov @R1,a
inc R1
inc R0


djnz R7,shift2




jmp cikl


; Небольшая задержка

del:
mov ct_del,#0FFh
del1:
djnz ct_del,del1
ret


end start








s0:
mov P2,#01h
call del
mov a,P1
jz s1

inc R7
mov opros,#01h

s1:
mov P2,#02h
call del
mov a,P1
jz s2

inc R7
mov opros,#02h


s2:
mov P2,#04h
call del
mov a,P1
jz s3

inc R7
mov opros,#04h




s3:
mov P2,#08h
call del
mov a,P1
jz s4

inc R7
mov opros,#08h




s4:
mov P2,#10h
call del
mov a,P1
jz s5
inc R7
mov opros,#10h





s5:
mov P2,#20h
call del
mov a,P1
jz s6
inc R7
mov opros,#20h



s6:
mov P2,#40h
call del
mov a,P1
jz s7
inc R7
mov opros,#40h


s7:
mov P2,#80
call del
mov a,P1
jz s8

inc R7
mov opros,#80h


s8:
cjne R7,#01h,cikl














mov a,P2
rr a
mov P2,a
inc R0;dat_pnt
cjne a,#01,set_del
mov R0, #scan_dim



set_del:
mov ct_del,#0FFh
; Небольшая задержка
del:
djnz ct_del,del

mov a,P1
jz cikl

mov save_dat,a

mov a,@R0 ;dat_pnt
jnz cont

mov a,save_dat


mov @R0,a ;@dat_pnt,a
jmp cikl

cont:


; сравнить save_dat c scan_dim

mov a,save_dat
xrl a,@R0
jnz doble_clic

; сформируем байт
call format
jmp cikl



doble_clic:
; предыдущ и текущее зпачения не совпали
; два варианта - или разные кнопки нажаты или несколько одновременно



mov a,save_dat
anl a,@R0
jz end_doble_clic ; пошли на разные кнопки


;а это - есть одинаковые

call format

;jmp cikl


end_doble_clic:
jmp cikl



format:

mov a,save_dat
anl a,@R0

mov ct_poz,#-1

poz:
setb c
inc ct_poz
rrc a
jnc poz

mov a,ct_poz

cjne a,#8,cont1 ;form_byte
ret

;push poz

cont1:
mov ct_opros,#-1
mov a,p2

opros:
setb c
inc ct_opros
rrc a
jnc opros

mov a,ct_opros

cjne a,#8,form_byte
;pop poz

ret

form_byte:




mov a,ct_opros
rl a
rl a
rl a
;pop poz

orl a,ct_poz
push acc


mov a,R0
add a, delta
mov R1,a
pop acc

mov @R1,a
; установить бит !!!!!!!!!!!!


jmp cikl






end start
























mov a,P1
cjne a,#0,req
jmp cikl


req:
; сколько клвиш нажто и как долго
;опрос клавиши шифт
; код одной клавиш

jb clic,job
mov rem,a
setb clic
jmp cikl

job:

push acc

xrl a,rem
jz outd
pop acc
mov rem,a



outd:
pop acc
clr clic
Serega852 вне форума Ответить с цитированием
Старый 13.06.2012, 19:34   #3
Fatal Error
Пользователь
 
Аватар для Fatal Error
 
Регистрация: 20.05.2012
Сообщений: 58
По умолчанию

укажи архитектуру и может тебе помогут
Fatal Error вне форума Ответить с цитированием
Старый 13.06.2012, 20:05   #4
Serega852
 
Регистрация: 13.06.2012
Сообщений: 6
По умолчанию

Насчет архитектуры не уверен....но как написано в описании 8051....вообщем у меня микросхема 1821ВЕ53У

Последний раз редактировалось Serega852; 13.06.2012 в 20:10.
Serega852 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Необходима помощъ Watson57 Помощь студентам 1 17.04.2012 17:26
Необходима Литература по С# MooNDeaR C# (си шарп) 1 09.12.2011 01:22
Необходима консультация Бегиннер Общие вопросы по Java, Java SE, Kotlin 3 17.02.2009 08:25
Необходима программа Werstak Фриланс 2 23.01.2008 14:46
Необходима помощь nimf Свободное общение 0 29.08.2007 10:43