新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 單片機通用模擬串口C程序

        單片機通用模擬串口C程序

        作者: 時間:2013-03-15 來源:網(wǎng)絡 收藏

          //-------------------------------------------------------------------------------------------------------

          // 函數(shù)名稱: idle

          // 功能說明: 等待定時器中斷時的執(zhí)行程序,與具體應用有關

          //--------------------------------------------------------------------------------------------------------

          void idle()

          {

          }

          //-------------------------------------------------------------------------------------------------------

          // 函數(shù)名稱: timer_isr

          // 功能說明: 中斷處理函數(shù),與硬件無關,通用函數(shù)

          //--------------------------------------------------------------------------------------------------------

          void timer_isr(void) /*中斷服務程序*/

          {

          char mask, start_bit, flag_in;

          //發(fā)送程序

          if ( flag_tx_ready )

          {

          if ( --timer_tx_ctr=0 )

          {

          mask = internal_tx_buffer1;

          internal_tx_buffer >>= 1;

          if ( mask )

          {

          set_tx_pin_high();

          }

          else

          {

          set_tx_pin_low();

          }

          timer_tx_ctr = 3;

          if ( --bits_left_in_tx=0 )

          {

          flag_tx_ready = FALSE;

          }

          }

          }

          // 接收程序

          if ( flag_rx_off==FALSE )

          {

          if ( flag_rx_waiting_for_stop_bit )

          {

          if ( --timer_rx_ctr=0 )

          {

          flag_rx_waiting_for_stop_bit = FALSE;

          flag_rx_ready = FALSE;

          internal_rx_buffer = 0xFF;

          if ( internal_rx_buffer!=0xC2 )

          {

          inbuf[qin] = internal_rx_buffer;

          if ( ++qin>=IN_BUF_SIZE )

          {

          qin = 0;

          }

          }

          }

          }

          else // rx_test_busy接收忙

          {

          if ( flag_rx_ready==FALSE )

          {

          start_bit = get_rx_pin_status();

          // 判斷起始位

          if ( start_bit==0 )

          {

          flag_rx_ready = TRUE;

          internal_rx_buffer = 0;

          timer_rx_ctr = 4;

          bits_left_in_rx =

          rx_num_of_bits;

          rx_mask = 1;

          }

          }

          else

          {

          if ( --timer_rx_ctr=0 )

          {

          timer_rx_ctr = 3;

          flag_in =

          get_rx_pin_status();

          if ( flag_in )

          {

          internal_rx_buffer |= rx_mask;

          }

          rx_mask = 1;

          if ( --bits_left_in_rx=0 )

          {

          flag_rx_waiting_for_stop_bit = TRUE;

          }

          }

          }

          }

          }

          }



        評論


        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 云霄县| 福清市| 米脂县| 江川县| 青海省| 繁昌县| 吉木乃县| 丽水市| 道真| 靖宇县| 宿州市| 玉山县| 从化市| 宜都市| 淮南市| 娱乐| 乌恰县| 米泉市| 名山县| 乐陵市| 黎城县| 沙田区| 那坡县| 霍林郭勒市| 乃东县| 社旗县| 南昌市| 左贡县| 静海县| 玛多县| 怀集县| 兴化市| 筠连县| 沧州市| 绩溪县| 德化县| 滨州市| 米林县| 龙里县| 祥云县| 黄平县|