Nhờ các cao thử chỉ giúp em xem đoạn code sau của em sai ở chỗ nào mà nó không có xung r ơ P1.0 ..P1.3 các bác nhỉ? cảm ơn mọi người đã quan tâm. Quả này chạy thì em post lên mạng khoe mọi người luôn em làm mạch công suất cho động cơ này khá khủng đấy. Mà em lượm được ở hàng đồng nát cái động cơ bước 4A to vật, vẫn chạy tốt.
Code:
/*****************_________Chuong trinh dieu khien step motor_________*****************/ /*****************_________Co cac che do: Tang toc, giam toc, dao chieu, dung._________*****************/ /*****************_________Thiet ke voi VDK 89S52 va thach anh 24MHz_________*****************/ /*****************_________Creat by Tuyen:0977817726_________*****************/ #include <reg52.h> #include <stdio.h> #define CT_1 P3^0 //Stop #defile CT_2 P3^1 //Quay thuan #defile CT_3 P3^2 //Quay nguoc #defile CT_4 P3^3 //Tang toc #defile CT_5 P3^4 //Giam toc int td = 1000; unsigned char M[4]={0x01,0x02,0x04,0x08}; //Moi phan tu cua mang cap nguon cho 1 cuon day ///////////// Ham tao tre 0.1ms //////// void delay_10ms(int time) { while(time) { TMOD = 0x02; //Timer0 che do 2, 8bit tu nap lai TH0 = -100; //Tan so xung 10khz TR0 = 1; while(TF0!); TF0 = 0; time --; } } ////////// Ham tre /////// void delay(void) { unsigned char t; for(t=0;t<=10000); } //////////// Ham tang toc ////////// unsigned char tang_toc(void) { if(CT_4==0) { while(CT_4==0) {;} td=td-1000; delay(); if(td<1) td=1; } return(td); } /////////////// Ham giam toc //////////// unsigned char giam_toc(void) { if(CT_5==0) { while(CT_5==0) { ; } td = td +1000; delay(); if(td>=11000) td = 10000; } return(td); } /////////////// Dieu khien motor quay thuan /////////// void quay_thuan(void) { int i; while(1) { for(i=0;i<=3;i++) { P1=M[i]; delay_10ms(td); } } } ///////// Ham dieu khien dong co quay nguoc lai ////////// void quay_nguoc(void) { int i; while(1) { for(i=3;i>=0;i--) { P1=M[i]; delay_10ms(td); } } } ////////// Dung dong co //////////// void stop(void) { while(1) P1=0x00; } /////////////// Ham chon che do cho dong co //////////// unsigned char che_do(void) { if(CT_1==0) n=1; if(CT_2==0) n=2; if(CT_3==0) n=3; switch(n) { case 0:{break;} case 1:{stop();break;} case 2:{quay_thuan();break;} case 3:{quay_nguoc();break;} } } ////////// Ham chinh ////////// void main (void) { while(1) { tang_toc(); giam_toc(); che_do(); } }
Comment