Tải bản đầy đủ (.doc) (65 trang)

chương 8 lưu đồ giải thuật và chương trình

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (642.73 KB, 65 trang )

CHƯƠNG 8 :
LƯU ĐỒ GIẢI THUẬT VÀ CHƯƠNG
TRÌNH

SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 149


Luận văn tốt nghiệp GVHD : Thầy Nguyễn Thiện Thành

4

SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 150
Nhận tín hiệu đk
tốc độ từ máy tính


i–
Luận văn tốt nghiệp GVHDAbs(Qttrá
: Thầy Nguyễ
n
Qtphải) < 5
5

N

Thiện Thành

Y
Nhận tín hiệu
đkChạ
từ ymá


y ntính
thẳ
g

Qttrái > Qtphải
N
Y

N
Rẽ trái

Thoát chế độ
tự động

Y

3

Rẽ phải

3

Kết thúc

8.2. Chương trình viết bằng assembly cho vi xử lý 89C51 :
;ĐOẠN KHAI BÁO CÁC BIẾN
ORG 0000H
DECLARE:
RRI EQU 20H
RLE EQU 21H


;CHỨA GIÁ TRỊ QUANG TRỞ BÊN PHẢI
; CHỨA GIÁ TRỊ QUANG TRỞ BÊN TRÁI

TAM EQU 22H

;BIẾN TẠM DÙNG ĐỂ ĐẢO BIT

CBKC EQU 23H CÁCH
INPUT

EQU 24H

CONTROL EQU 25H
TỰ ĐỘNG
VTOC EQU 26H

;CHỨA GIÁ TRỊ CẢM BIẾN KHOẢNG
;GIÁ TRỊ NHẬN VỀ TỪ MÁY TÍNH
;BIẾN XÁC ĐỊNH ĐK BẰNG TAY HAY
;BIẾN DÙNG ĐỂ THAY ĐỔI TỐC ĐỘ

MANUAL EQU 27H
;BIẾN DÙNG ĐỂ ĐK BẰNG TAY
BIEN_TRUYEN EQU 28H;BIẾN XÁC ĐNH THỨ TỰ TRUYỀN
MOV MANUAL,#0
MOV SCON,#01010010B
MOV TMOD,#21H

SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 151



Luận văn tốt nghiệp GVHD : Thầy Nguyễn Thiện Thành
MOV TH1,#-3
SETB TR1
;PHẦN CHƯƠNG TRÌNH CHÍNH
MAIN:
MOV

P2,#40H

MOV

P1,#00H

JNB

RI,$

LCALL

INCHAR

;PHẦN CHƯƠNG TRÌNH XÉT CHẾ ĐỘ ĐIỀU KHIỂN
XET_AUTO:
CJNE

A,#6,XET_MANUAL

MOV


INPUT,#1

MOV

BIEN_TRUYEN,#0

SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 152


GVHD : Thầy Nguyễn Thiện Thành

Luận văn tốt nghiệp
SJMP

AUTO

XET_MANUAL:
CJNE

A,#7,XET_STOP

MOV

INPUT,#2

LJMP

L_MANUAL


XET_STOP:
CJNE

A,#8,MAIN

SJMP

MAIN

;ĐOẠN CHƯƠNG TRÌNH ĐIỀU KHIỂN TỰ ĐỘNG
AUTO:
JNB

P3.2,INTERRUPT

JNB

P3.3,INTERRUPT_LEFT

JNB

P3.4,INTERRUPT_RIGHT

LCALL

CB_QUANG

LCALL

BINARY_BCD


OUTPUT:
JNB

TI,SKIP1

MOV A,BIEN_TRUYEN CJNE
A,#0,TRUYEN_QTRO
TRUYEN_CBKC:
MOV

A,CBKC

LCALL

OUTCHAR

INC

BIEN_TRUYEN

SJMP

SKIP1

TRUYEN_QTRO:
LCALL

QTRO_LEFT


JNB

TI,$

LCALL
LCALL

OUTCHAR
QTRO_RIGHT

SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 153


MOV

BIEN_TRUYEN,#0

Luận văn tốt nghiệp

GVHD : Thầy Nguyễn Thiện Thành

JNB

TI,$

LCALL

OUTCHAR

SKIP1:

CLR
SUBB

C
A,#10

JC

MAIN1

MAIN1:
MOV

A,CBKC

SUBB

A,#128

JC
THOÁT

MAIN1

MOV

;NẾU KHOẢNG CÁCH >128 THÌ

R1,#20


LJMP
STOP
;ĐOẠN CHƯƠNG TRÌNH XỬ LÝ VA CHẠM
INTERRUPT:
MOV

R3,#20

LOOP5:
LCALL

CB_QUANG

LCALL

BINARY_BCD

LCALL

DRIVE_NGHICH

DJNZ

R3,LOOP5

MOV

R3,#40

LOOP6:

LCALL

CB_QUANG

LCALL

BINARY_BCD

LCALL

DRIVE_RIGHT

DJNZ

R3,LOOP6

SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 154


MOV
LOOP7:

R3,#40

Luận văn tốt nghiệp

GVHD : Thầy Nguyễn Thiện Thành

LCALL


CB_QUANG

LCALL

BINARY_BCD

LCALL
DJNZ

DRIVE_THUA
N
R3,LOOP7

SJMP

AUTO

INTERRUPT_LEFT:
MOV

R3,#20

LOOP8:
LCALL

CB_QUANG

LCALL

BINARY_BCD


LCALL

DRIVE_RIGHT

DJNZ

R3,LOOP8

MOV

R3,#30

LOOP9:
LCALL

CB_QUANG

LCALL

BINARY_BCD

LCALL

DRIVE_THUA

DJNZ

N
R3,LOOP9


LJMP

AUTO

INTERRUPT_RIGHT:
MOV

R3,#20

LOOP10:
LCALL

CB_QUANG

LCALL

BINARY_BCD

LCALL

DRIVE_LEFT

SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 155


DJNZ

R3,LOOP10


MOV
LOOP11:

R3,#30

Luận văn tốt nghiệp
LCALL

CB_QUANG

LCALL

BINARY_BCD

LCALL

DRIVE_THUAN

DJNZ

R3,LOOP11

LJMP

AUTO

GVHD : Thầy Nguyễn Thiện Thành

MAIN1:
JNB


RI,SKIP2

LCALL

INCHAR

MOV

INPUT,A

CJNE

A,#6,XET7

MOV

BIEN_TRUYEN,#0

LJMP

AUTO

CJNE

A,#7,XET8

LJMP

L_MANUAL


CJNE

A,#8,SKIP2

LJMP

MAIN

XET6:

XET7:

XET8:

SKIP2:
CLR

C

MOV

A,RLE

SUBB

A,RRI

JC


MAIN2

SUBB

A,#5

SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 156


JNC

LEFT

THUAN:
LCALL

DRIVE_THUAN

LJMP

AUTO

MAIN2:

Luận văn tốt nghiệp
CLR

C

MOV


A,RRI

SUBB

A,RLE

SUBB

A,#5

JC

THUAN

GVHD : Thầy Nguyễn Thiện Thành

RIGHT:
LCALL

DRIVE_RIGHT

LJMP

AUTO

LCALL

DRIVE_LEFT


LJMP

AUTO

LEFT:

;ĐOẠN CHƯƠNG TRÌNH XỬ LÝ DỪNG
STOP:
DRIVE_THUA
N
LCALL
DJNZ R1,STOP
MOV P2,#40H
MOV P1,#00H
MOV INPUT,#0
MOV A,CBKC
JNB

TI,$
OUTCHAR

LCALL
STOP1:
VAN_TOC

SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 157


LCALL
DISPLAY

LCALL
JNB

RI,SKIP3
INCHAR

LCALL
CJNE A,#8,SKIP3
LJMP MAIN
SKIP3:
SJMP STOP1

Luận văn tốt nghiệp

GVHD
: Thầy
Nguyễ
n Thiện
Thành

;ĐOẠN CHƯƠNG TRÌNH ĐIỀU KHIỂN BẰNG NÚT NHẤN
L_MANUAL:
MOV P2,#40H
MOV P1,#00H
JNB

RI,SKIP4
INCHAR

LCALL

XET_GIAM:
CJNE A,#23,XET_TANG
INC

INPUT

SJMP SKIP4
XET_TANG:
CJNE A,#36,CONTINUE
DJNZ INPUT,SKIP4
MOV INPUT,#1

SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 158


SJMP SKIP4
CONTINUE:
MOV MANUAL,A
XET_6:
CJNE A,#6,XET_7
LJMP AUTO
XET_7:
CJNE A,#7,XET_8
LJMP L_MANUAL
XET_8:
CJNE A,#8,SKIP4
LJMP MAIN
SKIP4:
MOV A,MANUAL
CJNE A,#0,M_FORWARD

LJMP L_MANUAL

Luận văn tốt

GVHD
: Thầy

nghiệp

Nguyễ
n Thiện
Thành

M_FORWARD:
CJNE

A,#1,M_LEFT

LCALL

DRIVE_THUAN

LJMP

L_MANUAL

M_LEFT:
CJNE

A,#2,M_BACK


LCALL

DRIVE_LEFT

LJMP

L_MANUAL

M_BACK:
CJNE

A,#3,M_RIGHT

SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 159


LCALL

DRIVE_NGHICH

LJMP

L_MANUAL

M_RIGHT:
CJNE

A,#4,L_MANUAL


LCALL

DRIVE_RIGHT

LJMP
END_MAIN:

L_MANUAL

;KẾT THÚC CHƯƠNG TRÌNH CHÍNH
;CHƯƠNG TRÌNH CON ĐIỀU KHIỂN CHẠY
TỚI DRIVE_THUAN:
MOV

R0,#0

LOOP1:
MOV

A,R0

INC

R0

MOV

DPTR,#TABLE

MOVC


A,@A+DPTR

MOV

P2,#40H

MOV

P1,A

MOV
VTOC,INPUT
;ĐOẠN CHƯƠNG TRÌNH THAY ĐỔI TỐC ĐỘ

Luận văn tốt nghiệp

GVHD : Thầy Nguyễn Thiện Thành

CHANGE1:
LCALL

DISPLAY

LCALL

VAN_TOC

DJNZ


VTOC,CHANGE1

CJNE
RET

R0,#8,LOOP1

;CHƯƠNG TRÌNH CON CHẠY LÙI
DRIVE_NGHICH:
MOV

R4,#8

LOOP2:
DEC

R4

SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 160


MOV

A,R4

MOV

DPTR,#TABLE

MOVC


A,@A+DPTR

MOV

P2,#40H

MOV

P1,A

LCALL

DISPLAY

LCALL

VAN_TOC

CJNE
RET

R4,#0,LOOP2

;CHƯƠNG TRÌNH CON RẼ PHẢI
DRIVE_RIGHT:
MOV R0,#0
LOOP3:
MOV A,R0
INC


R0

MOV DPTR,#RTABLE MOVC
A,@A+DPTR
MOV P2,#40H
MOV P1,A

Luận văn tốt nghiệp

GVHD : Thầy Nguyễn Thiện Thành

MOV VTOC,INPUT
;ĐOẠN CHƯƠNG TRÌNH THAY ĐỔI TỐC ĐỘ
CHANGE2:
LCALL
LCALL

DISPLAY
VAN_TOC

DJNZ

VTOC,CHANGE2

CJNE
RET

R0,#8,LOOP3


;CHƯƠNG TRÌNH CON RẼ TRÁI
DRIVE_LEFT:

SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 161


MOV

R0,#0

LOOP4:
MOV

A,R0

INC

R0

MOV

DPTR,#LTABLE

MOVC

A,@A+DPTR

MOV

P2,#40H


MOV

P1,A

MOV
VTOC,INPUT
;ĐOẠN CHƯƠNG TRÌNH THAY ĐỔI TỐC ĐỘ
CHANGE3:
LCALL

DISPLAY

LCALL

VAN_TOC

DJNZ VTOC,CHANGE3
CJNE R0,#8,LOOP4
RET
;CHƯƠNG TRÌNH CON ĐỌC QUANG TRỞ BÊN PHẢI
QTRO_RIGHT:
MOV

DPTR,#2001H

MOVX

@DPTR,A


Luận văn tốt nghiệp

GVHD : Thầy Nguyễn Thiện Thành

LCALL

DELAY120us

MOVX

A,@DPTR

MOV

TAM,A

LCALL

DAO_BIT

MOV

RRI,A

RET
;CHƯƠNG TRÌNH CON ĐỌC QUANG TRỞ BÊN TRÁI
QTRO_LEFT:
MOV

DPTR,#2002H


SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 162


MOVX

@DPTR,A

LCALL

DELAY120us

MOVX

A,@DPTR

MOV

TAM,A

LCALL

DAO_BIT

MOV
RET

RLE,A

;CHƯƠNG TRÌNH CON ĐỌC CẢM BIẾN KHOẢNG CÁCH

CB_QUANG:
MOV

DPTR,#2000H

MOVX

@DPTR,A

LCALL

DELAY120us

MOVX

A,@DPTR

MOV

TAM,A

LCALL

DAO_BIT

MOV

CBKC,A

RET

;CHƯƠNG TRÌNH CON XUẤT 1 BYTE LÊN MÁY TÍNH
OUTCHAR:
CLR TI
MOV

SBUF,A

Luận văn tốt nghiệp

GVHD : Thầy Nguyễn Thiện Thành

RET
;CHƯƠNG TRÌNH CON NHẬN 1 BYTE VỀ TỪ MÁY TÍNH
INCHAR:
CLR
MOV

RI
A,SBUF

CLR

C

SUBB
RET

A,#48

;CHƯƠNG TRÌNH CON ĐẢO THỨ TỰ BIT

DAO_BIT:

SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 163


MOV

R1,#8

SHIFT:
MOV

A,TAM

RLC

A

MOV

TAM,A

MOV

A,R2

RRC

A


MOV

R2,A

DJNZ
RET

R1,SHIFT

;CHƯƠNG TRÌNH CON DELAY 120us
DELAY120us:
MOV

7FH,#60

DJNZ

7FH,$

RET
;CHƯƠNG TRÌNH CON HIỂN THỊ GIÁ TRỊ CẢM BIẾN KHOẢNG
CÁCH DISPLAY:
PUSH

ACC

MOV

A,R6


ANL A,#0FH

Luận văn tốt nghiệp
MOV

DPTR,#TAB

MOVC

A,@A+DPTR

MOV

P0,A

MOV

P2,#60H

GVHD : Thầy Nguyễn Thiện Thành

NOP
NOP
MOV

P2,#80H

MOV

P1,#08H


LCALL

DELAY

SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 164


MOV

A,R6

SWAP

A

ANL

A,#0FH

MOV

DPTR,#TAB

MOVC

A,@A+DPTR

MOV


P0,A

MOV

P2,#60H

NOP
NOP
MOV

P2,#80H

MOV

P1,#04H

LCALL

DELAY

MOV

A,R5

ANL

A,#0FH

MOV


DPTR,#TAB

MOVC

A,@A+DPTR

MOV

P0,A

MOV

P2,#60H

NOP
NOP
MOV

P2,#80H

Luận văn tốt nghiệp

GVHD : Thầy Nguyễn Thiện Thành

MOV

P1,#02H

LCALL


DELAY

POP

ACC

RET
;CHƯƠNG TRÌNH CON HIỂN THỊ TỐC ĐỘ
VAN_TOC:
PUSH

ACC

MOV

A,INPUT

SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 165


MOV

DPTR,#TAB

MOVC

A,@A+DPTR

MOV


P0,A

MOV

P2,#60H

NOP
NOP
MOV

P2,#80H

MOV

P1,#01H

LCALL

DELAY

POP
RET

ACC

;CHƯƠNG TRÌNH CON BIẾN ĐỔI SỐ BINARY THÀNH SỐ BCD
BINARY_BCD:
PUSH

ACC


MOV

B,#10

MOV

A,CBKC

DIV

AB

MOV

R6,B

;R6 CHỨA SỐ

HÀNG ĐƠN VỊ
MOV

B,#10

DIV

AB

MOV


R5,A
;R5 CHỨA SỐ
HÀNG CHỤC

MOV

A,B

Luận văn tốt
nghiệp
SWAP

GVHD : Thầy Nguyễn
Thiện Thành
A

ORL A,R6
MOV R6,A
POP

;R6 CHỨA SỐ HÀNG CHỤC_ĐƠN VỊ
ACC

RET

SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 166


;CHƯƠNG TRÌNH CON DELAY 400ms
DELAY:

MOV

TH0,#HIGH(-400)

MOV

TL0,#LOW(-400)

SETB

TR0

JNB

TF0,$

CLR

TF0

CLR
RET

TR0

;BẢNG THAM CHIẾU HIỂN THỊ LED
TAB: DB

0C0H


DB

0F9H

DB

0A4H

DB

0B0H

DB

99H

DB

92H

DB

82H

DB

0F8H

DB


80H

DB

90H

;BẢNG THAM CHIẾU CHO ROBOT CHẠY TỚI_LÙI
TABLE:
DB

00010001B

DB

00110011B

DB

00100010B

Luận văn tốt nghiệp
DB

01100110B

DB

01000100B

DB


11001100B

DB

10001000B

DB

10011001B

GVHD : Thầy Nguyễn Thiện Thành

SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 167


;BẢNG THAM CHIẾU CHO ROBOT RẼ TRÁI
LTABLE:
DB

00000001B

DB

00000011B

DB

00000010B


DB

00000110B

DB

00000100B

DB

00001100B

DB

00001000B

DB
00001001B
;BẢNG THAM CHIẾU CHO ROBOT RẼ PHẢI
RTABLE:
DB
DB

00010000B
00110000B

DB

00100000B


DB

01100000B

DB

01000000B

DB

11000000B

DB

10000000B

DB

10010000B

END

Luận văn tốt nghiệp

GVHD : Thầy Nguyễn Thiện Thành

8.3. Chương trình viết bằng C để huấn luyện cho mạng Neuron :
#include<stdlib.h> #include<conio.h>
#include<graph.h>
#include<float.h>

#include<math.h> #include<stdio.h>

SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 168


#define n0 4
#define n1 6

/*input layer */
/*hidden layer */

#define n2 1

/*output layer */

struct videoconfig vc; float uk[11],uk_1,yk1[11],yk,yk_1;
/*define variable used */ float netin0[n0],netin1[n1],netin2[n2];
float bias1[n1],prdlbs1[n1]; float weight1[n1][n0],weight2[n2]
[n1]; float prdlwt1[n1][n0],prdlwt2[n2][n1]; float
actv1[n1],netout; float Icoef,motum,rms; unsigned seed_int,
seed_u; int epochs,h; int eph_pts=500,rcl_pts=100; float
inwtsc=10.0; float xxo,yyo; float
timegrph,ukgrph,yk1grph,netoutgrph; main() {
char ch,ch1;
_setvideomode(_VRES16COLOR); /*VRES16COLOR FOR VGA */
_getvideoconfig(&vc);
xxo=60;

Luận văn tốt nghiệp


GVHD : Thầy Nguyễn Thiện Thành

yyo=vc.numypixels/2.0;
_setlogorg(xxo,yyo);
printf("\n\nlearn ? (y/n)");
ch=getche();

if(ch=='y')

{
printf("\n\nlearning coeffcient ?");
scanf("%f",&Icoef);
printf("\nmomentum ?");
scanf("%f",&motum);
printf("\nseed_int ?");
scanf("%d",&seed_int);

SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 169


printf("\nseed_u ?");
scanf("%d",&seed_u);
printf("\nepochs of training ?");
scanf("%lu",&epochs);
initialise();
learn();
savewt();
getch();
seewt();
}

printf("\nrecall now ?(y/n)");
ch=getche();

{

if (ch=='y')

readwt();

getche();
recall();

Luận văn tốt nghiệp

GVHD : Thầy Nguyễn Thiện Thành

}
printf("\nexit ?(y/n)\n");
ch1=getche();

if

(ch1='y')
{ _clearscreen(_GCLEARSCREEN);
_setvideomode(_DEFAULTMODE);
}
} initialise()
{
int i,j;


SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 170


srand(seed_int); for(j=0;j+)
{
bias1[j]=(2.0*(float)rand()/RAND_MAX-1.0)/inwtsc;
prdlbs1[j]=0.0;

for(i=0;i
{
weight1[j][i]=(2.0*(float)rand()/RAND_MAX-1.0)/inwtsc;
prdlwt1[j][i]=0.0;
}
}
for(j=0;j{
for(i=0;i{
weight2[j][i]=(2.0*(float)rand()/RAND_MAX-1.0)/inwtsc;
prdlwt2[j][i]=0.0;
}
}

Luận văn tốt nghiệp

GVHD : Thầy Nguyễn Thiện Thành

} comptout()

{

register int i,j;

float

ea,eb;

for(j=0;j{
netin1[j]=bias1[j];

for(i=0;i
netin1[j]+=weight1[j][i]*netin0[i];
ea=(float)exp((float)netin1[j]);

SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 171


eb=(float)exp((float)((-1.0)*netin1[j]));
actv1[j]=(ea-eb)/(ea+eb);
}
for(j=0;j{
netin2[j]=0.0;

for (i=0;i
netin2[j]+=weight2[j][i]*actv1[i];

netout=netin2[j];
}
}
comptwt()
{ register int i,j; float
error1[n1],error2[n2],sum1[n1]; float
delwt1[n1][n0],delwt2[n2][n1]; float
delbs1[n1]; for(j=0;j{

Luận văn tốt nghiệp
error2[j]=yk1[h]-netout;

GVHD : Thầy Nguyễn Thiện Thành
for (i=0;i
delwt2[j]

[i]=Icoef*error2[j]*actv1[i]+motum*prdlwt2[j][i];
}
for(j=0;j{
sum1[j]=0.0;
for(i=0;isum1[j]+=error2[i]*weight2[i][j];

SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 172


error1[j]=(1.0+actv1[j])*(1.0-actv1[j])*sum1[j];

delbs1[j]=Icoef*error1[j]+ motum * prdlbs1[j];

for (i=0 ;i
delwt1[j][i] = Icoef*error1[j]*netin0[i]+motum*prdlwt1[j][i];
}
for(j=0;j{
bias1[j]+=delbs1[j];
prdlbs1[j]=delbs1[j];

for

(i=0;i{
weight1[j][i]+=delwt1[j][i];

prdlwt1[j]

[i]=delwt1[j][i];
}
}
for (j=0;j{
for (i=0;i{
weight2[j][i]+=delwt2[j][i];

prdlwt2[j]


[i]=delwt2[j][i];

Luận văn tốt nghiệp

GVHD : Thầy Nguyễn Thiện Thành

}
}
} learn()

/*train net

*/
{ FILE*fptr; register
int k; srand(seed_u);
for (k=0;k
SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 173


×