打印
[AVR单片机]

关于MEGA128端口B问题, 各位请多指点

[复制链接]
2345|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LZB|  楼主 | 2013-4-29 11:02 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 LZB 于 2013-4-29 11:52 编辑

本人用B端口做通用IO  碰到如下问题 无法解决
1.  B.7做输出口  外部有上拉电阻  
2.  只在中断中做位取反输出,输出波形正常
3. 在主程序中 只要对B端口其它位操作 B.7就会出现异常(脉冲周期混乱,有时低电平延长一个周期有时高电平延长一个周期)
4.看编译后的汇编语言 发现端口输出指令为 ST ----     而不是OUT   命令
请各位高手指点以下是GCCAVR编译后的代码
596:        PORTB&=0XBF;
+000002FC:   EB9F        LDI     R25,0xBF         Load immediate
+000002FD:   91800038    LDS     R24,0x0038       Load direct from data space
+000002FF:   2389        AND     R24,R25          Logical AND
+00000300:   93800038    STS     0x0038,R24       Store direct to data space
597:        PORTB|=0X40;
+00000302:   91800038    LDS     R24,0x0038       Load direct from data space
+00000304:   6480        ORI     R24,0x40         Logical OR with immediate
+00000305:   93800038    STS     0x0038,R24       Store direct to data space
我个人认为是用STS命令造成的输出偶尔出错,但不知道怎么写C代码,才能使编译代码为OUT命令

相关帖子

沙发
fp123123| | 2013-4-29 12:07 | 只看该作者
本帖最后由 fp123123 于 2013-4-29 12:10 编辑

avr的PORTn是映射到内存空间的,用STS效果相同

这段程序翻转PORTB6的操作,用的是&和|,会受到PORTB6当前状态的影响,如果在主程序里改变了PORTB6的值,结果就会乱了

正确的方法,应该是用SBI和CBI指令,直接设置状态,和当前状态无关

__asm__                 \
  ( "SBI 0x38,6" "\n\t"        \
    "CBI 0x38,6"         \
);

使用特权

评论回复
板凳
fp123123| | 2013-4-29 12:12 | 只看该作者
注意 PORTB&=0XBF; 操作的是PORTB6,而你说“B.7做输出口”,是不是搞错了

使用特权

评论回复
地板
LZB|  楼主 | 2013-4-29 15:04 | 只看该作者
fp123123 发表于 2013-4-29 12:12
注意 PORTB&=0XBF; 操作的是PORTB6,而你说“B.7做输出口”,是不是搞错了

在中断里做了输出B.7  , PORTB&=0XBF 是在主程序里做的测试,加了它B.7输出波形就出错,主程序上要是不最B.6操作,B.7还是正常的

使用特权

评论回复
5
fp123123| | 2013-4-29 15:37 | 只看该作者
本帖最后由 fp123123 于 2013-4-29 15:40 编辑

看你的描述,应该是遇到了AVR的中断响应延迟的问题,当中断发生时,要完成正在执行的指令,AVR的指令分别有1,2,3,4个时钟周期,所以你的主程序每次改动,和运行中各种条件的变化,都有可能使响应在1到4个时钟周期内变化。如果要求不高,解决方法有2个,一个是在中断开始时读定时器的当前值,然后自适应调节;一个是使用其他硬件方式产生脉冲

使用特权

评论回复
6
qin552011373| | 2013-4-29 21:40 | 只看该作者
fp123123 发表于 2013-4-29 15:37
看你的描述,应该是遇到了AVR的中断响应延迟的问题,当中断发生时,要完成正在执行的指令,AVR的指令分别有 ...

号线给你加分啊  可是今天没分了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

LZB

7

主题

55

帖子

0

粉丝