打印
[ZLG-MCU]

请教PIC16F877与ZLG7290的通信问题

[复制链接]
1385|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiaoxin1986|  楼主 | 2009-5-17 23:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教高手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

相关帖子

沙发
xiaoxin1986|  楼主 | 2009-5-17 23:42 | 只看该作者

嘿嘿,顶一个

使用特权

评论回复
板凳
liqindz| | 2009-5-18 06:32 | 只看该作者

看看硬件是不是没有联接好

使用特权

评论回复
地板
linhai1986| | 2009-5-19 15:31 | 只看该作者

re

;******************************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

 

这段程序是做什么用的?

看上去是因为你的通信速度太快了,最高支持到32K,调低速度试一试
 

使用特权

评论回复
5
xiaoxin1986|  楼主 | 2009-5-19 20:21 | 只看该作者

回复4楼:我改一下试试

使用特权

评论回复
6
xiaoxin1986|  楼主 | 2009-5-19 20:22 | 只看该作者

回复3楼的:硬件检查过了,没有什么问题

使用特权

评论回复
7
jakezlc| | 2009-5-19 20:22 | 只看该作者

学习了

使用特权

评论回复
8
jakecumt| | 2009-5-20 07:44 | 只看该作者

路过 学习

使用特权

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

本版积分规则

176

主题

1487

帖子

0

粉丝