Và đi tiếp.

Một phần của tài liệu điều khiển động cơ bước, ứng dụng phục hồi robot ktmt (Trang 29 - 32)

- 210 vị trí nhớ có thể định vị bit.

và đi tiếp.

3.1.1 Chương trình nạp vào vi điều khiến A T89C52

Chương trình cho hệ thống điều khiến động cơ được soạn thảo trên

trình biên địch KeilC 4 bằng ngôn ngữ C. Sau đây là chương trình:

#include <REGX52.H> #define DCB P2 #define thuan 1 #define nguoc 0 #define co 1 #define khong 0 #define tien 1 #define lui 0 #define trai 1 #define phai 0 #define sang 0 #define tat 1

sbit P.S = P1^1; //Cong tac ben phai phia sau

sbit P.T = P1^3; //Cong tac ben phai phia truoc sbit T $ = P1^0; //Cong tac ben trai phia sau sbit TT = P1^2; //Cong tac ben trai phia truoc sbit D PS = P1^5; // Den bao ben phai phia sau sbit D PT = P1^6; // Den bao ben phai phia truoc

sSbit D T5 = P1^4; // Den bao ben trai phia sau sbit D TT = P1^7; // Den bao ben trai phia truoc

bit DC1, DC2, STOP; //1 la thuan 0 la nguoc

unsiơgned char CB_DCI[]={0x1,0x2,0x4,0x8)}; unsiơgned char CB_DC2[]={0x10,0x20,0x40,0x80};

unsigned char G_DC1,G DC2;//Vi tri cua moi dong co unsigned int cuon_ day?

unsigned int van toc, dem ngat, chu ky, tre; // Khai bao Timer 0

void setup_timer0 (void) {

TMOD=0x2; // Che do 8 bit tu nap lai

TL0=0x6; ⁄/ Gia tri khoi tao, 200 xung thi tran

TH1=0x6¿ // Gia tri nap lai

EA=0z ET0=1; TR1=0;

BA=1;

}

// Chuong trinh ngat Timer 0

void Run(void) interrupt 1 {

TRO=0; // Dung chay Timer 0

if (++dem ngat==van_ toc) {

1£((!STOP) || (!cuon day==0))( // Chua có dk dụng lai hoac chua tro ve cuon day dau tien

i£(DC1)({ G_DC1=CB_DC1[cuon day] } else({ G_DC1=CB_DC1[3-cuon_ day]; } if£(DC2)({ G_DC2=CB_DC2[cuon_ day]; } else({ G_DC2=CB_DC2[3-cuon_ day]; } if(†ttcuon_day>=4) { cuon_ day=0; chu ky++; } else{

DCB=0x0;//Tat dong đien dua vao` cac cuon day }

DCB=G_ DCl+G_ DC2; // Xuat tin hieu ra PORT 2

1£ (đem ngat>van_ toc) {

dem_ngat=0; }

TR0=1; // Cho chay Timer 0

}

// Chuong trinh con cho Tien va Lui

void MOVE (bit huong,unsigned int so chu ky){ 1£ (huong) { DC1=thuan; DC2=nguoc; } else({ DC1=nguoc; DC2=thuan; }

chu ky=0; //bat dau dem so chu ky

STOP=khong;

while(so_chu ky>=chu_ ky)

{}

STOP=co;

}

// Chuong trinh cho re

void re(bit huong,unsigned int so chu ky){ 1£ (huong) { DC1=thuan; DC2=thuan; } else({ DC1=nguoc; DC2=nguoc; }

chu _ky=0;//bat dau dem so chu ky STOP=khong;

while(so_chu ky>=chu_ ky)

{Œ}

STOP=CO;

}

// Chuong trinh tao tre

void delay (unsigned int time) {

unsigned int ¡; while (--time) {

i=1000z

while(--i1)

Ø } }

void SW TT(void) {

Một phần của tài liệu điều khiển động cơ bước, ứng dụng phục hồi robot ktmt (Trang 29 - 32)

Tải bản đầy đủ (PDF)

(38 trang)