yueliangz0123 发表于 2013-10-25 01:22:57

端口操作求助

用的是PIC16F876,操作端口RA3跟RA2,先让RA2端口输出高电平(可以正常输出),然后再接着让RA3输出高电平(可以输正常出),但这时候RA2变成低电平了。。。各位大侠这是什么原因??有没有遇到的???求助,感谢~~~~

lusson 发表于 2013-10-25 08:25:33

用了位操作指令?
看看编出来汇编指令,是否变成了读-写操作。

你可能觉得你只操作了RA3,可是指令可能是操作了整个RA端口。

mayahs2369 发表于 2013-10-25 08:42:36

操作的是PORT还是LAT寄存器?

yueliangz0123 发表于 2013-10-25 09:11:14

mayahs2369 发表于 2013-10-25 08:42 static/image/common/back.gif
操作的是PORT还是LAT寄存器?

这个系列没有LAT寄存器

yueliangz0123 发表于 2013-10-25 09:29:02

lusson 发表于 2013-10-25 08:25 static/image/common/back.gif
用了位操作指令?
看看编出来汇编指令,是否变成了读-写操作。



#define SCL PORTAbits.RA3
#define SDA PORTAbits.RA2


汇编:
void Start_I2c(void)
21:                {
22:                        SDA=1;                             /*发送起始条件的数据信号*/
23:                        __delay_ms(3);                       
0713    3014   MOVLW 0x14
0714    00F2   MOVWF 0x72
0715    3079   MOVLW 0x79
0716    00F1   MOVWF 0x71
0717    0BF1   DECFSZ 0x71, F
0718    2F17   GOTO 0x717
0719    0BF2   DECFSZ 0x72, F
071A    2F17   GOTO 0x717
071B    2F1C   GOTO 0x71c
24:                        SCL=1;               
071C    1283   BCF 0x3, 0x5
071D    1303   BCF 0x3, 0x6
071E    1585   BSF 0x5, 0x3
25:                        __delay_ms(10);            /*起始条件建立时间大于4.7us,延时*/   
071F    3041   MOVLW 0x41
0720    00F2   MOVWF 0x72
0721    30EE   MOVLW 0xee
0722    00F1   MOVWF 0x71
0723    0BF1   DECFSZ 0x71, F
0724    2F23   GOTO 0x723
0725    0BF2   DECFSZ 0x72, F
0726    2F23   GOTO 0x723
0727    0064   CLRWDT
26:                        SDA=0;                           /*发送起始信号*/
0728    1283   BCF 0x3, 0x5
0729    1303   BCF 0x3, 0x6
072A    1105   BCF 0x5, 0x2
27:                        __delay_ms(10);            /* 起始条件锁定时间大于4μs*/      
072B    3041   MOVLW 0x41
072C    00F2   MOVWF 0x72
072D    30EE   MOVLW 0xee
072E    00F1   MOVWF 0x71
072F    0BF1   DECFSZ 0x71, F
0730    2F2F   GOTO 0x72f
0731    0BF2   DECFSZ 0x72, F
0732    2F2F   GOTO 0x72f
0733    0064   CLRWDT
28:                        SCL=0;                           /*钳住I2C总线,准备发送或接收数据 */
0734    1283   BCF 0x3, 0x5
0735    1303   BCF 0x3, 0x6
0736    1185   BCF 0x5, 0x3
29:                        __delay_us(3);
0737    3004   MOVLW 0x4
0738    00F1   MOVWF 0x71
0739    0BF1   DECFSZ 0x71, F
073A    2F39   GOTO 0x739
073B    2F3C   GOTO 0x73c
30:                }
073C    0008   RETURN


汇编没太看懂,请大侠帮看一下,谢谢~~~

jlian168 发表于 2013-10-25 09:36:50

ADcon0?
ADcon1?
Ansel?

yueliangz0123 发表于 2013-10-25 09:42:38

jlian168 发表于 2013-10-25 09:36 static/image/common/back.gif
ADcon0?
ADcon1?
Ansel?

没有ANSEL寄存器。
没用AD也必须得配置ADCON?

jlian168 发表于 2013-10-25 09:47:55

In adcon1 to set A/D pin to use.

lusson 发表于 2013-10-25 09:47:58

yueliangz0123 发表于 2013-10-25 09:29 static/image/common/back.gif
#define SCL PORTAbits.RA3
#define SDA PORTAbits.RA2



没看懂就对着汇编指令一条条看。。
我也没空看

另外 像I2C这类,也要考虑会被外部拉低。

Wxy8030 发表于 2013-10-25 10:12:22

很象PIC单片机常见的 读-改写-写 的问题,楼主的RA2口可能被外部拉低了

yueliangz0123 发表于 2013-10-25 14:50:39

结贴~~~ADCON1不用AD也要设置
页: [1]
查看完整版本: 端口操作求助