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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2012, 21:18   #1
Serega852
 
Регистрация: 13.06.2012
Сообщений: 6
По умолчанию Необходимы комментарии к программе. Язык ассемблер. Микроконтроллер 1882ВЕ53У

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

org 0 
ct_opros db 0
ct_poz   db 0
flag     db 0
poz_pnt  db 0 
out_dim ds 7 ; запись в сегментный регистр
out_pnt db 0 ; Указатель к нему
ct_del db 0
save_dat db 0
index db 0
ct_keypress db 0
scan_dimold  ds 8
scan_dimprev ds 8
scan_dimnew  ds 8
jmp start
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; 
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; если а=out_dim то переход на метку out_byte
jmp wait_tic; переход на 

out_byte:
jb INT0,wait_tic ;если into=1 о перезод, Выходной регистр занят? 

push 0; запись в стек 

setb TxD; устанавливаем последовательный порт в 1
mov R0,out_pnt
mov a,@R0
dec out_pnt
movx @R0,a
pop 0; чтение из стека 

wait_tic:
jnb tic,cikl; переход если бит не установлен

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

clr tic; очистка переменной tic
mov index,#0; перемещение из ячейки 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





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
Serega852 вне форума Ответить с цитированием
Старый 13.06.2012, 21:19   #2
Serega852
 
Регистрация: 13.06.2012
Сообщений: 6
По умолчанию

Код:
;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 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ассемблер и микроконтроллер Atmel AVR masterwolf Помощь студентам 6 03.02.2022 18:13
программа,ассемблер,микроконтроллер PIC16F8X . wils737 Помощь студентам 1 04.05.2012 17:26
Комментарии к программе Антон1111 Помощь студентам 1 30.04.2012 01:08
комментарии к программе вася радугов Помощь студентам 3 28.09.2011 12:55
Необходимы комментарии!!! Танюшаа Помощь студентам 2 04.04.2009 06:32