请教高手pic与7290的通信问题,系统程序如下。当不加7290的初始化程序时,可以正常显示,加上后 数码管直接没反应。。。实在想不出来为什么。。。望高手能指教一二。
LIST P=16F877A INCLUDE P16F877A.INC
ORG 00H NOP GOTO MAIN
;*******************************主程序******************************** MAIN ;=====================I/O端口方向寄存器初始化========================= BSF STATUS,5 MOVLW 00H MOVWF TRISA MOVLW 01H MOVWF TRISB MOVLW 18H MOVWF TRISC CLRF TRISD
BCF STATUS,5 CALL INIT_IIC ;IIC初始化程序 CALL INIT_7290 MOVLW 70H ;第一个数码管显示8 MOVWF SLAVE_ADDR MOVLW 10H MOVWF DATA_ADDR MOVLW 0FFH MOVWF DATA_WRITE CALL IIC_WRITE
GOTO $
;******************************IIC初始化程序******************************* INIT_IIC BSF STATUS,5 BSF TRISC,4 ;数据端SDA定义为输入 BSF TRISC,3 ;时钟端SCL定义为输入 BSF TRISB,0 MOVLW 09H ;波特率设定为100khz MOVWF SSPADD ;波特率寄存器初始化 BCF SSPSTAT,6 ;输入电平遵循IIC规范 BSF SSPSTAT,7 ;关闭转换率控制 BCF STATUS,5 MOVLW 38H MOVWF SSPCON ;单片机设定为主控方式,使能MSSP口 RETURN
;**************************键盘、显示芯片初始化*************************** INIT_7290 MOVLW 70H ;7290从器件地址+1位写控制位 MOVWF SLAVE_ADDR MOVLW 0CH ;闪烁周期控制寄存器FlashOnOff地址 MOVWF DATA_ADDR MOVLW 22H ;控制数码管闪烁周期在1秒左右 MOVWF DATA_WRITE CALL IIC_WRITE INCF DATA_ADDR,1 ;扫描位数寄存器ScanNum对应地址 MOVLW 07H MOVWF DATA_WRITE ;控制8位数码管都发光 CALL IIC_WRITE RETURN
IIC_WRITE ;===========================检测总线是否空闲============================== BSF STATUS,5 IICW_LP1 BTFSC SSPSTAT,2 GOTO IICW_LP1 IICW_LP2 MOVF SSPCON2,0 ANDLW 1FH BTFSS STATUS,2 GOTO IICW_LP2 ;======================建立总线启动信号并开始发送从地址===================== BSF SSPCON2,SEN ;建立总线启动信号 IICW_LP3 BCF STATUS,5 BTFSS PIR1,SSPIF ;判断是否发生MSSP中断 GOTO IICW_LP3 ;否,继续检测 ;===============================应答信号检测================================ MOVF SLAVE_ADDR,0 ;是,从器件地址+1位写控制位 BCF STATUS,5 MOVWF SSPBUF ;待发送字节载入缓冲器并启动发送 BCF PIR1,SSPIF ;清中断标志位 IICW_LP4 BTFSS PIR1,SSPIF ;检测是否有新的MSSP中断 GOTO IICW_LP4 ;否,继续检测 BSF STATUS,5 IICW_LP5 BTFSC SSPSTAT,BF ;检测寄存器满标志位是否清零 GOTO IICW_LP5 ;否,继续检测 BCF STATUS,5 MOVF DATA_ADDR,0 ;待写入的从器件单元地址 MOVWF SSPBUF ;===============================应答信号检测================================ BCF PIR1,SSPIF IICW_LP6 BTFSS PIR1,SSPIF GOTO IICW_LP6 BSF STATUS,5 IICW_LP7 BTFSC SSPSTAT,BF GOTO IICW_LP7 MOVF DATA_WRITE,0 ;待写入的数据字节 BCF STATUS,5 MOVWF SSPBUF ;================================应答信号检测================================ BCF PIR1,SSPIF IICW_LP8 BTFSS PIR1,SSPIF GOTO IICW_LP8 BCF PIR1,SSPIF BSF STATUS,5 BSF SSPCON2,PEN ;停止信号时序使能 BCF STATUS,5 BCF PIR1,SSPIF ;清中断标志位 RETURN
;***************************延时10毫秒子程序******************************* DELAY10 MOVLW 0CH MOVWF DLY1 DLY_LP1 MOVLW 0FFH MOVWF DLY2 DLY_LP2 DECFSZ DLY2,1 GOTO DLY_LP2 DECFSZ DLY1,1 GOTO DLY_LP1 RETURN
END
|