2013年5月6日 星期一

簡單的絕對值轉換 c


#include

int main (void)
{
int a;
//puts("請輸入整數:");
printf("請輸入整數:"); scanf("%d",&a);
//printf("整數b:"); scanf("%f",&b);

if(a>0)
{
printf("其絕對值為: %d \n",a);
return (1);
}
else
{
printf("其絕對值為: %d \n",-a);
return (2);
}
return (0);
}

或者使用c的標準函式庫 math.h中的cabs函式

C 取值到小數點第二位,並將各數字存到個別變數

#include
#include

int main(void)
{
int i,j,k,l,a;
float y=123.5223454;
        /*取到小數點後二位*/
       a=(double)(int)(y*100)/100;
       
        /*個別存數字至變數*/
i=(int)y/10;
j=(int)y%10;
k=(int)(y*10)%10;
l=(int)(y*100)%10;
printf("W=%d\n",i);
printf("X=%d\n",j);
printf("Y=%d\n",k);
printf("Z=%d\n",l);
return(0);
}

2013年4月21日 星期日

STM8 Uart接收的問題

中斷過程中,最好等資料都收集完成,在監控
如果在中斷中監控,資料會有遺失的問題
****stm8 uart  字串接收副程式****

uint8_t IncrementVar_RxCounter1(void) { return RxCounter1++; }

u8 uart1_sync=0;  //要設定全域變數,不然case1 進不去.

 INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{
u8 data,;
//RxBuffer[IncrementVar_RxCounter1()]
UART1_ClearITPendingBit(UART1_IT_RXNE_OR);
data=UART1_ReceiveData8();

switch(uart1_sync)      
{
case 1:        
RxBuffer[IncrementVar_RxCounter1()]= data;
//uart1_in_temp_index %= UART1_BUF_SIZE;
if(data==0x0d)            
{
RxBuffer[IncrementVar_RxCounter1()] =data;
 //uart1_in_temp_index %= UART1_BUF_SIZE;
 RxCounter1 = 0x00;
 uart1_sync = 0;
}
break;
default:
switch(data)            
case '%':
uart1_sync = 1;
RxBuffer[IncrementVar_RxCounter1()] = data;
//uart1_in_temp_index %= UART1_BUF_SIZE;
break;
break;
}
}
****stm8 uart  字串傳輸副程式****

void UART1_SendByte(u8 Data)
{
UART1_SendData8((unsigned char)Data);
while (UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET);
{
}
}

void UART1_SendString(u8* Data,u16 len)
{
u16 i=0;
for(;i {
UART1_SendByte(Data[i]);
  }
}

2013年4月18日 星期四

C 字串比較程式 ,可使用陣列去比較

STM8的範例 擷取出來的
/**
  * @brief Compares two buffers.
  * @param[in] pBuffer1 First buffer to be compared.
  * @param[in] pBuffer2 Second buffer to be compared.
  * @param[in] BufferLength Buffer's length
  * @retval TestStatus Status of buffer comparison
  * - PASSED: pBuffer1 identical to pBuffer2
  * - FAILED: pBuffer1 differs from pBuffer2
  * @par Required preconditions:
  * None
  */
TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength)
{
    while (BufferLength--)
    {
        if (*pBuffer1 != *pBuffer2)
        {
            return FAILED;
        }

        pBuffer1++;
        pBuffer2++;
    }

    return PASSED;
}

2013年4月15日 星期一

stm8 計時中斷需知 設定

例如以tim4 說明
記得在計時中斷程式 一開始要先將TIM4_SR的UIF bit設成零 ,這樣計時才不會錯誤

2013年4月1日 星期一

PLC FX 如何連接 MCU

打算要透過FX上面一個8PIN的介面和透過MCU的UART做溝通
但是去查了相關資訊 那個8PIN的介面是屬於RS422,這一般工業控制上常會用到
比如阿坤做的模擬器 以及書宏後來眼身的機器 都是使用一條8轉25PIN,再搭配一個RS422轉RS232的硬體介面(25PIN 轉25PIN),就個人猜測可能是MAX485 以及MAX232 
先將PLC的訊號介面RS422 轉換成TTL的類型,然後再轉換成RS232,來讓PC可以溝通.

所以這時候如果PLC要接到MCU,只要可以將RS422轉換成TTL的類型,就可透過內部的UART 溝通了.

另外這一條RS422轉RS232的硬體介面也太好賺了吧.我算一算成本價也才200而已吧!!
竟然可以賣到一千多塊還真是坑人!!

2013年1月13日 星期日

關鍵對話 重點

我們面臨前所未有的十字路口,一條通往絕望,一條通往徹底的毀滅.讓我們祈禱自己有足夠的智慧做出正確的抉擇.   伍迪 艾倫

從心開始  專注你想要的

從我開始---記住,你可以控制的人只有你自己一人

專注於你真正想要的--當你發現自己逐漸沉默,或有訴諸語言暴力的衝動時,停下來將注意力放在你的動機上
               從我的行為上顯示,我的動機是什麼??
               釐清你真正想要的  我要我自己做什麼?要他人做什麼?要這段關係做什麼??
               最後問問自己:如果這是我想要的 我應該如何表現??

拒絕非A即B的選擇
               當你考慮清楚自己想要的事物後,千萬不要掉入非A即B的選擇
               觀察自己,是否有告訴自己要在和平與誠實之間做選擇,在贏或輸之間做選擇
              尋找兩全其美的A與B同時存在,打破所有非A即B的選擇
              釐清你不想要的有哪些,將他加入你的清單中,接著要求你的大腦開始尋找健康的方式來開啟對話

學習觀察-如何注意何時安全出現危機
學習發現關鍵對話的開端
學習尋找出安全問題的警訊
        如果是安全的情況你可以暢所欲言但是不要讓安全的問題將你帶離軌道
         對話需要語意的流動
沉默與語言暴力
沉默型式包含掩飾,避免,撤退
語言暴力包含控制,貼標籤,攻擊

學習注意內容與狀況
尋找事情變的關鍵的時點
學習尋找安全亮起紅燈的警訊
觀察其他人是否有往沉默以及語言暴力的傾向
尋找你壓力風格的爆發點

保持安全---如何創造暢所欲言的安全氛圍

後退一步

決定出在哪些狀況中,安全瀕臨危險邊緣
        共同目的:其他人是否相信你在乎他們在這場對話中的目的??他們是否信任你的動機
        共同尊重:其他人是否相信你是尊重他們的

適時道歉
        如果你明顯違反了尊重原則,記得道歉

運用對比法
       當其他人誤會你的目的或意圖時,使用對比法由你[ 不想 ]或 [ 沒有...........的意思]開始
,接著在解釋你真正想要的或實際的意圖

以CRIB法獲取共同目的
承諾(Commit)尋找目的
確認(Recognize)尋找共同目的
發明(Invent)出共同目的
腦力激盪(Brainstorm)構思新策略

主導我的故事-
如果強烈的情緒將你困在[沉默]或[語言暴力]之中,試試以下方法
追朔你的行為路徑
         注意你的行為.如果你發現自己從對話中離開,問問你自己到底在做什麼
         我現在是不是處在某種形式的沉默或語言暴力之中??
         與你現在的感覺保持聯繫.學習準確的找出你故事背後所隱含的的情緒.
         什麼樣的情緒促使我有這樣的行為表現??
         分析你的故事.質疑你自己的結論,並且尋找故事背後其他可能的解釋.
         是什麼樣的故事讓我產生這些情緒??
         回到現實.將事實與你編造的故事區分開來,放棄你對自己故事的絕對堅持
         我有什麼證據可以支持我的故事?
         尋找巧妙的故事.受害者,壞人以及無助者故事事最常見的故事類型
說出故事的其餘部分
問問自己:我是不是假裝沒有注意到自己在問題中所扮演的角色
為什麼一個講理明理而正派的人會這樣?
我真正要的是什麼?
如果我真的想要這些結果,我此刻應該做些什麼??

用STATE法陳述路徑--如何以有說服力而非惱人的方式說話
分享(Share)你的事實.由你的行為路徑中,最不具異議,最有說服力的部分開始說起
說出(Tell)你的故事.解釋你開始做了什麼樣的推論.
邀請(Ask)他人表達他們的行為路徑.鼓勵其他人分享他們的故事以及事實.
嘗試性的進行談論(Talk).將你的故事當作一個[故事]來陳述,不要將它假裝為事實.
鼓勵(Encourage)他人嘗試分享.保持安全氛圍,讓其他人也能夠表達不同,甚至相反的意見.

追溯他人的路徑
為了鼓勵語意的自由流動,避免他們掉入[沉默]或事[暴力語言],必須追溯他們的行為路徑.從好奇且耐煩的態度開始,這將可以協助你重建安全氛圍.
接著使用具有威力的傾聽技巧來探索他人通往行動的路徑.
邀請(Ask)他人分享.首先,表達出對其他人觀點的興趣.
反射(Mirror).尊重地接收他人嘗試表達的情緒,藉此增加安全氛圍.
釋義(Paraphrase).當其他人開始分享他或他的故事時,將你聽到的話重述整理,向對方顯示你的了解,而且讓他們感覺到與你分享他們的想法是安全的.
猜測語意(Prime).如果對方持續有所保留.你可以猜測語意.盡你所能的去猜測他們可能有的想法及感受.

當你開始分享你的觀點,記得做到:
同意(Agree).當你同意時,適時將你的同意表達出來.
補充(Build):如果對方故是中有所遺漏,對你同意的部分表示同意,並且進行補充.
比較(Compare):當你們的看法有顯著的不同時,不要暗示別人是錯的,必須比較雙方的觀點與想法

開始行動
將你的成功的關鍵對話轉變為絕佳的的決策以及一致的行動,切記要避免[違反期望]與[無所作為]兩種陷阱

決定[如何]決定
命令:決策的行程沒有其他人參與
諮詢:遊團體收集資訊,並由其中一小部分的人做決定
投票:有團體中某比例的人數同意來決定決策
共識:每位成員都同意,並且支持最後的決策

清楚地結束
決定誰在什麼時候做哪些事,講上述事項清楚傳遞.訂出一個後續追蹤的時間,記錄大家承諾的事項,並且持續追蹤.最後,讓人們對自己做出的承諾負責.

好記性比不是爛筆頭