博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ATMEGA16 IOport相关汇总
阅读量:4312 次
发布时间:2019-06-06

本文共 1389 字,大约阅读时间需要 4 分钟。

ATMEGA16 IOport总的共同所有权有关的寄存器有三个DDRX、PORTX和PINX。

假设你想IO动作基本上与这三个寄存器操纵。DDRX也被称为数据方向寄存器、PORTX所谓数据寄存器、PINX叫port输入引脚。

DDRX的作用:

当DDRX = 0时。表示的是某port的引脚为输入;当DDRX = 0xff时表示某port的引脚为输出。

引脚的状态:输入或者输出是依据什么定义的呢?

是依据高低电平是输入单片机还是从单片机输出。输入是指:不属于单片机的外部的电平输入到单片机;输出是指:单片机的电平输出到单片机的外部。

PORTX的作用:

当DDRX = 0时,若把PORTX置位则表示启动了上拉电阻;若PORTX为0,则不启动上拉电阻。当DDRX = 0xff时,若把PORTX置位则表示输出高电平;若PORTX为0,则输出低电平。

PINX的作用:

PINX寄存器的值与DDRX寄存器的值(输入还是输出)没有不论什么关系;仅仅与port引脚上面的值有关系(PORTX)。假设PORTXn = 0xdd,则不管DDTX取什么样的值。其PINX都为0Xdd。

#include 
#include
int main(void){ uint8_t temp; DDRC = 0xff; PORTC = 0xff; DDRA = 0; PORTA = 0xdd; asm("nop");//汇编指令nop,即空操作。其运行时间为一个时钟周期 PORTC = PINA; return 0;}

当中不管DDRA的值是0还是0xff。结果都是一样的。

因此也能够得出一个结论:PINX寄存器里的值是能够依照自己的意愿设定的。原因是单片机能捕捉port的电平,并置位PINX寄存器。

初始值问题:

单片机刚上电后。port上的寄存器的初始值是什么?

上电后,默认的初始值为0。即DDRX= 0;PORTX = 0。PINX =  0;

#include 
#include
//#include
int main(void){ uint8_t temp; DDRC = 0xff; PORTC = 0xff; //DDRA = 0; //PORTA = 0xdd; asm("nop");//汇编指令nop,即空操作。其运行时间为一个时钟周期 //_nop(); PORTC = PINA; return 0;}

初始化方法1:

      PORTA=0xFF;    //内部上拉,高电平

     DDRA=0xFF;     //输出高电平---------灯一直是灭的

  初始化方法2:

      DDRA=0xFF;     //输出低电平--------灯被错误点亮了

     PORTA=0xFF;    //输出高电平--------立即被熄灭了,时间非常短(1个指令不到uS时间),灯闪了一下,眼睛无法察觉

 

 

版权声明:本文博客原创文章。博客,未经同意,不得转载。

转载于:https://www.cnblogs.com/mengfanrong/p/4681019.html

你可能感兴趣的文章
python爬虫---从零开始(五)pyQuery库
查看>>
POJ2236(KB5-A)
查看>>
Centos MySQL数据库迁移详细步骤
查看>>
2初出茅庐--初级篇2.1
查看>>
新建 WinCE7.0 下的 Silverlight 工程
查看>>
腾讯的张小龙是一个怎样的人?
查看>>
jxl写入excel实现数据导出功能
查看>>
linux文件目录类命令|--cp指令
查看>>
.net MVC 404错误解决方法
查看>>
linux系统目录结构
查看>>
git
查看>>
btn按钮之间事件相互调用
查看>>
Entity Framework 4.3.1 级联删除
查看>>
codevs 1163:访问艺术馆
查看>>
冲刺Noip2017模拟赛3 解题报告——五十岚芒果酱
查看>>
并查集
查看>>
sessionStorage
查看>>
代码示例_进程
查看>>
Java中关键词之this,super的使用
查看>>
人工智能暑期课程实践项目——智能家居控制(一)
查看>>