AVR单片机关于端口的设置

我编了一个键盘程序,用的是AVR单片机,硬件端口没有用上拉电阻,我的想法是用反转法编程完成识别功能,在51上很好用的,可在AVR上不知怎么就是不行,我想可能是端口配置上出... 我编了一个键盘程序,用的是AVR单片机,硬件端口没有用上拉电阻,我的想法是用反转法编程完成识别功能,在51上很好用的,可在AVR上不知怎么就是不行,我想可能是端口配置上出了问题,我是初学菜鸟, 想请教单片机高手帮忙解答一下,AVR端口配置应该注意些什么?谢谢!
下面是我写的这个程序,见笑了。
uchar key_scan()
{
uchar scan,key;
DDRC=0XFF;
PORTC=0XF0;
DDRC=0X0F;
while(1)
{
scan=PINC;
scan&=0xf0;
if(scan!=0xf0)
{
delay(10);
scan=PINC;
scan&=0xf0;
if(scan!=0xf0)
{
DDRC=0XFF;
PORTC=0X0F;
DDRC=0XF0;
key=PINC;
key&=0x0f;
return (scan|key);
}
}
}
回答完有分,不是我小气,要是没人回答,我怕浪费了分值。辛苦一下大家吧!
展开
 我来答
神级人氏
高粉答主

推荐于2018-05-10 · 每个回答都超有意思的
知道大有可为答主
回答量:8376
采纳率:95%
帮助的人:811万
展开全部
  输入改成输出的时候,原来DDRC = 0X0F;PORTC = 0XF0;,取到SCAN.
  之后反转DDRC = 0XF0;PORTC = 0X0F;这时候要注意在反转后要加一个空指令NOP();AVR单片机并不是马上会执行,隔一个周期,PORTC才会真正输出要求的.
  一般写2~3条输出指令,如: PORTC = 0X0F; PORTC = 0X0F; 之后再读取端口状态才会读回正确的电平状态。
  单片机,全称单片微型计算机(英语:Single-Chip Microcomputer),又称微控制器(Microcontroller),是把中央处理器、存储器、定时/计数器(Timer/Counter)、各种输入输出接口等都集成在一块集成电路芯片上的微型计算机。与应用在个人电脑中的通用型微处理器相比,它更强调自供应(不用外接硬件)和节约成本。它的最大优点是体积小,可放在仪表内部,但存储量小,输入输出接口简单,功能较低。由于其发展非常迅速,旧的单片机的定义已不能满足,所以在很多应用场合被称为范围更广的微控制器;从上世纪80年代,由当时的4位、8位单片机,发展到现在的32位300M的高速单片机。
意法半导体(中国)投资有限公司
2023-06-12 广告
STM32F103是一款高性能的嵌入式芯片,由意法半导体(STMicroelectronics)公司生产。它是STM32系列芯片之一,具有紧凑、低功耗、高性能等特点,被广泛应用于嵌入式系统中。STM32F103的主要特点包括:1. 集成了A... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
生活营口
2010-10-21 · TA获得超过187个赞
知道小有建树答主
回答量:327
采纳率:0%
帮助的人:266万
展开全部
DDRC是控制端口方向的,为1时是输出口反之为输入口。当设置为输入口时,PORTC用来控制内部上拉允许的,为1时允许内部上拉。端口值读取用PINC。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
woxyzzz
推荐于2017-11-23 · TA获得超过122个赞
知道答主
回答量:119
采纳率:0%
帮助的人:92.7万
展开全部
输入改成输出的时候,原来DDRC = 0X0F;PORTC = 0XF0;,取到SCAN.
之后反转DDRC = 0XF0;PORTC = 0X0F;这时候要注意在反转后要加一个空指令NOP();AVR单片机并不是马上会执行,隔一个周期,PORTC才会真正输出你要求的.
一般我会连续写2~3条输出指令,如: PORTC = 0X0F; PORTC = 0X0F; 之后再读取端口状态才会读回正确的电平状态.
最好每次输出都重复写2条指令或加一句空指令.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小满爱创作
2010-10-21 · 古今中外,名人轶事,给我们带来了什么启发
小满爱创作
采纳数:15 获赞数:32

向TA提问 私信TA
展开全部
AVR 系列单片机内部有三种类型的被独立编址的存储器,它们分别为:Flash 程序存储器、内部SRAM 数据存储器和EEPROM 数据存储器。
Flash 存储器为1K~128K 字节,支持并行编程和串行下载,下载寿命通常可达10,000 次。由于AVR 指令都为16 位或32 位,程序计数器对它按字进行寻址,因此FLASH 存储器按字组织的,但在程序中访问 FLASH 存储区时专用指令LPM 可分别读取指定地址的高低字节。
寄存器堆(R0~R31)、I/O 寄存器和SRAM 被统一编址。所以对寄存器和I/O 口的操作使用与访问内部SRAM 同样的指令。32 个通用寄存器被编址到最前,I/O 寄存器占用接下来的64 个地址。从0X0060 开始为内部SRAM。外部SRAM 被编址到内部SRAM 后。
AVR 单片机的内部有64~4K 的EEPROM 数据存储器,它们被独立编址,按字节组织。擦写寿命可达100,000 次。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式