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而已吧!!
竟然可以賣到一千多塊還真是坑人!!