作者fmdjyl (小D(滴))
看板ASM
标题Re: [问题] 写PIC的C问题
时间Sat Dec 13 22:34:35 2008
1.就如你所说,LATD和PORTD输出都是相同。
但我控制输出和判别输入,都是用PORTD...
因为当是输入时,只有能从PORTD判别...LATD没办法做判别。
2. 以下为例
extern volatile near unsigned char PORTD;
extern volatile near union {
struct {
unsigned RD0:1;
unsigned RD1:1;
unsigned RD2:1;
unsigned RD3:1;
unsigned RD4:1;
unsigned RD5:1;
unsigned RD6:1;
unsigned RD7:1;
};
所以可以用PORTDbits.RD0 = 0;
做单独bit控制。
也如你程式这段 LATDbits.LATD0 = 1;
※ 引述《theend1109 (工作真难找)》之铭言:
: ※ [本文转录自 C_and_CPP 看板]
: 作者: theend1109 (工作真难找) 看板: C_and_CPP
: 标题: [问题] 写PIC的C问题
: 时间: Sat Dec 13 15:34:44 2008
: 如果这问还是不适合PO在这,那我还是会自D的!
: #include <p18f4455.h>
: void main (void) {
: LATD = 0x00;
: TRISD = 0xFF;
: LATDbits.LATD0 = 1;
: while (1) ;
: }
: 这是书里面写的范例程式
: 动作就是让PORTD的第一颗LED亮
: 而程式里并没有PORTD这变数,因为让LED亮的是LATD这个变数
: 而这就是我看不懂的地方,书上说PORTD跟LATD是用相同特殊暂存器
: 所以LATD输出就是等於PORTD输出
: 书上是说在标头档,利用UNION跟STRUCT来完成这样的动作
: 但我怎麽看都看不懂
: 有没有人能帮我解释一下
: 标头档在连结里
: http://www.wretch.cc/blog/theend1109/20708116
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.116.80.6
1F:推 theend1109:可以解释一下,为何LATD会跟PORTD同个暂存器嘛? 12/13 22:53
2F:→ fmdjyl:书上不是有方块图?? 12/13 23:12