sittisak
Guest
|
|
« on: February 08, 2009, 09:29:50 PM » |
|
เป็น Code ที่ต้องการใช้ควบคุม Servo Motor โดยการรับค่าจาก Rs232 ถ้า 1 ให้หมุนซ้าย 2 กลับมาที่ 0 และ 3 หมุนขวา complie ผ่านนะครับ พอ Burn แล้ว ไม่มีอะไรเกิดขึ้นเลยครับ รบกวนขอคำแนะนำด้วยนะครับ
#include <16F877A.h> // header file for PIC16F877A
#fuses HS,NOWDT,NOPROTECT,NOLVP // Configuration word #use delay(clock=10000000) // Change OSC here (default 10MHz) #use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7)
#include <stdlib.h> #include "input.c"
#define SERVO_PIN PIN_C0 // pin servo control #define PULSE_LEFT 2 // 2.0 ms #define PULSE_RIGHT 1 // 1.0 ms #define PULSE_STOP 1500 // 1.5 ms (1500us) #define PULSE_LOW 20 // 20.0 ms
/** Clockwise */ void servo_left(void) // (2) { output_high(SERVO_PIN); delay_ms(PULSE_LEFT); output_low(SERVO_PIN); delay_ms(PULSE_LOW); } /** Counterclockwise */ void servo_right(void) // (3) { output_high(SERVO_PIN); delay_ms(PULSE_RIGHT); output_low(SERVO_PIN); delay_ms(PULSE_LOW); } /** Center */ void servo_stop(void) // (4) { output_high(SERVO_PIN); delay_us(PULSE_STOP); output_low(SERVO_PIN); delay_ms(PULSE_LOW); }
/************************************************************** Main Function */ void main() { int i; char a; set_tris_c(0x00); // port c all output set_tris_a(0xFE); while (TRUE) { printf("\r\nEnter the first number: "); a = getc(); // (5) switch(a) { case '1': for (i=0;i<100;i++) // (5) servo_left(); break; case '2': for (i=0;i<100;i++) servo_stop(); break; case '3': for (i=0;i<100;i++) servo_right(); break; } } }
|