国产成人av人人爽人人澡-亚洲国产日韩欧美一区-好吊日视频这里只有精品-日本高清精品视频在线

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當(dāng)前位置:首頁 >> 技術(shù)中心 >> 單片機(jī)入門 >> 新唐M051如何自制GPIO簡化設(shè)置宏函數(shù)

新唐M051如何自制GPIO簡化設(shè)置宏函數(shù)

關(guān)鍵字:新唐單片機(jī) M0單片機(jī) GPIO設(shè)置 作者:admin 來源: 發(fā)布時(shí)間:2018-12-27  瀏覽:26
近期因?yàn)楣ぷ黜?xiàng)目開始真正的使用上新唐M051,開始領(lǐng)會(huì)到新唐M0尤其是M051的魅力所在,并深刻了解到官方的良苦用心。體會(huì)了M0+51的獨(dú)特魅力,沒錯(cuò),他就是為了攪局8位機(jī)市場而來,目標(biāo)就是成為和8051媲美的單片機(jī).他做到了.avr時(shí)代很多人, 覺得端口單獨(dú)賦值不方便:舉例-
兩個(gè)液晶端口: 
                      LCD_CLK  
                      LCD_DAT 
要拉高高低,很多人用標(biāo)C,PORTA|=(1<<LCD_CLK_BIT);這種方式, 后來我利用位域+宏函數(shù),實(shí)現(xiàn)了很51下比較兼容的操作習(xí)慣.只要定義: 
#define LCD_CLK    PORT(A,7)
#define LCD_DAT   PORT(A,6)

其中PORT(m,n) 為自己利用宏函數(shù)構(gòu)造的宏,具體見筆者的《基于宏定義的超強(qiáng)avr單片機(jī)io口操作》。

這樣,可以和51時(shí)代一樣方便操作. LCD_CLK =1; 不同的是.51的端口定義方式是sbit LCD_CLK = Px.y; 在M0尤其是新唐M0可以實(shí)現(xiàn)這個(gè)目標(biāo)嗎:答案是YES

當(dāng)然,使用這些GPIO,也就是普通io口錢,必須要把他們?cè)O(shè)定在GPIO模式,保證他們的其他功能,比如ad 串口,后者pwm 什么的 都沒有開啟.
這就要設(shè)置MFP寄存器:一般我們按照這樣一個(gè)步驟來操作普通IO口,
void LED_Init(void)
{
        /* Configure P4.0 - P4.5 as GPIO mode */
        _SYS_P40_MFP(SYS_MFP_P40_GPIO);
        _SYS_P41_MFP(SYS_MFP_P41_GPIO);
        _SYS_P42_MFP(SYS_MFP_P42_GPIO);
        _SYS_P43_MFP(SYS_MFP_P43_GPIO);
        _SYS_P44_MFP(SYS_MFP_P44_GPIO);
        _SYS_P45_MFP(SYS_MFP_P45_GPIO);
        
        /* Configure P3.2 - P3.7 as GPIO mode */
        _SYS_P32_MFP(SYS_MFP_P32_GPIO);
        _SYS_P33_MFP(SYS_MFP_P33_GPIO);
        _SYS_P34_MFP(SYS_MFP_P34_GPIO);
        _SYS_P35_MFP(SYS_MFP_P35_GPIO);
        _SYS_P36_MFP(SYS_MFP_P36_GPIO);
        _SYS_P37_MFP(SYS_MFP_P37_GPIO);
        
        /* Configure P4.0 - P4.5 as Output mode */
    _GPIO_SET_PIN_MODE(P4, 0, GPIO_PMD_OUTPUT);
    _GPIO_SET_PIN_MODE(P4, 1, GPIO_PMD_OUTPUT);
        _GPIO_SET_PIN_MODE(P4, 2, GPIO_PMD_OUTPUT);
    _GPIO_SET_PIN_MODE(P4, 3, GPIO_PMD_OUTPUT);
        _GPIO_SET_PIN_MODE(P4, 4, GPIO_PMD_OUTPUT);
    _GPIO_SET_PIN_MODE(P4, 5, GPIO_PMD_OUTPUT);


        /* Configure P3.2 - P3.7 as Output mode */
        _GPIO_SET_PIN_MODE(P3, 2, GPIO_PMD_OUTPUT);
    _GPIO_SET_PIN_MODE(P3, 3, GPIO_PMD_OUTPUT);
        _GPIO_SET_PIN_MODE(P3, 4, GPIO_PMD_OUTPUT);
    _GPIO_SET_PIN_MODE(P3, 5, GPIO_PMD_OUTPUT);
        _GPIO_SET_PIN_MODE(P3, 6, GPIO_PMD_OUTPUT);
    _GPIO_SET_PIN_MODE(P3, 7, GPIO_PMD_OUTPUT);
        
        /* Configure P4.0 - P4.5 as HIGH */
        P40=P41=P42=P43=P44=P45=1;
        /* Configure P3.2 - P3.7 as HIGH */
        P32=P33=P34=P35=P36=P37=1;
}
1,首先,設(shè)置MFP為GPIO
2,其次,設(shè)定GPIO的PIN模式,是作為輸出還是輸入,還是雙向,還是開漏;
3,最好就是可以對(duì)端口進(jìn)行操作了.類似于51;
上面的三部曲,尤其是前2部曲,必須要要工具自己系統(tǒng)的原理圖中的IO定義,不斷地修改Pmn中的m和n ,比如這2個(gè):
        _SYS_P40_MFP(SYS_MFP_P40_GPIO);
        _SYS_P41_MFP(SYS_MFP_P41_GPIO);
上面一句寫完,下面的一句直接拷貝上面的,然后把語句中,所有的40改成41,除了這個(gè)MFP設(shè)置要改,后面的   
    _GPIO_SET_PIN_MODE(P4, 0, GPIO_PMD_OUTPUT);
    _GPIO_SET_PIN_MODE(P4, 1, GPIO_PMD_OUTPUT);


也要做響應(yīng)改動(dòng). 如果IO多了 難免麻煩,枯燥,其實(shí)完全可以利用C的強(qiáng)大的宏來代替我們完成這些,如果如下這樣,感覺就輕松多了.
        /* 1--Configure P0.1\P0.2\P0.3\P0.4\P0.5\ as GPIO mode 
    *  meanwhile, set the PIN mode:
    */
    SET_MFP_GPIO(0,1,GPIO_PMD_QUASI);
    SET_MFP_GPIO(0,2,GPIO_PMD_QUASI );
    SET_MFP_GPIO(0,3,GPIO_PMD_QUASI);
    SET_MFP_GPIO(0,4,GPIO_PMD_INPUT);
    SET_MFP_GPIO(0,5,GPIO_PMD_INPUT);
,第一句寫好,第二句,就是改1-2個(gè)數(shù)字的事情.非常方便,當(dāng)然PIN的模式要改的時(shí)候,可以把后面的GPIO_PMD_QUASI,模式定義修改成其他的.這樣操作幾種很多了.SET_MFP_GPIO(m,n,mode) 這個(gè)函數(shù)幫了大忙. 這個(gè)函數(shù)本身還是借助于官方的Bsp ,只不過做了歸納總結(jié).具體的技術(shù)細(xì)節(jié)如下:




/** 設(shè)置Pm.n的MFP為GPIO,且選擇IO模式 
*   1,Setting port_m的 pin_n引腳為GPIO
*   2,setting port_m的 pin_n引腳的輸入輸出模式pin mode
*/
#define SET_MFP_GPIO(port_m,pin_n,PINmode)                 _SYS_P##port_m##pin_n##_MFP(SYS_MFP_P##port_m##pin_n##_GPIO); \
                                                                                           _GPIO_SET_PIN_MODE(P##port_m, pin_n, PINmode)


主要是利用了宏鏈接符,##, 把原來的分散性的分布操作.集中起來.統(tǒng)一管理操作. 各位同學(xué),覺得有用.可以 收藏一下.不增加代碼,但是提高了便利性.

編輯:admin  最后修改時(shí)間:2018-12-27

聯(lián)系方式

0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08

Copyright © 2014-2023 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號(hào)-4

国产一级不卡视频在线观看| 午夜福利在线观看免费| 成年女人午夜在线视频| 麻豆视传媒短视频在线看| 国产成人亚洲综合色就色| 日韩一级免费中文字幕视频| 国产精品一区二区日韩新区| 欧美高潮喷吹一区二区| 国产亚洲欧美日韩精品一区| 国产又粗又猛又黄又爽视频免费 | 色婷婷视频免费在线观看| 亚洲视频一级二级三级| 国产美女精品午夜福利视频 | 成人午夜爽爽爽免费视频| 国产一区国产二区在线视频| 欧美日韩亚洲精品在线观看| 国产a天堂一区二区专区| 最新国产欧美精品91| 亚洲乱码av中文一区二区三区| 91人妻人人做人碰人人九色| 风韵人妻丰满熟妇老熟女av | 亚洲天堂精品一区二区| 日本加勒比在线播放一区| 在线观看国产成人av天堂野外| 色婷婷国产熟妇人妻露脸| 日韩18一区二区三区| 欧美日韩在线第一页日韩| 亚洲av首页免费在线观看| 亚洲第一区欧美日韩在线| 亚洲另类女同一二三区| 国产高清一区二区不卡| 亚洲夫妻性生活免费视频| 欧美精品在线观看国产| 欧美丰满大屁股一区二区三区| 99久久精品午夜一区二区| 国产成人午夜av一区二区| 色偷偷偷拍视频在线观看| 成年男女午夜久久久精品| 好东西一起分享老鸭窝| 欧美大胆美女a级视频| 女人精品内射国产99|