首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么要在设置新值之前清除寄存器

为什么要在设置新值之前清除寄存器
EN

Stack Overflow用户
提问于 2016-10-24 19:13:25
回答 1查看 141关注 0票数 1

作为ASM下PIC编程的初学者,我不明白为什么在示例中,在设置新值之前要清除一个寄存器。在实际运行的程序中,这并不是这样做的,一切都运行得很好。

使用CRLF的示例

代码语言:javascript
运行
复制
CRLF  PORTB        ; Init PORTB by clearing output data latches
BSF   STATUS, RP0  ; Select Bank 1
MOVLW 0xCF         ; Value used to initialize data direction
MOVWF TRISB        ; Set RB<3:0> as inputs
                   ; RB<5-4> as outputs
                   ; RB <7-6> as inputs

不带CRLF的示例

代码语言:javascript
运行
复制
BSF   STATUS, RP0  ; Select Bank 1
MOVLW 0xCF         ; Value used to initialize data direction
MOVWF TRISB        ; Set RB<3:0> as inputs
                   ; RB<5-4> as outputs
                   ; RB <7-6> as inputs

这两个部分都工作得很好,为什么要清除呢?

EN

回答 1

Stack Overflow用户

发布于 2016-10-29 00:01:55

微芯片控制器的一个常见缺陷是写入PORTx寄存器。你应该永远不要这样做( do )。如果要更改输出引脚的状态,则应直接写入输出锁存器(LATx)。这是因为写入PORTx寄存器涉及读取/修改/写入过程,如果引脚同时改变状态,则会导致问题。仅使用PORTx读取输入管脚(当然还有输出管脚)的值。

如注释中所述,TRISx寄存器设置引脚(0=输出、1=input)的方向。请注意,这与使用0=input、1=output的某些其他处理器(例如摩托罗拉HC12)的设置相反。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40216983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档