冰楓論壇

 找回密碼
 立即註冊
搜索
查看: 641|回覆: 0
打印 上一主題 下一主題

[討論] MB9XFxxx

[複製鏈接]

2609

主題

0

好友

1004

積分

金牌會員

Rank: 6Rank: 6

UID
373967
帖子
9013
主題
2609
精華
0
積分
1004
楓幣
0
威望
981
存款
35926
贊助金額
0
推廣
0
GP
1205
閱讀權限
70
在線時間
460 小時
註冊時間
2023-1-12
最後登入
2024-12-23

2023端午節紀念勳章 2023中秋節紀念勳章 2023聖誕節紀念勳章

跳轉到指定樓層
1
發表於 2023-4-12 21:05:10 |只看該作者 |倒序瀏覽
MB9XFxxx 微控制器也可以使用 C 語言編寫 PLC 程序。

以下是一個示例程序,實現了讀取 ADC 輸入並將其輸出到串口:

c

#include "mb9xfxxx.h"
#include "mb9xfxxx_lib.h"
#include "stdio.h"

#define ADC_CH 1
#define ADC_GRP 0

#define USART_TX_PIN 5
#define USART_RX_PIN 4
#define USART_BASE USART0

static void adc_init(void)
{
    // Enable ADC clock
    MFS_ADC_SetDiv(ADC_GRP, 3);     // 80MHz/8 = 10MHz
    MFS_ADC_SetPriority(ADC_GRP, 3); // Highest priority
    MFS_ADC_Enable(ADC_GRP);

    // Set ADC trigger source as software
    MFS_ADC_SetTriggerSrc(ADC_GRP, ADC_TRIGGER_SW);

    // Configure ADC channel
    MFS_ADC_CH_InitTypeDef adc_ch_init;
    adc_ch_init.mode = ADC_CH_MODE_SINGLE;
    adc_ch_init.input = ADC_CH_INPUT_ANx(ADC_CH);
    adc_ch_init.align = ADC_CH_ALIGN_RIGHT;
    adc_ch_init.ref_sel = ADC_CH_REF_SEL_INTERNAL;
    MFS_ADC_CH_Init(ADC_GRP, &adc_ch_init);
}

static void usart_init(void)
{
    // Enable USART clock
    MFS_USART_SetDiv(USART_BASE, 2);     // 80MHz/2 = 40MHz
    MFS_USART_Enable(USART_BASE);

    // Configure USART pins
    MFS_PIN_Config(USART_TX_PIN, MFS_PIN_MODE_TXD, MFS_PIN_PULL_UP);
    MFS_PIN_Config(USART_RX_PIN, MFS_PIN_MODE_RXD, MFS_PIN_PULL_UP);

    // Configure USART
    MFS_USART_InitTypeDef usart_init;
    usart_init.baudrate = 115200;
    usart_init.word_len = USART_DATALEN_8BIT;
    usart_init.stop_bit = USART_STOPBIT_1;
    usart_init.parity = USART_PARITY_NONE;
    usart_init.clk_mode = USART_CLKMODE_DISABLE;
    usart_init.tmode = USART_TMODE_TX_RX;
    usart_init.txfifo_ctrl = USART_TXFIFO_CTRL_DISABLE;
    usart_init.rxfifo_ctrl = USART_RXFIFO_CTRL_DISABLE;
    MFS_USART_Init(USART_BASE, &usart_init);
}

int main(void)
{
    adc_init();
    usart_init();

    while (1) {
        // Start ADC conversion
        MFS_ADC_CH_StartConversion(ADC_GRP);

        // Wait for conversion complete
        while (MFS_ADC_CH_GetConversionStatus(ADC_GRP) != ADC_CH_CONV_STATUS_COMPLETED);

        // Read ADC result
        uint16_t adc_value = MFS_ADC_CH_GetResult(ADC_GRP);

        // Print ADC value to USART
        char buf[32];
        snprintf(buf, sizeof(buf), "ADC value: %d\r\n", adc_value);
        MFS_USART_WriteData(USART_BASE, buf, strlen(buf));
    }

    return 0;
}
該程序使用 MB9XFxxx 的 ADC 模塊讀取 ADC 輸入,並使用 USART0 模塊將 ADC 值輸出到串口。

程序中還使用了 MFS_ADC_SetDiv()、MFS_ADC_SetPriority() 和 MFS_ADC_CH_Init() 等函數初始化 ADC 模塊,以及 MFS_USART_SetDiv()、MFS_PIN_Config() 和 MFS_USART_Init() 等函數初始化 USART 模塊。
收藏收藏0 推0 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1鑰匙
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們管群招募本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-12-24 01:30

回頂部