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

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當(dāng)前位置:首頁 >> 技術(shù)中心 >> 單片機(jī)入門 >> 基于宏定義的超強(qiáng)avr單片機(jī)io口操作

基于宏定義的超強(qiáng)avr單片機(jī)io口操作

關(guān)鍵字:io口操作 AVR單片機(jī) 作者: 來源: 發(fā)布時(shí)間:2018-12-27  瀏覽:16

本章重點(diǎn)講述avr單片機(jī)的io口操作,為從51單片機(jī)走向嵌入式系統(tǒng)碼農(nóng)的福音,經(jīng)歷了51->MPS430或51->pic 51->avr,這樣一些轉(zhuǎn)換,本人粗略學(xué)了51,后直接專攻avr,為此有一些心得,和一些雕蟲小技的小伎倆,希望能拋磚引玉,引發(fā)同行反思,在工作中提供舉一反三后的便利。

想像51一樣,在winavr中直接寫上sbit KEY1 = p1^1,

然后用下列語句掃描鍵盤嗎??

if(KEY1==0) keyval=1;

請看下面的宏定義,其中位段的手法來源于網(wǎng)絡(luò),本人純屬借鑒。之后的##,宏鏈接符,純屬自創(chuàng),

各位先行使用以下宏后,有問題直接聯(lián)系本人qq21332560討論:注明驗(yàn)證信息:io口

//定義新的數(shù)據(jù)類型,方便進(jìn)行IO端口操作。

typedef struct
{
unsigned char bit0:1 ;
unsigned char bit1:1 ;
unsigned char bit2:1 ;
unsigned char bit3:1 ;
unsigned char bit4:1 ;
unsigned char bit5:1 ;
unsigned char bit6:1 ;
unsigned char bit7:1 ;
}bit_field;

#define GET_BIT(adr) (*(( volatile bit_field * )(&adr)))

////////////////////////////////////////
#define AUTOINIT 1 //自動初始化IO方向寄存器無需在初始化程序中用PORTA=0X..;形式來初始化io控制寄存器,同時(shí)也不爭的證明了avr單片機(jī)的端口輸入/出切換功能

#if AUTOINIT==1

#define PORT(m,n) GET_BIT(DDR##m).bit##n=1;\
GET_BIT(PORT##m).bit##n
#else

#define PORT(m,n) GET_BIT(PORT##m).bit##n

#endif
////////////////////////////////////////

#if AUTOINIT==1

#define PIN(m,n)

(!(u08)(GET_BIT(DDR##m).bit##n=0)

&&\
(u08)(GET_BIT(PORT##m).bit##n=1)

&&\
GET_BIT(PIN ##m).bit##n )
#else

#define PIN(m,n) GET_BIT(PIN##m).bit##n

#endif
//方便直觀操作 自由設(shè)定單個(gè)io口的方向
#define DRA(n) GET_BIT(DDRA).bit##n
#define DRB(n) GET_BIT(DDRB).bit##n
#define DRC(n) GET_BIT(DDRC).bit##n
#define DRD(n) GET_BIT(DDRD).bit##n
#define DDR(m,n) GET_BIT(DDR##m).bit##n

在我們實(shí)際項(xiàng)目中,需要用到按鍵輸入,繼電器,SPI器件輸出,

兩者分別為輸入,和輸出之用,這時(shí)候可以方面的在各自c文件對應(yīng)的.h文件中寫下如下語句:

#define KEY1 PIN(C,3)//定義三個(gè)按鍵,使能上拉
#define KEY2 PIN(C,4)
#define KEY3 PIN(C,5)

#define SCLK_SPI PORT(B,5)//定義spi口的兩個(gè)控制引腳
#define CS_SPI PORT(C,0)

上述PIN PORT 自動化定義的方法中,有些不足,如:在DS18B20這樣的應(yīng)用中,需要切換引腳的輸入輸出,就必須為18B20的引腳安排兩套定義,

類似于:#define DS18B20_IN PIN(A,1)

#define DS18B20_OUT PORT(A,1)

此外:PORT和PIN的自動化定義中,含有DDR的操作,凡是用到PIN和PORT定義過的端口的地方都需要重復(fù)DDR操作,帶來冗余代碼。

編輯: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號-4

日韩精品免费一区三区| 亚洲精品蜜桃在线观看| 日韩一区二区三区嘿嘿| 国产成人午夜福利片片| 国产不卡在线免费观看视频| 亚洲欧美日韩中文字幕二欧美| 久久精品亚洲情色欧美| 久热人妻中文字幕一区二区| 人体偷拍一区二区三区| 欧美区一区二在线播放| 蜜臀人妻一区二区三区| 日韩成人h视频在线观看| 亚洲精品伦理熟女国产一区二区| 亚洲精品欧美精品日韩精品| 亚洲精品福利入口在线| 日本一区不卡在线观看| 亚洲内射人妻一区二区| 五月情婷婷综合激情综合狠狠 | 日本高清二区视频久二区| 中文字幕高清不卡一区| 人妻少妇系列中文字幕| 亚洲第一区欧美日韩在线| 超薄肉色丝袜脚一区二区| 日韩一区二区三区有码| 日本欧美三级中文字幕| 欧美一级特黄特色大色大片| 中文字幕高清不卡一区| 成人精品视频一区二区在线观看 | 日韩日韩欧美国产精品| 日本淫片一区二区三区| 国产女性精品一区二区三区 | 成人午夜激情免费在线| 五月激情婷婷丁香六月网| 国产香蕉国产精品偷在线观看| 一区二区三区精品人妻| 91精品日本在线视频| 亚洲一区二区三区日韩91| 蜜臀人妻一区二区三区| 丰满少妇被猛烈插入在线观看| 麻豆印象传媒在线观看| 欧美午夜不卡在线观看|