以ATmega16单片机为例,共有32个通用I/O口,分为4个端口PA,PB,PC,PD,每个端口都包含8个I/O口,如图所示,每个端口对应一个8位的二进制,对应的i/o管脚顺序由高到低排列。
每个I/O口都可以单独设为输入或输出,如上图中PA口的8个I/O口全部设为输出,控制8个发光二极管的亮灭。i/o口除作为输入输出口外,还有第二功能,如PA口也作为AD转换的输入口。
每个端口都具有输入,输出,方向控制三个寄存器:
以PA口为例,其他端口相同,方向寄存器DDRA,对应8个的I/O口,1设为输出,0设为输入。
输出寄存器PORTA,对应的I/O口,1输出高电平,0输出低电平
输入寄存器PINA , 若对应的I/O口为高电平,相应的位置1,低电平置0
例如:PA口全部设为输出,DDRA=0xFF,并且全部输出低电平,PORTA=0x00;将点亮上图中的全部发光二极管。
将PB口的第0位(最低位)设为输入,其余位设为输出,DDRB=0xFE;
if ((PINB&0x01)==1) //判断PB口的第0位的输入状态,是0还是1.
PORTA=0x00; //如果PB口的第0位等于1,即PA口的第0位输入高电平,那么PA口全部输出低电平
else
PORTA=0xFF;//如果PB口的第0位等于0,即PA口的第0位输入低电平,那么PA口全部输出高电平
关键字:单片机avr 输入输出
引用地址:
单片机avr 输入输出(i/o)端口使用介绍
推荐阅读最新更新时间:2024-03-16 13:53
AVR片内两个串口互相通信的单片机源码
学习单片机串口程序时,我们经常会写一个串口自发自收程序,来测试硬件以及我们编写的程序; 自发自收很简单,只需要将串口的RXD与TXD两个IO短接就行; 而我们的XMEGA片上的串口非常丰富; 我将串口C0的TXD与串口E0的RXD用杜邦线链接起来,如果E0正确收到了C0发来的数据,便在虚拟串口输出相关信息虽然串口通信是一个简单而古老的通信协议,而且串口与PC直接通信越来越多地被USB代替, 但是,大量的应用仍然直接或间接地通过串口通信来完成,因此它的重要性是不言而喻的 相关图片与代码如下 ------
[单片机]
AVR单片机硬件电路设计方法详解
Mega16已经内置了上电复位设计。并且在熔丝位里,可以控制复位时的额外时间,故AVR外部的复位线路在上电时,可以设计得很简单:直接拉一只10K的电阻到VCC即可 (R0)。为了可靠,再加上一只0.1uF的电容(C0)以消除干扰、杂波。D3(1N4148($0.0054))的作用有两个:作用一是将复位输入的最高电压钳在 Vcc+0.5V 左右,另一作用是系统断电时,将R0(10K)电阻短路,让C0快速放电,让下一次来电时,能产生有效的复位。当AVR在工作时,按下S0开关时,复位脚变成低电平,触发AVR芯片复位。 重要说明:实际应用时,如果你不需要复位按钮,复位脚可以不接任何的零件,AVR芯片也能稳定工作。即这部分不需要任
[单片机]
缺少仿真器时AVR单片机的开发方法
对FLASH存贮器单片机,不要仿真机也能方便快速地开发程序。具体可以从以下几方面入手: 一、尽量使用高级语言开发系统程序 您有没有在写汇编程序时,标错一个标号而浪费您大把时间找错或跳转偏移量过大而不得不改动程序结构的经历。其实您如果使用高级语言开发程序,就不会有这样的痛苦。 在开发程序时,除了建立一个良好的开发文档外,使用语言的选择也很重要。有许多人认为使用汇编写程序比较精简,而用高级语言开发会浪费很多程序空间,其实这是一种误解。对一个有经验的,而且非常熟悉某种单片机的汇编高手而言,他是能写出比高级语言更精简的代码。而对汇编不是很熟的开发者、或突然更换了一种新的单片机,您能保证一定可以写出比高级语言更简练的代码吗? 高级语言的优越
[单片机]
avr单片机USART串口通讯初始化配置及说明
avr atmega16 单片机通用同步和异步串行接收器和转发器 (USART) 是一个高度灵活的串行通讯设备,其工作模式及其初始化,寄存器说明如下。 //*****************************USART 控制和状态寄存器A(UCSRA)******************************** /*USART 控制和状态寄存器A(UCSRA) bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 RXC TXC UDRE FE DOR PE U2X MPCM RXC: USART 接收结束
[单片机]
一个基于AVR单片机的串口通讯例程
此程序是应用了ATMega128芯片,是以查询方式发送,中断方式接受数据,有问题可以交流!希望对大家有帮助! //ICC-AVR application builder : 2007-6-10 // Target : M128 // Crystal: 7.3728Mhz //作者:Caterpillar #include iom128v.h #include macros.h //UART0 initialize // desired baud rate: 9600 // actual: baud rate:9600 (0.0%) // char size: 8 bit // parity: Disabled //******
[单片机]
如何利用AVR单片机实现AT24C256的数据高速稳定的读取
最近刚买回一块AT24C256 EEPROM ,容量为32K Byte ,数据地址宽度为 16Bit ,支持IIC 1M (5V)400K (2.7V) 速度模式 ,利用AVR M16 片内IIC 可以高速稳定地读取数据! 经过调试的,与各位大虾分享分享。 程序如下:(winavr) #include #include #include #include #define FREQ 8 #include #include #include #define uchar unsigned char #define uint unsigned int #define ulong unsigned long //管脚定义 #defin
[单片机]
基于AVR单片机的便携式无线医疗点滴监控系统设计
引言 智能化和便携式是现代电子产品的发展趋势,医疗电子的智能化使得医务人员的操作变得更方便。医务人员可随身携带手持式监控仪对各病房点滴实时监控,及时了解相关情况;如遇突发情况如点滴低于设定警戒值,终端监控装置可产生中断信号,主控制端则可优先进行相应的处理。本设计实现了一种以AT32UC3A0512 单片机为主控制器的便携式远程无线点滴监控系统,可及时了解点滴状态,提高医疗点滴设备安全性。 1 系统原理介绍 本系统主要包括两个部分:手持式控制端和终端监控装置。手持式控制端主要实现信息输入和查询界面的操作,通过输入待查询的病房号及点滴速度值,以数据包形式发送给相应的病房监控终端,实时显示终端传送来的点滴状态数据信息。终端
[医疗电子]
基于AVR单片机及MODEM芯片的MTU、RTU无线电遥测系统
一、引言 基于AVR单片机及专用MODEM芯片的MTU(Master Terminal Unit中心调度机)、RTU无线电遥测系统。 分散地分布在全市的管网监测点上的远端RTU(系统可带256个RTU)采集数据,进行数据处理后通过无线电台向中心调度端发送数据,中心调度端接收到数据后进行数据处理,数据存储,并送给模拟屏显示。 二、设计思想 原有系统的使用中,主要存在以下几个问题:1. 无线通信波特率低(300bps),误码率高,巡测速度慢,最多带32个RTU终端;2. 当某一远程RTU端的无线电台一直处于长时间误发射状态时(简称“长发” )一直占用系统频点,由于系统共用一组无线电频点,这将使系统其他所有电台无
[单片机]