[ บทความ : Robot ] ตอนที่ 9 เรื่อง ... ไลบรารีสำหรับ ET-ROBOT RD2

 

     พอดีมีคนถามถึงแฟ้มส่วนหัว (header file) สำหรับ ET-ROBOT RD2 ซึ่งมีด้วยกัน 3 แฟ้ม คือ
 
     1. rd2reg.h เป็นแฟ้มส่วนหัวที่สร้างขึ้นมาเพื่อกำหนดรายการเรจิสเตอร์สำหรับชิพ RD2
  /*------------------------------------------------------
* Philips P89C51RD2 register (RD2REG.H)
*------------------------------------------------------*/

asm {
CCAP0H EQU $FA * Module 0 Capture High
CCAP1H EQU $FB * Module 1 Capture High
CCAP2H EQU $FC * Module 2 Capture High
CCAP3H EQU $FD * Module 3 Capture High
CCAP4H EQU $FE * Module 4 Capture High

CCAP0L EQU $EA * Module 0 Capture Low
CCAP1L EQU $EB * Module 1 Capture Low
CCAP2L EQU $EC * Module 2 Capture Low
CCAP3L EQU $ED * Module 3 Capture Low
CCAP4L EQU $EE * Module 4 Capture Low

CCAPM0 EQU $DA * Module 0 Mode
CCAPM1 EQU $DB * Module 1 Mode
CCAPM2 EQU $DC * Module 2 Mode
CCAPM3 EQU $DD * Module 3 Mode
CCAPM4 EQU $DE * Module 4 Mode

CCON EQU $D8 * PCA Counter Control
CH EQU $F9 * PCA Counter High
CL EQU $E9 * PCA Counter Low
CMOD EQU $D9 * PCA Counter Mode
}

extern register unsigned char
PSW, SP, DPH, DPL,
P0, P1, P2, P3,
IP, IE, TMOD, TCON, TH0, TL0, TH1, TL1,
SCON, SBUF, PCON,
T2CON, TH2, TL2, RCAP2H, RCAP2L,
CCAPM0, CCAPM1, CCAPM2, CCAPM3, CCAPM4,
CCAP0H, CCAP1H, CCAP2H, CCAP3H, CCAP4H,
CCAP0L, CCAP1L, CCAP2L, CCAP3L, CCAP4L,
CCON, CH, CL, CMOD;
 
     2. lcd.h เป็นแฟ้มส่วนหัวที่ใช้สำหรับควบคุม LCD บนบอร์ด RD2 ที่ใช้ควบคุมหุ่นยนต์ ET-ROBOT
  /* Filename : lcd.h
* I/O : Reset -> P2.5
* Enable -> P2.4
* Data4567 -> P2.0,P2.1,P2.2,P2.3
*/

/***************************************************
* Prototype(s) *
***************************************************/
LCD_busy();
LCD_enable();
LCD_inst(command);
LCD_putc(ascii);
LCD_puts(lcd_string);
LCD_init();
LCD_row1();
LCD_row2();

/***************************************************
* Sources *
***************************************************/
LCD_busy( )
{
unsigned char i;
for (i=0; i<0x18; i++);
}

LCD_enable( )
{
asm {
clr P2.4
}
LCD_busy();
asm {
setb P2.4
}
}


LCD_inst(command)
unsigned char command;
/* Wrote an instruction on the LCD. */
{
asm {
clr P2.5
}
P2 = (P2 & 0xF0)|((command>>4) & 0x0F);
LCD_enable();
P2 = (P2 & 0xF0)|(command & 0x0F);
LCD_enable();
LCD_busy( );
}

LCD_putc(ascii)
unsigned char ascii;
{
asm {
setb P2.5
}
P2 = (P2 & 0xF0)|((ascii>>4) & 0x0F);
LCD_enable();
P2 = (P2 & 0xF0)|(ascii & 0x0F);
LCD_enable();
LCD_busy( );
}

LCD_puts(lcd_string)
unsigned char *lcd_string;
{
while (*lcd_string) LCD_putc(*lcd_string++);
}

LCD_init( )
{
asm {
setb P2.4
clr P2.5
}
LCD_inst(0x33);
LCD_inst(0x32);
LCD_inst(0x28);
LCD_inst(0x0C);
LCD_inst(0x06);
LCD_inst(0x01); /* Clear */
LCD_busy();
}

LCD_row1()
{
LCD_inst(0x80);
}

LCD_row2()
{
LCD_inst(0xC0);
}
 
     3. motor.h เป็นแฟ้มส่วนหัวที่ใช้สำหรับควบคุมการทำงานของเซอโวมอเตอร์ของ ET-ROBOT
  /* Filename : motor.h
* I/O : P1.4 -> Left (PWM-CEX1)
* P1.5 -> Right (PWM-CEX2) */

MTL_back() asm {
MOV CCAP1H,#243
}

MTL_forward() asm {
MOV CCAP1H,#230
}

MTL_stop() asm {
MOV CCAP1H,#0
}

MTR_back() asm {
MOV CCAP2H,#230
}

MTR_forward() asm {
MOV CCAP2H,#243
}

MTR_stop() asm {
MOV CCAP2H,#0
}

MTX_init()
{
/* Initial Timer0 Generate Overflow PCA */
TMOD = 0x02; /* Timer0 Mode2 : 8bit auto reload */
TH0 = 16; /* 256-240, 78.125usec Auto reload (20msec/PWM) */
TL0 = TH0;
TCON = 0x10; /* setb TR0, TCON or 0001,0000*/

/* Initial PWM */
CMOD=0x04;
CCAPM1=0x42;
CCAPM2=0x42;
CCAP1H=0x00;
CCAP2H=0x00;
CCON=0x40;
}
 

 

ดาวน์โหลด   ET-ROBOT-RD2.EXE   ขนาด 51.7KB

 
หมายเหตุ
แฟ้ม et-robot-rd2.exe เป็นแฟ้มที่ถูกบีบอัดโดยบันทึกเป็น .exe การคลายแฟ้มนั้นทำได้โดยการดับเบิ้ลคลิกที่แฟ้ม et-robot-rd2.exe เพื่อกำหนดไดเรกทอรีที่จะคลายแฟ้ม ถ้าทำสำเร็จจะได้แฟ้ม 3 แฟ้ม ดังรายชื่อที่บอกไปก่อนหน้านี้ครับ ส่วนรายละเอียดการทำงานนั้นอ่านได้จากหนังสือ Micro-C/51 (พิมพ์ครั้งที่ 3) ของทาง ETT ครับ 

 


เขียนโดย : ศุภชัย บุศราทิจ
Author : Supachai Budsaratij
e-mail : raek@se-ed.net
วันที่ทำการปรับปรุง :  ๑๕ มิ.ย. ๒๕๔๘