12/26/2008

EQ2 自我幻想

「嗚........」。
緩慢的張開雙眼,翻身吐了幾口海水,
雙手用盡力氣撐起上半身,環顧四周,
少少的幾隻螃蟹,不遠處看似有個小鎮。

回想當時商船被海盜打劫後,
除了被丟下海的,也只剩下冷冰冰的屍體,
慶幸還能抓塊浮木,飄流到這。


起身往不遠處的小鎮入口走去,
「........」
說是小鎮卻又不像,也不是個市集,
只有不到10人的小地方,
四周卻又用牆圍住,
只留下二三處出入口,
「喂.......那邊的小子」凱拉貓人叫著。

「是在叫我嗎?」
「我叫 Murrar Shar,小子你叫什麼名字。」
一身銀白色盔甲,腰中配著長劍,胸前的盔甲有的奇特的雕刻
像是個隊長階級的貓人對我說著。
「唔...我叫Enialis,這..這是什麼地方呢?」我回答著。
「Enialis......Enialis.....,真是個難發音的名字,
這個小島叫Queen's Colony,我是這裡的隊長,
目前島上有奇怪的現象發生,我們需要人手幫忙,
你快去找 Barbarian 報到吧。」Murrar Shar指著不遠處帳棚下的野蠻人。

「我為什麼要做這些事啊!」低言著。
順手往旁邊桌上拿了幾個麵包,和一壺水,看來就是隨意讓人取用的。

「怎麼還沒有人來幫忙呢?上頭到底在做什麼?」Barbarian 吼叫著。
「你好,我是Enialis,是Murrar Shar叫我過來幫忙的」我的回答打斷Barbarian的抱怨。
「.....怎麼叫個矮小的木精靈來幫忙啊,是沒有人了嗎?
他能做事嗎?喔,我的老天」Barbarian 並不在意我是否在旁邊的大叫著。
「你....小子,去和我的士兵對打看看,看你是否有些本事」。

選了根順手的雙手杖,口中輕念著咒語,
對著樹下休息的士兵轟了過去,
受到驚嚇和傷害的士兵,拿了短劍就砍了過來,
正想往旁邊閃躲時,卻忘了沒有充份休息的雙腳,只好往地上滾去,
士兵在次舉起短劍,往地上揮砍,我只能眼睜睜的看他把我砍成肉塊,
「噹.....」一隻怪異的巨大甲蟲擋在我的身前。
嚇一跳的士兵,忽然間軟倒在地上,好像某種法術在他身上起了作用。

「你好,我叫Valery,這是我的召喚寵Joke,我是個元素師」Valery伸出手把我拉起。
「謝謝你的幫忙,我叫Enialis,是個秘術者」仔細一看,
是個凱拉女貓人,高我一個肩,正低著頭,眼精像發著光似的盯著我看。
「哇...是個秘術師也,聽說你們能和神說話啊,是真的嗎?
你們會神的法術啊,好利害喔」Valery像看到寶似的高興叫著。
「這是一般人對我們的誤解啦...,我們是尊重先靈,
尋求先靈的智慧,學習先靈的法術。Valery 謝謝你的幫忙,
我先去找那個看不起人的 Barbarian,要不是你,我早就變肉醬了」我回答著。

12/24/2008

耳機

對音樂的要求不高
對我這個木耳來說
總是能聽就好


半年前買了個全罩式耳機
還是特價時花不到300大洋
使用後覺的效果不錯 :D
現在有些小毛病出現了 0.0
剛好最近也常逛
想說在找看看有沒一樣的
結果沒貨了 ~_~

選了好久一直沒有中意的
直到看到了 Philips SHP2000
使用後.............
原來耳機的好壞真的差很多
還以為自已之前買的就很好了 XDDD

看了許多網友的討論和研究
耳機也是門大學問啊 @_@
讓我有點想在買隻2000上下的入門機
不知女王是否會點頭呢? XDDD

不過對我來說好像SHP2000也很好用了 :P
只差沒有MIC要在自已DIY

12/17/2008

Amd? Intel?

對電腦有些許研究的人
都知道這二個CPU
剛好最近公司同事和我自已
共組了4台電腦

有用INTEL 也有用AMD
而目前市場主流也是INTEL


就我個人看法
Intel好在浮點運算強
適合做大型運算,影片轉檔.......etc
但就是貴 ~_~
只要你的預算夠
商家也是叫你買Intel

但認真的想想 0.0
我只是打打game,上上網,沒轉過檔 XDD
買Intel的CPU好像太浪費了
所以我選擇了AMD

其實真的是常轉檔和跑繪圖做運算
還有就是錢太多沒地方花 囧
不然AMD就真的很夠用了
而且還比較便宜 XDD

12/05/2008

AT89S5X + RF_module

這次的案子
使用到RF_module
也怕自已忘掉
所以就改寫到89S51上 XDDD



/*
RF_module user TR24A
TR24A MCU = EMI198810 3.3V
需注意io 可使用在16 or 32 bit mcu
By Brian @Taiwan
*/
#include "AT89X52.H"

#define Port_B P2

#define RF_DI 0x01 //P2.0 low
#define RF_CSB 0x02 //P2.1 high
#define RF_CLK 0x04 //P2.2 low
#define FIFO_FLAG 0x08 //P2.3 low
#define PKT_FLAG 0x10 //P2.4 low
#define RF_RESET 0x20 //P2.5 high
#define RF_DO 0x80 //P2.7 high

#define MaxLength 4

void Init_RF(void);
void INTO_TX(void);
void INTO_RX(void);
void WRITE_FIFO(unsigned char tx_leng,unsigned char tx_data);
void READ_FIFO(void);

void SpiTxReg(unsigned char rf_com,unsigned char rf_hb,unsigned char rf_lb);

void Write_FIFO_Start(unsigned char rf_com,unsigned char tx_leng);
void Write_FIFO_data(unsigned char tx_data);
void Write_FIFO_End(void);

unsigned char Read_FIFO_Start(unsigned char rf_com);
unsigned char Read_FIFO_data(void);
void Read_FIFO_End(void);
unsigned int SpiRxReg(unsigned char rf_com); //debug user

void Spi_Tx_Loop(unsigned char tx_data);
unsigned int Spi_Rx_Loop(void);

void sys_init(void);
void msDelay(unsigned int MaxDelay);

unsigned int DelayCNT;
unsigned int TimeCNT;
unsigned char Revice_Data[MaxLength];

void main(void)
{
sys_init();
Port_B &= ~RF_RESET; //RESET LOW ACT
msDelay(30);
Port_B |= RF_RESET; //RESET HIGH
msDelay(30);

Init_RF();

while(1)
{
//IN YOU CODE TX OR RX

//EX: TX
WRITE_FIFO(0x04,0x99); //SEND 4BYTE LENGTH 0x99 0x99 0x99 0x99

//EX: RX
INTO_RX(); //RESET RX STATUS
READ_FIFO(); // RECEIVE DATA IN Revice_data[]
}
}

void sys_init(void)
{
//ALL SYSTEM REG SET
IE = 0x82; //USER INTERRUPT TIME0
TMOD = 0x02; //SET TIME 0 MODE
TH0 = 256-200; //SET RELOAD VALUE
TL0 = 256-200; // FAST VALUE
TR0=1; //time enabled
TimeCNT=0;
P2 = 0xA6; //RF port default
}

void Time0_int(void)interrupt 1
{
// TIME 0 MODE2 AUTORELOAD USER UNTERUPT 1
// 1000 = 0.1S, 10000 = 1S, 100=0.01S ,10=0.001S
TimeCNT++;
if(TimeCNT>=5)
{
DelayCNT++;
TimeCNT=0;
}
}

void msDelay(unsigned int MaxDelay)
{
DelayCNT = 0x0000;
while(DelayCNT < MaxDelay) {}
}


void Init_RF(void)
{
//unsigned int rec_data; debug
//INITIAL REG48~REG58
SpiTxReg(0x30,0x98,0x00); //reg48
// rec_data=SpiRxReg(0x30);
SpiTxReg(0x31,0xFF,0x0F); //reg49
// rec_data=SpiRxReg(0x31);
SpiTxReg(0x32,0x80,0x28); //reg50
SpiTxReg(0x33,0x80,0x56); //reg51
SpiTxReg(0x34,0x4E,0xF6); //reg52
SpiTxReg(0x35,0xF6,0xF5); //reg53
SpiTxReg(0x36,0x18,0x5C); //reg54
SpiTxReg(0x37,0xD6,0x51); //reg55
SpiTxReg(0x38,0x44,0x04); //reg56
SpiTxReg(0x39,0xE0,0x00); //reg57
SpiTxReg(0x3a,0x00,0x00); //reg58
msDelay(20);
//INITIAL REG0~REG28
SpiTxReg(0x00,0x35,0x4F); //reg00
SpiTxReg(0x02,0x1F,0x01); //reg02
SpiTxReg(0x04,0x38,0xD8); //reg04
SpiTxReg(0x05,0x00,0xA1); //reg05
SpiTxReg(0x07,0x12,0x4C); //reg07
SpiTxReg(0x08,0x80,0x08); //reg08
SpiTxReg(0x09,0x21,0x01); //reg09
SpiTxReg(0x0A,0x00,0x04); //reg10
SpiTxReg(0x0B,0x40,0x41); //reg11
SpiTxReg(0x0C,0x7E,0x00); //reg12
SpiTxReg(0x0D,0x00,0x00); //reg13
SpiTxReg(0x0E,0x16,0x9D); //reg14
SpiTxReg(0x0F,0x80,0x2F); //reg15
SpiTxReg(0x10,0xB0,0xF8); //reg16
// SpiTxReg(0x11,0x00,0x66); //reg17
SpiTxReg(0x12,0xE0,0x00); //reg18
SpiTxReg(0x13,0xA1,0x14); //reg19
SpiTxReg(0x14,0x81,0x91); //reg20
SpiTxReg(0x15,0x69,0x62); //reg21
SpiTxReg(0x16,0x00,0x02); //reg22
SpiTxReg(0x17,0x00,0x02); //reg23
SpiTxReg(0x18,0xB1,0x40); //reg24
SpiTxReg(0x19,0x78,0x0F); //reg25
SpiTxReg(0x1A,0x3F,0x04); //reg26
// SpiTxReg(0x1B,0x80,0x00); //reg27
SpiTxReg(0x1C,0x58,0x00); //reg28

//完成進入閒置模式
SpiTxReg(0x07,0x00,0x00);
}
//==========================================================================
/*void INTO_TX(void)
{
SpiTxReg(0x52,0x80,0x00); //RESET TX
msDelay(5);
SpiTxReg(0x07,0x01,0x10); //INTO TX
msDelay(5);
} */

//==========================================================================
void INTO_RX(void)
{
SpiTxReg(0x52,0x00,0x80); //RESET RX
msDelay(5);
SpiTxReg(0x07,0x00,0x90); //INTO RX
msDelay(5);
}
//==========================================================================
void WRITE_FIFO(unsigned char tx_leng,unsigned char tx_data)
{
int i;

SpiTxReg(0x52,0x80,0x00); //RESET TX
msDelay(5);

Write_FIFO_Start(0x50,tx_leng); //WRITE FIFO
for(i=0;i<tx_leng;i++)
Write_FIFO_data(tx_data);
Write_FIFO_End();

SpiTxReg(0x07,0x01,0x10); //INTO TX
msDelay(5);

/* i = 0;
while( i == 0) //若PKT_FLAG = 0則等待,等於1則往下執行
{
i = Port_B; //此處沒有作用 但 Application Notes 說可讀取此io來確定data是否傳送完成
i &= PKT_FLAG; //檢查pkt_flag
} */

SpiTxReg(0x52,0x80,0x00); //RESET TX
msDelay(5);

SpiTxReg(0x07,0x00,0x00); //TX完成,進入閒置模式
msDelay(5);
}
//==========================================================================
void READ_FIFO(void)
{
char i;
unsigned char length;

for(i=0;i<MaxLength;i++) //clear receive data
Revice_Data[i]=0;
i = 0;
while( i == 0)
{
i = Port_B;
i &= PKT_FLAG; //wait pkt_flag io
}

length = Read_FIFO_Start(0xD0); //send 0xD0 and receive length
if(length<=MaxLength) //確定傳送的資料是無誤的 可在自已加上check code
{
for(i=0;i<length;i++)
{
Revice_Data[i]= Read_FIFO_data(); //接收資料
}
}

Read_FIFO_End(); //io set

SpiTxReg(0x52,0x00,0x80);
msDelay(5);
SpiTxReg(0x07,0x00,0x90);
msDelay(5);
}

void SpiTxReg(unsigned char rf_com,unsigned char rf_hb,unsigned char rf_lb)
{
unsigned char Port_status;

Port_status = Port_B;
Port_status |= RF_CSB;
Port_status &= ~RF_CLK;
Port_B = Port_status;

Port_status &= ~RF_CSB;
Port_B = Port_status;

Spi_Tx_Loop(rf_com);
Spi_Tx_Loop(rf_hb);
Spi_Tx_Loop(rf_lb);

Port_status = Port_B;
Port_status |= RF_CSB;
Port_status &= ~RF_CLK;
Port_B = Port_status;

}

void Write_FIFO_Start(unsigned char rf_com,unsigned char tx_leng)
{
unsigned char Port_status;

Port_status = Port_B;
Port_status |= RF_CSB;
Port_status &= ~RF_CLK;
Port_B = Port_status;

Port_status &= ~RF_CSB;
Port_B = Port_status;

Spi_Tx_Loop(rf_com);
Spi_Tx_Loop(tx_leng);

}

void Write_FIFO_data(unsigned char tx_data)
{
Spi_Tx_Loop(tx_data);
}

void Write_FIFO_End(void)
{
unsigned char Port_status;

Port_status = Port_B;
Port_status |= RF_CSB;
Port_status &= ~RF_CLK;
Port_B = Port_status;
}


unsigned char Read_FIFO_Start(unsigned char rf_com)
{
unsigned char Port_status;
unsigned char Rx_leng;

Port_status = Port_B;
Port_status |= RF_CSB;
Port_status &= ~RF_CLK;
Port_B = Port_status;

Port_status &= ~RF_CSB;
Port_B = Port_status;

Spi_Tx_Loop(rf_com);

Rx_leng = Spi_Rx_Loop();

return Rx_leng;
}

unsigned char Read_FIFO_data(void)
{
return Spi_Rx_Loop();
}

void Read_FIFO_End(void)
{
unsigned char Port_status;

Port_status = Port_B;
Port_status |= RF_CSB;
Port_status &= ~RF_CLK;
Port_B = Port_status;
}

void Spi_Tx_Loop(unsigned char tx_data)
{
unsigned char Port_status;
unsigned char temp;
int i;

for(i=0;i<8;i++)
{
Port_status = Port_B;
Port_status |= RF_CLK; //SPI_CLK = HIGH
Port_B = Port_status;

temp = tx_data & RF_DO;
Port_status = Port_B;

if(temp)
Port_status |= RF_DO;
else
Port_status &= ~RF_DO;

Port_B = Port_status;

tx_data<<=1;

msDelay(1);

Port_status = Port_B;
Port_status &= ~RF_CLK; //SPI_CLK = LOW
Port_B = Port_status;
msDelay(1);
}
}

unsigned int Spi_Rx_Loop(void)
{
unsigned char Port_status;
unsigned char rx_data;
unsigned char ret_data;
unsigned char temp;
int i;

ret_data = 0;

for(i=0;i<8;i++)
{
Port_status = Port_B;
Port_status |= RF_CLK; //SPI_CLK = HIGH
Port_B = Port_status;

rx_data = Port_B & RF_DI;

if(rx_data)
temp = 1;
else
temp = 0;

ret_data |= temp;

if(i<7)
ret_data <<= 1;
msDelay(1);
Port_status = Port_B;
Port_status &= ~RF_CLK; //SPI_CLK = LOW
Port_B = Port_status;
msDelay(1);
}

return ret_data;
}

unsigned int SpiRxReg(unsigned char rf_com)
{
unsigned char Port_status;
unsigned int rec_data;

Port_status = Port_B;
Port_status |= RF_CSB;
Port_status &= ~RF_CLK;
Port_B = Port_status;

Port_status &= ~RF_CSB;
Port_B = Port_status;

Spi_Tx_Loop(rf_com|0x80);

rec_data = Spi_Rx_Loop();
rec_data<<=8;
rec_data |= Spi_Rx_Loop();

return rec_data;
}

12/03/2008

工作 0.0

最近景氣不好 ~_~
公司也做了調整
所有人員減薪10%
真囧..........


這次又完成了二個Game
總計今年做出了7個Game
沒年終沒關係啊
請給我設計費 XDDD

冬天真的來了
景氣的寒冬也跟著來
又冷又囧

EverQuest 2

最近WOW改版為"哭妖王之怒" XDDD
我也因月卡到期就退出了 0.0
而這次的改版給我的感覺是......


無新意,還是一樣的無聊 = =
重覆著之前的事
每天的每日...膩了

所以決定重回EQ2了
打算邊玩邊學英文 XDD

目前所在伺服:Najena
人物:Enialis
所在:Qeynos

10/27/2008

德國工藝

德國工藝
錶也是其中之一
STOWA,ZEPPELIN,JUNKERS,A.LANGE,GLASHUTTE,NOMOS


和許多名錶相較之下
最常聽到的應是瑞士錶
而我也是最近才看到德國錶
才發現原來也是不錯的 0.0

而目前台灣只有代理高檔的德國錶
所以想入門款就只能自已上網訂 ~_~

所以下一隻錶就轉移目標 xd
打算買隻德國錶來戴
也沒半法寫心得 = =
因為我還沒實際過看,只有看過圖片
不過等我入手還要一段時間吧 XDDDDD
目前就看圖解毒吧 囧

Stowa
Pointtes(ZEPPELIN & JUNKERS)

10/22/2008

World of Warcraft

這是我最近在玩的online game
eq2是我玩過最有深度的online game
也一直找不到更好的


但國內代理商結束代理後
想玩就必需連線至美國 ~_~
只好找找有點相同的onlie game

而World of Warcraft就是我目前所在玩的
所在伺服有二個,一個PVP,一個PVE
PVE那個沒有在玩了
目前比較常在PVP玩

伺服:血之谷
角色:輕風浮雲~戰
角色:Capoeira~獵
角色:德森密羊奶粉~小D

歡迎找我一起玩

原來我的心還不夠大

當你認識了新朋友
但他的說話態度,做事方式
讓你覺的討厭
你會如何選擇?


ONLINE GAME就像一個小社會
每個人都是真實的
差別只在看不到對方的臉孔
最近遇到了和我很不對味的傢伙
相處了一些時間後,我選擇黑名單
直到他退公會了 0.0 我才發現
他的所做所為或許讓人討厭
但其他人卻能包容
而我........
原來我的心還不夠大...要改進

AT89S5X EASY KEY SCAN USER POLLING

做一個簡易KEY
1個IO做1個輸入
使用POLLING的方式
如此即可處理彈跳問題
又不會讓程式停下來
感覺寫的不是很好
如果有人發現更好的方法
請告訴我 謝謝



/*
AT89SX EASY KEY FIRST VER 1.0
KEY PORT P2
KEY INPUT P2_0~P2_3
USER POLLING
SHOW LED FOR PORT P0

BRIAN @ taiwan
*/

#include "AT89X52.H"

#define Key_port P2 //設定要讀取的port(set your read port)
#define Mark_Key 0x0F //設定要mark的key(set your mark key)
#define DebounceReg 20//設定初始化彈跳時間 (set your default debounce time)

#define b_Debounce 0x01 //set debounce flag for key_flag
#define b_Pressed 0x02 //set pressed flag for key_flag
#define b_Release 0x04 //set release flag for key_flag

void sys_init(void); //system_init function
char GetKey(void); //get press key number
unsigned char Get_KeyStatus(void); //get press key or release key
void Key_Loop(void); //scan key user polling

char Key_flag; //0x01 = Debounce 0x02 =press 0x04= release
char R_DebounceReg; //KEY DEBOUNCE COUNG
char R_KeyBuffer; //KEY BUFFER SAVE INPUT KEY
char First_key; //memory first pressed key
char Port_buffer; // memory port status

void main(void)
{
char PressKey,KeyStatus;
char Led_count;

sys_init();

Led_count=0;

while(1)
{
KeyStatus = Get_KeyStatus();

if(KeyStatus==0x02) //pressed key
{
PressKey=GetKey();
switch(PressKey)
{
case 1:
P0=0x1<<Led_count;
P0= ~P0;
Led_count++;
if(Led_count>7)
Led_count=0;
break;
//...........
}

}
else if(KeyStatus==0x04) //release key
{
PressKey=GetKey();
switch(PressKey)
{
default:
P0=0xFF;
break;
//...........
}
}

Key_Loop();
}

}

void sys_init(void)
{
Key_flag = 0;
R_DebounceReg = 0;
R_KeyBuffer = 0;
First_key = 0;
Port_buffer=0;
//ALL SYSTEM REG SET
Key_port=0x00;

}

void Key_Loop(void)
{
char Key;
char Key_chang;

if(Key_flag & b_Debounce)
{
R_DebounceReg--;
if(R_DebounceReg != 0) //debounce 時間內就離開 以過了debounce 就在讀取一次
return;
}

Key_chang = Key_port & Mark_Key; //讀取input key port

if(Key_chang != Port_buffer) //當port內的值有改變 而且是key 值
{
Port_buffer = Key_port; //memory port value
First_key = Port_buffer & Mark_Key; //memory user touch key
Key_flag = b_Debounce; //set flag
R_DebounceReg = DebounceReg; //set debounce time value
return;
}

if(Key_flag & b_Debounce) //當debounce 結束後
{
Key = Key_port & Mark_Key;//在取一次port的值
if(Key & First_key)//二次相同 , 設為按下
{
Key_flag = b_Pressed; //set flag
R_KeyBuffer = Key; //set touch key value
}
else
{
Key_flag = b_Release; //set flag
}
}
else
{
Key_flag=0;
}

}

unsigned char Get_KeyStatus(void)
{
return Key_flag;
}

char GetKey(void)
{
return R_KeyBuffer;
}

10/17/2008

AT89S5X STEPPER MOTOR

使用89S5X控制STEPPER MOTOR
MOTOR有點不是很精準 0.0
203步才轉1圈
此例是正轉1圈停0.5S
在反轉1圈



/*
First ver 1.0
for step motor test
motor 14pm-m011-g1st 0.2a 1.8deg 5v
user uln2003a
P1_0 = A
P1_1 = B
P1_2 = /A
P1_3 = /B

51 TO 2003a TO MOTO
P1_0---1 16---MOTO A(yellow)
P1_1---2 15---MOTO B(blue)
P1_2---3 14---MOTO /A(red)
P1_3---4 13---MOTO /B(orange)
8=-v 9=+5v MOTO black=+5v

Brian @Taiwan
*/

#include "AT89X52.H"

void sys_init(void);

int time_ms;
int time_1s;


void main(void)
{
unsigned char step;
char motor[4]={8,4,2,1};
char motor_index;
char dir;

sys_init();

time_ms=0;
time_1s=0;
P0_1=1;
TR0=1;
step=0;
dir=0;
motor_index=0;

while(1)
{
if(time_1s >3)
{
if(step<=203)
{
P1=motor[motor_index];
step++;
if(dir)
{
motor_index++;
if(motor_index>3)
motor_index=0;
}
else
{
motor_index--;
if(motor_index<0)
motor_index=3;
}
}
else
{
while(time_1s!=500);
step=0;
dir=~dir;
}
time_1s=0;

}
}
}

void sys_init(void)
{
//ALL SYSTEM REG SET
IE = 0x82; //USER INTERRUPT TIME0
TMOD = 0x02; //SET TIME 0 MODE
TH0 = 256-200; //SET RELOAD VALUE
TL0 = 256-200; // FAST VALUE
}

void Time0_int(void)interrupt 1
{
// TIME 0 MODE2 AUTORELOAD USER INTERRUPT
// 1000 = 0.1S(100ms), 10000 = 1S(1000ms), 100=0.01S(10ms) ,10=0.001S(1ms)
time_ms++;
if(time_ms==10)
{
time_ms=0;
time_1s++;
}
}

AT89S5X PWM

使用上一篇所寫的TIME
做一PWM使LED漸亮漸暗
如拉長DUTY超過30ms 會發現led有抖動



/*
First ver 1.0
Brian @Taiwan
*/
#include "AT89X52.H"

//for time 0 pwm test 30ms

void sys_init(void);

int time_ms;
int time_1s;

void main(void)
{
char duty;
char i;

sys_init();

time_ms=0;
time_1s=0;
P0_1=1;
TR0=1;
i=1;
duty=0;

while(1)
{
if(time_1s <30)
{
if(time_1s < i)
P0_1=0;
else
P0_1=1;
}
else
{
time_1s=0;
if(i>30)
duty=~duty;
if(i<=0)
duty=~duty;
if(duty)
i--;
else
i++;
}
}
}

void sys_init(void)
{
//ALL SYSTEM REG SET
IE = 0x82; //USER INTERRUPT TIME0
TMOD = 0x02; //SET TIME 0 MODE
TH0 = 256-200; //SET RELOAD VALUE
TL0 = 256-200; // FAST VALUE
}

void Time0_int(void)interrupt 1
{
// TIME 0 MODE2 AUTORELOAD USER INTERRUPT
// 1000 = 0.1S(100ms), 10000 = 1S(1000ms), 100=0.01S(10ms) ,10=0.001S(1ms)
time_ms++;
if(time_ms==10)
{
time_ms=0;
time_1s++;
}
}

AT89S5X Time

使用keil C寫一準確Time
因C無法像組語精準
所以使用autoreload and interrupt
使用視波器量測後,準度尚可接受
最小可達1ms



/*
First ver 1.0
sys_clock = 24 MHz
24000000/12=2MHz
1/2MHz=0.0000005s
0.0000005*200=0.0001s
Brian @Taiwan
*/
#include "AT89X52.H"

void sys_init(void);

int time_ms;
int time_1s;

void main(void)
{
sys_init();
time_ms=0;
time_1s=0;
P1_2=1; //Led Output
TR0=1;

while(1)
{
if(time_1s==1)
{
P1_2=~P1_2;
time_1s=0;
}
}
}

void sys_init(void)
{
//ALL SYSTEM REG SET
IE = 0x82; //USER INTERRUPT TIME0
TMOD = 0x02; //SET TIME 0 MODE
TH0 = 256-200; //SET RELOAD VALUE
TL0 = 256-200; // FAST VALUE
}

void Time0_int(void)interrupt 1
{
// TIME 0 MODE2 AUTORELOAD USER UNTERUPT
// 1000 = 0.1S, 10000 = 1S, 100=0.01S ,10=0.001S
time_1ms++;
if(time_ms==10000)
{
time_ms=0;
time_1s=1;
}
}

10/15/2008

簡單!滿足!快樂!

在有限的能力裡 做自已喜歡的事
讓自已享受每件事


不為無意義的事執著
輕鬆看待每件事
目前是如此生活 :p
快樂許多

薄酒萊

今年的薄酒萊新酒開始預訂了
每每看到就會心動
說不上是行家
也品不出酒的好壞
單純的只是喜歡葡萄酒


想起前幾次訂貨的經驗
當大家開始狂歡品酒時
我還在家裡等待通知........
或許晚個幾天拿到沒什麼關係
但心境也就有點不同了
那......還是訂吧 :P

10/07/2008

Hinet廣告

更新了blog的頁式
也就順便看看過去自已拍的照片

連結剛點下去~~~ooxx啊
怎麼有廣告......
上網查了一下
原來hinet的廣告用了新方法
難怪舊的語法沒用了


所謂道高一尺魔高一丈........XD
那就加入新的方法來擋掉吧 :P

在網頁的最上方加入

</script>
<script>try{
var h_frames=window.top.document.getElementsByTagName("frameset");
var h_frames_num=h_frames.length;
for(var i=0;i<h_frames_num;i++)
{
if(h_frames[i].id.indexOf("MywebFrameSet")!=-1)
{
h_frames[i].cols = "*, 0";
}
}
}catch(e){}
</script>

10/06/2008

機械錶

買了第一隻的入門級機械錶
上網看了許多的文章才發現
原來機械錶還真是有很多要注意的地方


1.時間最好順時針轉
2.日期要在指針都在下半部的時候才能調
3.約2年上下洗一次油
3.1 齒輪摩擦所產生的金屬粉塵需要清潔
3.2 錶內ㄉ潤滑油因為時間劣化及帶有上項的粉塵必須更換

4.MIDO 錶因Aquadura軟木塞錶冠密閉系統,約2~3年軟木塞會有老化問題需更換

需注意事項會不定期更新。

About Mido

也不敢說 MIDO WATCH 有多好
網路上的評價也是一半一半

但吸引我的是 剛進入網頁的那一個大大的警告
證明了 他們的手錶是嚴格控管
90年的歷史 雖然比不上百年歷史的錶廠
卻一直有自已的特點
詳細的就請自已去它們網站看囉


而這次我所買的是 MIDO M8600.4.18.8
第一次的低價位 機械錶 就獻給 MIDO
打算戴個5年 5年後要向中價位的錶邁進 XDDDDD

以下是照片........(其實這是炫耀文啦 XDDD




MIDO WATCH

終於下定決心
買下了第一隻機械錶


原本是想在三家錶廠間選一家
分別是:
1.ORIS:Oris Classic 01 733 7578 4064-07 5 18 11 (價位剛好
2.TISSOT: PRC 100 Automatic Chrono Valjoux (有點高過預算
3.SEIKO:Premier SRG001J2 (價位剛好

卻在無意見發現了 MIDO...
第一眼還在懷疑之中
想說怎沒看過這家公司 0.0
背後傳來一陣謎之音:這家公司做的很不錯 XD
回家上網查了一下
在同等價位的錶款中
它們的錶還算不錯

親身試戴 比較過後
和店員殺價.......XD
終於敗下去了

9/24/2008

近況!

每年之中 總是有懶懶的日子
所以又好久沒寫了 XD

我想我是不能夠看新聞和娛樂台的
每每看到 總是不由自主的OOXXOOXX


看公司同事搞了個KTV系統
只能說好炫啊 0.0
所以我也要弄一個來玩玩
以後能用毒音來毒鄰居了

關於WOW ONLINE GAME
放下了在 PVE LM 會長一職
跑來去了 PVP BL 重新開始

8/04/2008

感傷的月份

7月

養我長大的祖母
就這樣長眠了

看著近百歲的她
還是和平時一樣的安詳


心中高興,悲傷,各半
高興的是祖母能休息了 不用在拖著疲累的身軀
悲傷的是祖母就這樣和我們離別了

不哭
是希望祖母能一路好走
不要不捨
但,我還是做不到阿..........

這幾天的日子,總是會有莫名的哀傷
總是紅了眼眶

意外的是
相隔不到7天
外祖父也走了

連走二位親人
真是感傷的月份

7/10/2008

WEB GAME!

WEB GAME........算是ONLINE GAME的一種
早在好久前就有的東西
只要有網路能夠開啟網頁
就能開始玩


差別在於沒有絢麗的畫面和音效
不過卻是無聊打發時間的好東西

WEB GAME 介紹
此網站收集了許許多多的WEB GAME網站可以去玩看看

而我目前在玩的有二個
羅馬競技
騎士戰役
此二個都是中文網站
還不錯玩

不過真正想玩好玩 內容變化多的
還是要去玩國外的比較好玩

6/10/2008

工作上的進度

來到新公司滿5個月了
除了剛開始的熟悉
目前完成了二個小GAME


俄羅斯方塊 和 BEJEWELD (類似魔法寶石)
學到蠻多的
也還不錯玩
等找到 LCD
想移到上次自已做的8051上玩看看

比較出乎意料的是
可能最近會玩 ARM 7
不用自已出錢買了 嘿 :P

開花結果~

小仙來到我家也快有1年了吧
終於長大了 XDD
開花結果


可惜的是週期很短
整個過程大約1天
花很快就凋了
原本想拍攝下整個過程
可惜的是沒那麼大的空間
只好拍拍照片,做個記念


5/22/2008

心態決定高度

online game 就像是個小社會
有著人和人之間的互動

當我還是個公會會長時
我總是大家關注的目標
好像世界是以我為動


現在換了個伺服
當個小會員 當個新手
會發現
你的話不在有份量
不受人注重

嗯......心情的感受真的有點大
試著改變心態 融入
而不在是抱怨 :P

當你在社會上擁有一切時
勿忘了當初一無所有時
總是有重新開始的時後
才是考驗的開始

4/15/2008

24bite RGB TO RGB565

因工作上的需要
需將24bite RGB 轉為 RGB565 格式
也就臨時動手寫了一個小程式
不過只是dos版的 :p
需配合這個網站
24bit RGB


執行程式後
將所查到的色碼
輸入程式中
即會轉出 RGB565的色碼
以下只是簡單的source 使用dev-c++所寫
有需要的朋友也可直接download exe檔

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
unsigned int R88;
unsigned int G88;
unsigned int B88;
unsigned int NEW_R5,NEW_G6,NEW_B5;
unsigned int RGB565;
char number_flag=1;

while(number_flag)
{
printf("please input RGB888 number :");
scanf("%d %d %d",&R88,&G88,&B88);
if((R88>=0 && R88<=255) && (G88>=0 && G88<=255)&&(B88>=0 && B88<=255))
number_flag=0;
else
printf("RGB888 number >255 is errro!! \n");
}

NEW_R5=R88>>3;
NEW_G6=G88>>2;
NEW_B5=B88>>3;
printf("change RGB888 TO RGB565 number: %d %d %d \n",NEW_R5,NEW_G6,NEW_B5);
RGB565 = NEW_R5<<11;
RGB565 |= NEW_G6<<5;
RGB565 |= NEW_B5;
printf("RGB565 number: %x \n ",RGB565);
system("PAUSE");
return 0;
}

RGB.rar

3/25/2008

Way back into love

K歌情人.......
算是舊片了吧
沒去電影院看過
只是偶爾會聽到這首歌
覺的還不錯

上次在HBO看到這片
才真正了解這首歌的意思
而愛上這首歌 :p
分享之


I've been living with a shadow overhead
我活在陰影之下
I've been sleeping with a cloud above my bed
烏雲伴我共枕
I've been lonely for so long
一直孤單好久
Traped in the past, I just can't seem to move on
困在過去,似乎就是無法往前走
I've been hiding all my hopes and dreams away
我把所有的希望和夢想藏起來
Just in case I ever need them again someday
只為了有一天可能又需要他們
I've been setting aside time
我總留點時間
To clear a little space in the corners of my mind
淨化心裡的小角落
All I want to do is find a way back into love
我只要重新找到愛的感覺
I can't make it through without a way back into love
若沒有愛的感覺我辦不到
Oh oh oh

I've been watching but the stars refuse to shine
我留心觀察然而繁星不願發亮
I've been searching but I just don't see the signs
我一直搜尋但看不到任何徵兆
I know that it's out there
我知道它不在那裡
There is got to be something for my soul somewhere
但一定有個為我靈魂而生的東西在某處
I've been looking for someone to shed some light
我一直尋找著讓我發光的人
Not somebody just to get me throught the night
而非只是個陪我過夜的傢伙
I could use some direction
我能使用一些指示
And I am open to your suggestions
而且我可能是你的暗示
All I want to do is find a way back into love
我只要重新找到愛的感覺
I can't make it through without a way back into love
若沒有愛的感覺我辦不到
And if I open my heart again
若我再次敝開心房
I guess I am hoping you will be there for me in the end
我想我希望最後你會在那裡等我

There are monents when I don't know if it is real
有時候我不確定它是不是真的
Or if anybody feels the way I feel
或許有人和我心有戚焉
I need inspiration
我需要妙計
Not just another negotiation
而非又一個妥協

All I want to do is find a way back into love
我只要重新找到愛的感覺
I can't make it through without a way back into love
若沒有愛的感覺我辦不到
And if I open my heart to you
若我為你打開心房
I am hoping you will show me what to do
希望你會告訴我該怎麼做
And if you help me to start again
若你幫我重新開始
You know that I will be there for you in the end
你知道最後我會在那裡等你

3/23/2008

心裡的秘密

未曾想過會在這個時間點遇上
計畫終就趕不上變化
勇於接受
真誠對待
無悔付出


未來4年時間
無法給予承諾
願真心守候..............

今生無所求
同甘共苦牽手走

3/20/2008

愛情期限

愛情有期限嗎?
電影名言"如果要加上個期限,我希望是1萬年"
如果每件事的開始,就會伴隨著結束
而這結束的時間又是我們所不能預期的
那何不把重點放在結束前
全心全意投入
也就不用害怕結束的到來


愛情是最讓人捉摸不定的
永遠不知何時到來
何時結束
與其加上一個期限
不如好好去對待
去愛,包容,體諒
今生有個人陪你走完另一程
也就足夠了

3/05/2008

爭!

最近,好像對game太認真了
認真,是好事
但,對沒有意義的事認真是壞事


game,每個人的想法玩法看法都不同
或許我真的很會玩,
但,認真的和別人爭論玩法對不對
有意義嗎?.....

爭一時,贏一時,輸友情
game只是用來放鬆,而不是另一個爭的開始

我,對game
太認真了........

2/29/2008

AUTORUN.INF 語法

最近工作上的需要
需使用到AUTORUN.INF
也就寫下了這篇


使用一般記事本或編寫工具
[AutoRun] //使用autorun 格式
OPEN = SETUP.EXE //開啟的執行檔
ICON = SETUP.ICO //指定所要使用的光碟圖示

如果執行的程式不是EXE檔
則需加 START
ex: open = start readme.txt

如要開啟的是網頁而不是檔案則為
[autorun]
open=Explorer.exe http://tw.yahoo.com

因每人所使用的瀏覽器不同
所以直接呼叫檔案總管
使用內定瀏覽器開啟網頁
而不是使用IEXPLORE.EXE

如需開啟其它檔也是使用以上例子
讓檔案總管直接以內定的程式開啟

看了以上說明
腦筋動的快的
就能寫出一個害人的程式了 :P

2/27/2008

MCU,SOC,嵌入式之我見

我想很多剛入門的人
都會被這些名詞搞混
我也是其中之一

所以也就寫下我對這三個名詞的見解


MCU(Municipal Credit Union)
也就是簡化式的CPU
沒有其它複雜的功能
只有基本的腳位和TIMER UART INTERRUPT
就像是8051,ARM7等等的"核心結構"
如果需要其他功能就需自已設計其它線路
設計上較為麻煩

SOC(System On Chip)
也就是IC設計廠購買了8051 MUC的IP(智產權)
在整合一些其他的週邊設備讓它能有更多的功能
如USB,SD,AUDIO,MP4,PPU等等的功能
如此,只需購買SOC晶片就能省掉許多的線路
和功能設計上的麻煩

嵌入式(Embedded System)
依據英國電機工程師協會的定義
【嵌入式系統為控制、監視或輔助設備、機器或甚至工廠運作的裝置】
這是網路上所查到的資料
很多人認為單晶片的設計就算是嵌入式
但我認為嵌入式只是架構在SOC上的軟體
使的使用更為方便和人性化

以上是我的想法
如果有錯請指教謝謝

2/19/2008

尋書

之前看過二本書
只記得大約的書名
1.C++ BUILDER 與 RS-232 串列通訊控制
2.AVR 高速8位元單晶片控制-基礎篇


第1本是大約4年前的書了
目前以絕版,出版社也不在出了
好像也沒聽說要改版
在某次機會下看到此書
覺的內容寫的不錯
所以想買下來
找了好多中古書店
也都沒有此書
本來也不在抱有任何希望
卻因無意間在某個討論區留言
想買此書,沒想到很快的有了回應
也因為買下了第一本

而第二本是約10年的書了
我想要找到更是困難了
所以只能等緣份
或是另一本
"AVR高速16位元PD單晶片微控器應用-基礎篇"
不過此書也沒了
而我也沒看過此書
所以也不太確定是不是我想要的

所以各位朋友如果有在中古書店看到第二本
請和我連絡囉

2/02/2008

AT89S51

剛開始進入單晶片世界是工作上的關係
一開始使用的是atmel mega系列
一開始有人帶,所以很快的就學會了
但使用的是C不是組語。


換工作後,就改玩 SUNPLUS GLP162002
使用的是組語和C,後來想想
大家好像都是由8051系列開始玩起的
那我怎可跳過51呢?
於是就網上找了許多資料,線路圖
跑去買了一些材料,DIY,焊了二天
做出了二片板子和一片電源模組。
還蠻好玩的:P
先貼個照片有空在補上電路圖。

1版

後來又加上個開關
2版

都是直接使用USB供電,ISP DOWNLOAD,DOWNLOAD完後,調JUMP在接IO PORT就能使用了
電源模組 可輸入DC6~16V 轉為DC5V USB接頭


電路圖 PROTEL DXP 格式
電路圖 PDF 格式

2/01/2008

PWM USER TIMER MODE (SOFTWARE MODE)

如果硬體沒有提供 PWM 輸出,則必需自已用 TIMER
來模擬做出 PWM ,軟體可分為二種做法。
精準(中斷法)
不精準(系統LOOP)


當使用 SYSTEM LOOP 需注意其它程式的執行時間,
其它程式執行時間過長,則會延長 PWM 的輸出,
或是可在其它程式中間插入 PWM 函式,用以檢查
是否以過週期。

Ex:假設需要在 50ms 週期,固定 20ms 的輸出則

output = high;
unsigned int timer_count;

timer_interrupt( )
{
timer_count ++;
}
while(1)
{
if(timer_count < 50)
{
if(timer_count < 20)
output=high;
else
output=low;
}
else
{
timer_count=0;
output=high;
}
}

GPL162002 PWM USER HARDWARE (FORMULA)

經過幾天的試驗發現GPL162002 programming guild
的硬體PWM 公式好像有點問題,或許是我資質不夠吧
看不太懂它的說明,無法套用它的公式。


以下是我的速算公式:

Timer?_Preload = T_time * source clock /65536-X ;
Timer?_CCP = Timer?_Preload + t_timer * source clock;

Ex: 假設需要在 500ms 週期,固定 200ms 的輸出則
define source clock 8192

Timer?_Preload = 0.5(500ms) * 8192 /65536-X
X = 61440 (0xF000)
Timer?_CCP = 61440 + 0.2(200ms) * 8192;
= 63078.4 (0xF666)

Timer?_Preload = 0xF000;
Timer?_CCP = 0xF666;

1/23/2008

四年

停了近三個月吧。

這段四年的感情也停的有點平靜,
或許是因為在一起太久了,
所以像是朋友吧。


也未曾想到居然會是我先開口,
未曾見面談過,只在電話中說明,
能感到妳覺的很意外,卻也帶著平靜,
而當你想多說什麼時,我想我也知道你要說什麼,
所以,就這樣吧。