Thông báo

Collapse
No announcement yet.

Viet Code giup em voi

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #16
    C hay asm cũng được a à.miễn sao chương trinh chạy được.đó là mấy chương trình e lấy trên mạng thôi,e không hiểu nên nhờ mấy a giúp.e cảm ơn hồi đáp của mấy a

    Comment


    • #17
      PMW_PIN thì khai báo thế nào hả a

      Comment


      • #18
        Nguyên văn bởi youaremylife Xem bài viết
        tóm lại là viết bằng asm hay c

        chương trình gửi lên chỉ mang tính tham khảo, chỉ thể hiện lại nôi dung đã nói trước đó, muốn build được thì phải sửa lại thêm.
        Anh kiểm tra giúp em nốt luôn đi a,a viết em không biết sai ở đâu . a giúp e với

        Comment


        • #19
          Code:
          #include <REGX51.H>
          #include <stdio.h>
          
          #define usestep
          
          #define BUTTON_PORT P2
          #define MASK_BUTTON 0x07
          #define BUTTON_STOP P2_0
          #define BUTTON_FAST P2_1
          #define BUTTON_LOW P2_2
          
          #define PERIOD   100
          #define DUTY_MIN  20 //percent of duty
          #define DUTY_MAX   (PERIOD)
          #ifdef usestep
          #define DUTY_STEP 10
          #endif
          
          #define PWM_PIN  P2_7
          #define disable_interrupt()  ET0 = 0
          #define reenable_interrupt() ET0 = 1
          
          #define Timer_Setup() EA =0; TMOD = 0x02; TH0 = 0x9B; TL0 = 0x9B; TR0 = 0 ; ET0 = 0; EA = 1
          #define Set_duty(t) PWM.duty = t
          
          unsigned char setduty;
          
          static data struct
          {
            	unsigned char count;
          	unsigned char duty;
          	unsigned char period;
          }PWM;
          
          static data union
          {
          	struct 
          	{
          		unsigned char  phase:1;
          		unsigned char  run:1;
          		unsigned char  error:1;
          		unsigned char  update:1;
          		unsigned char  Lowlimit:1;
          		unsigned char  Highlimit:1;
          		unsigned char  db:1;
          		unsigned char  RSTimer:1;
          	}bits;
          	unsigned char _byte;
          }status; // biến lưu trạng thái làm việc
          
          static data union
          {
          	struct 
          	{
          		unsigned char  stop:1;
          		unsigned char  fast:1;
          		unsigned char  low:1;
          		unsigned char  unused:5;
          	}bits;
          	unsigned char _byte;
          }button; // biến lưu trạng thái nút nhấn
          // PRIVATE PROTOTYPE
          void Init_System(void);
          unsigned char check_button(void);
          void delay_Ms(unsigned int tdelay);
          void timer_interrupt_handle(void) interrupt 1
          {
          	if(status.bits.run)
          	{
          		if(PWM.count <= PWM.duty)	PWM_PIN = 1;
          		else if(PWM.count <=PWM.period) PWM_PIN= 0;
          		else		status.bits.RSTimer = 1;
          		if(status.bits.RSTimer)
          		{
          			PWM.count = 0;
          			status.bits.RSTimer = 0;
          		}
          		else 			PWM.count += 10;
          	}else PWM_PIN = 0;
          	TF0 = 0; // xoa co ngat		
          }
          
          void main()
          {
          	Init_System();
          	while(1)
          	{
          		do
          			button._byte = check_button(); // kiem tra trang thai phim nhan
          		while(!button._byte); // cho den khi co nut nhan
          		if(button.bits.stop) // neu nut stop duoc nhan
          		{
          			disable_interrupt(); // khong cho timer hoat dong
          			TR0 = 0; //dung timer
          			TF0 = 0; //xoa co ngat
          			PWM_PIN = 0; // dung dong co
          			status.bits.error = 0; // xoa co loi
          			status.bits.run = 0; // dong co da dung
          		}
          		else // nút stop không được nhấn
          		{
          			if((button.bits.fast)&&(button.bits.low)) // neu cả hai nút nhấn cùng được bấm xem như lỗi và bỏ qua
          			{
          				status.bits.error = 1;			
          				// DO SOME THING
          			}
          			else 
          			{
          				if(button.bits.fast) // neu nut nhanh duoc nhan
          				{
          					#ifdef usestep		
          					if(!status.bits.Highlimit)
          					{
          						setduty = PWM.duty;
          						setduty += DUTY_STEP;
          						if(setduty >= DUTY_MAX) 
          						{
          							setduty = DUTY_MAX;
          							status.bits.Highlimit = 1;
          						}
          					}
          					else if(setduty < DUTY_MAX) status.bits.Highlimit = 0;
          					#else
          					setduty = (unsigned char)DUTY_MAX; 
          					#endif
          					Set_duty(setduty); // tinh nduty
          				}
          				if(button.bits.low) // neu nut nhanh duoc nhan
          				{
          					#ifdef usestep		
          					if(!status.bits.Lowlimit)
          					{
          						setduty = PWM.duty;
          						if(setduty > DUTY_STEP) 	setduty -= DUTY_STEP;
          						else setduty = DUTY_MIN;
          						if(setduty <= DUTY_MIN) 
          						{
          							setduty = DUTY_MIN;
          							status.bits.Lowlimit = 1;
          						}
          					}
          					else if(setduty > DUTY_MIN) status.bits.Lowlimit = 0;
          					#else
          					setduty  = (unsigned char)DUTY_MIN;
          					#endif
          					Set_duty(setduty); // tinh nduty						
          				}	
          				if(!status.bits.run)// neu dong co dang dung thi cho phep chay lai
          				{
          					status.bits.run = 1;
          					reenable_interrupt(); // cho phép timer hoạt động trở lại
          					TR0 = 1;
          				}
          			}
          		}
          	}
          }
          
          unsigned char check_button(void)
          {
          	unsigned char old_status,new_status;
          	old_status = (~BUTTON_PORT)&MASK_BUTTON; //&MASK_BUTTON
          	if(old_status)  // kha nang co nut nhan
          	{
          		delay_Ms(1000); // chong nhieu
          		new_status = (~BUTTON_PORT)&MASK_BUTTON; //&MASK_BUTTON
          		while((BUTTON_PORT&MASK_BUTTON) != MASK_BUTTON);
          		return old_status&new_status; // nếu trạng thái truoc va sau tuong ung cac nut la nhu nhau thi co nghia la nut do duoc nhan
          	}
          	return 0; // khong co nut nao duoc nhan
          }
          
          void delay_Ms(unsigned int tdelay)
          {
          	// TO DO
          	while(tdelay--);
          }
          
          // khoi tao
          void Init_System(void)
          {
          	status._byte = 0;
          	button._byte = 0;
          	setduty = (unsigned char)DUTY_MIN;
          	PWM.period = (unsigned char)PERIOD;
          	Set_duty(setduty);
          	P2 = 0xFF;
          	PWM_PIN = 0;
          	Timer_Setup();
          }
          nếu bạn muốn tốc độ nó tăng giảm được thì để cái dòng #define usestep
          không thì //#define usestep dòng đó chuơng trình sẽ chạy ở hai cấp tốc độ DUTY_MAX với DUTY_MIN mấy cái thiết lập bạn tự điền lấy

          Comment


          • #20
            Em đã xem bài.cảm ơn a đã giành thời gian cho e,e liên lạc với a sau

            Comment


            • #21
              e muốn tăng lên 6 nút nhấn ( 6 tốc độ) thì làm thế nào a

              Comment


              • #22
                Nguyên văn bởi zangseik Xem bài viết
                Dùng 3 phím bấm,với phím bấm 1 tốc đô motor nhanh,pb2 toc do vua,pb3 dung.
                [ATTACH=CONFIG]56097[/ATTACH]
                em xin cam on nhieu,
                ductuandtvt@gmail.com
                cai này mình làm rồi, nhưng viêt asembly!^^
                cần thì mail cho mình :dinhnambkhn@gmail.com
                |

                Comment


                • #23
                  Nguyên văn bởi dinhnam123 Xem bài viết
                  cai này mình làm rồi, nhưng viêt asembly!^^
                  cần thì mail cho mình :dinhnambkhn@gmail.com
                  A gửi giúp e,e cảm ơn

                  Comment

                  Về tác giả

                  Collapse

                  zangseik Tìm hiểu thêm về zangseik

                  Bài viết mới nhất

                  Collapse

                  Đang tải...
                  X