Одноплатник на 155-й серии — ЧПУ

4506f7f5a5488efa01d737e43750e259.png
//начинаем опрашивать UART
start:
mov buf,0
mov r2,buf
mov buf,8
mov adr,buf
mov buf,1
mov ram,buf

mov buf,10
mov r1,buf

mov a,p2
mov roma1, rx
mov roma2, rx
jbz0		//если - то переход на прием
// если +
mov roma1, start
mov roma2, start
jmp

rx:
mov a,p2
mov roma1, rx
mov roma2, rx
jbz0		//если - то ждем
// если +

start2:
mov a,p2
mov roma1, rx2
mov roma2, rx2
jbz0		//если - то переход на закончить
// если +

mov a,r1
add r1
mov roma1, up
mov roma2, up
jc	//если переполнение

mov roma1, start2
mov roma2, start2
jmp

up:
mov a,r2
add r2
mov r1,buf
mov roma1, start2
mov roma2, start2
jmp

rx2:
mov a,p2
mov roma1, rx2
mov roma2, rx2
jbz0		//если - то ждем

// если +
mov buf,1
mov ram,buf
mov a,r2

mov ROMa1, Xclk
mov ROMa2, Xclk
je	//если равны то переход

mov buf,3
mov ram,buf
mov a,r2

mov ROMa1, Yclk
mov ROMa2, Yclk
je	//если равны то переход

mov buf,2
mov ram,buf
mov a,r2

mov ROMa1, DIRup
mov ROMa2, DIRup
je	//если равны то переход

mov buf,4
mov ram,buf
mov a,r2

mov ROMa1, DIRdown
mov ROMa2, DIRdown
je	//если равны то переход

mov buf,5
mov ram,buf
mov a,r2

mov ROMa1, Zdown
mov ROMa2, Zdown
je	//если равны то переход

mov buf,6
mov ram,buf
mov a,r2

mov ROMa1, Zup
mov ROMa2, Zup
je	//если равны то переход

//иначе ждем следующий байт
mov roma1, loop	//указываем координаты для переходов на метку start
mov roma2, loop	//указываем координаты для переходов на метку start
jmp		//повторим

Zup:
mov buf,8		//1 в буфер
mov p1, buf		//отправить в порт 1

mov buf,0
mov r1,buf

delay270:

mov buf,8
mov adr,buf
mov buf,1
mov ram,buf
mov buf,1 
mov a,buf

delay27:
add a
mov roma1, vse27
mov roma2, vse27
jc	//если регистр а переполнился то закончить задержку
mov roma1, delay27
mov roma2, delay27
jmp 

vse27:
mov a,r1
add r1
mov roma1, vse270
mov roma2, vse270
jc	//если регистр а переполнился то закончить задержку
mov roma1, delay270
mov roma2, delay270
jmp 

vse270:
mov buf,0		//0 в буфер
mov p1, buf		//отправить в порт 0

mov roma1, loop	//указываем координаты для переходов на метку start
mov roma2, loop	//указываем координаты для переходов на метку start
jmp		//повторим

Zdown:
mov buf,8		//1 в буфер
mov p1, buf		//отправить в порт 1

mov buf,1
mov r1,buf

delay2701:
mov buf,8
mov adr,buf
mov buf,1
mov ram,buf
mov buf,1 
mov a,buf

delay271:
add a
mov roma1, vse271
mov roma2, vse271
jc	//если регистр а переполнился то закончить задержку
mov roma1, delay271
mov roma2, delay271
jmp 

vse271:
mov a,r1
add r1
mov roma1, vse2701
mov roma2, vse2701
jc	//если регистр а переполнился то закончить задержку
mov roma1, delay2701
mov roma2, delay2701
jmp 

vse2701:
mov buf,0		//0 в буфер
mov p1, buf		//отправить в порт 0
mov roma1, loop	//указываем координаты для переходов на метку start
mov roma2, loop	//указываем координаты для переходов на метку start
jmp		//повторим

DIRup:
mov buf,2 //выбор направления вращения DIR
mov p1,buf
mov buf,10 //сохраняем выбор направления вращения DIR
mov adr,buf
mov buf,1
mov ram,buf

mov roma1, loop	//указываем координаты для переходов на метку start
mov roma2, loop	//указываем координаты для переходов на метку start
jmp		//повторим

DIRdown:
mov buf,10 //сохраняем выбор направления вращения DIR
mov adr,buf
mov buf,0 //выбор направления вращения DIR
mov p1,buf
mov ram,buf

mov roma1, loop	//указываем координаты для переходов на метку start
mov roma2, loop	//указываем координаты для переходов на метку start
jmp		//повторим

Yclk:
mov buf,10
mov adr,buf
mov a,ram
mov roma1, lab2
mov roma2, lab2
jbz0		//если 0 то переход

mov buf,6
mov p1,buf

mov roma1, delay
mov roma2, delay
jmp

lab2:
mov a,p2
mov roma1, stepY	//указываем координаты для переходов на метку 
mov roma2, stepY	//указываем координаты для переходов на метку 
jbz2		//если - то переход (концевик не сработал, Y>0)
// теперь Y=0
mov roma1, delay
mov roma2, delay
jmp
stepY:

mov buf,4
mov p1,buf
mov roma1, delay
mov roma2, delay
jmp


Xclk:
mov buf,10
mov adr,buf
mov a,ram
mov roma1, lab1
mov roma2, lab1
jbz0		//если 0 то переход
mov buf,3
mov p1,buf

mov roma1, delay
mov roma2, delay
jmp

lab1:
mov a,p2
mov roma1, stepx	//указываем координаты для переходов на метку 
mov roma2, stepx	//указываем координаты для переходов на метку 
jbz1		//если - то переход (концевик не сработал, Х>0)
// если X=0
mov roma1, delay
mov roma2, delay
jmp
stepx:
mov buf,1
mov p1,buf

//вместо delay	------------
delay:
			//-
mov buf,8			//-
mov adr,buf			//-
mov buf,0			//-
mov r1,buf			//-
delay_lab:
			//-
mov a,r1			//-
add r1			//-
			//-
mov roma1, delay_out			//-
mov roma2, delay_out			//-
jc			//если переполнение
mov roma1, delay_lab			//-
mov roma2, delay_lab			//-
jmp			//-		
//------------------------
delay_out:
mov buf,10
mov adr,buf
mov a,ram
mov roma1, label3
mov roma2, label3
jbz0		//если 0 то переход

mov buf,2
mov p1,buf
mov ROMa1, loop
mov ROMa2, loop
jmp

label3:
mov buf,0
mov p1,buf

loop:
mov roma1, start	//указываем координаты для переходов на метку start
mov roma2, start	//указываем координаты для переходов на метку start
jmp		//повторим

© Habrahabr.ru