打印

74LS164问题

[复制链接]
3257|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jwwhy|  楼主 | 2009-11-25 08:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好 ,最近用74LS164驱动4位数码管,但是就是显示不正常,显示全部8888了 .
用PIC16F877A ,AD采样,然后查表到数码管显示。 74LS164的数据输入接PIC16F877A的RC7,CP接16F877A的RD0,MR接VCC.
   程序如下:
    ;-------------------------------------------------------------  
;************************************************************-
;-------------------------------------------------------------  
list  p=16f877A     ; list directive to define processor
#include <p16f877A.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
;-------------------------------------------------------------
;************************************************************-  
;-------------------------------------------------------------
;--------------74LS164显示定义-------------------------------
#DEFINE        CLK164        PORTC,3     ;定义164时钟位 .CLK
#DEFINE        ENABLE164_1   PORTB,1    ;定义164显示使能位,在刷新是关掉数码管以防闪烁
#DEFINE        ENABLE164_2   PORTB,2    ;定义164显示使能位,在刷新是关掉数码管以防闪烁
#DEFINE        ENABLE164_3   PORTB,3   ;定义164显示使能位,在刷新是关掉数码管以防闪烁
#DEFINE        ENABLE164_4   PORTB,4    ;定义164显示使能位,在刷新是关掉数码管以防闪烁
;***************************************************************************
TIME_5MS       EQU         20H               ;延时5MS标志位
W_temp         EQU         21H               ;W暂存
STATUS_temp    EQU         22H               ;STATUS暂存
DIP4           EQU         23H               ;显示高H缓冲
DIP3           EQU         24H               ;显示高L缓冲
DIP2           EQU         25H               ;显示低H缓冲
DIP1           EQU         26H               ;显示低L缓冲
COUNT0         EQU         27H               ;采样04次数
COUNT3         EQU         28H
PD1            EQU         29H               ;查表高H显示
PD2            EQU         2AH               ;查表高L显示
PD3            EQU         2BH               ;查表低H显示
PD4            EQU         2CH               ;查表低L显示
ACCALO         EQU         2DH               ;存放乘数低8位
ACCAHI         EQU          2EH               ;存放乘数高8位
ACCBLO         EQU         2FH               ;存放被乘数低8位和乘积第16~23位
ACCBHI         EQU         30H               ;存放被乘数高8位和乘积第24~31位
ACCCLO         EQU         31H               ;存放乘积低8位
ACCCHI         EQU         32H               ;存放乘积高8位
ACCDLO         EQU         33H               ;临时寄存器
ACCDHI         EQU          34H               ;临时寄存器
TEMP           EQU         35H               ;临时寄存器
TEMP0          EQU         36H               ;AD采样暂存
TEMP1          EQU         37H               ;AD采样高位暂存
TEMP7          EQU         38H               ;;AD采样高位暂存
SIGN           EQU         39H               ;存放乘积的符号
R_LAB          EQU         3AH               ;查表中转暂存
COUNT1         EQU         3BH
COUNT2         EQU         3CH  
COUNT5         EQU         3DH
;-------------------------------------------------------------
;************************************************************-
;-------------------------------------------------------------
              ORG         00H  
              NOP   
              GOTO        MAIN
              ORG         0004H
              GOTO        INTSER
;-------------------------------------------------------------  
;****************中断程序************************************-
;-------------------------------------------------------------  
INTSER:        CALL       PP
               BCF        INTCON,2         ;清溢出位
               MOVLW      0EBH             ;TMR0重新赋初值
               MOVWF      TMR0
               BSF        TIME_5MS,0       ;5MS标志为1
               GOTO       OO
PP:            MOVWF      W_temp
               SWAPF      STATUS,W
               BCF        STATUS,RP0
               MOVWF      STATUS_temp
               Return
OO:            SWAPF      STATUS,W
               MOVWF      STATUS
               SWAPF      W_temp,F
               SWAPF      W_temp,w
               RETFIE
;-------------------------------------------------------------  
;***************** 主程序*********************************   -
;-------------------------------------------------------------
MAIN:          CALL         START           ;初始化子程序
JJ:            CALL         ADC             ;AD采样子程序
               CALL         DISP1           ;AD采样*4*1000/1000子程序
               CALL         TIAOZHENG       ;查表子程序
               CALL         DISPLAY1        ;数码管显示子程序
               GOTO         JJ              ;循环显示
;-------------------------------------------------------------
;******************  显示时间查表   *************************-
;-------------------------------------------------------------
TABLE:       MOVF      R_LAB,0
             ADDWF     PCL,1          ;    将W寄存器内的7段显示码地址放入PC                              
             RETLW     3FH            ;0     
             RETLW     06H            ;1                                
             RETLW     5BH            ;2
             RETLW     4FH            ;3
             RETLW     66H            ;4
             RETLW     6DH            ;5
             RETLW     7DH            ;6
             RETLW     07H            ;7
             RETLW     7FH            ;8
             RETLW     6FH            ;9
;-------------------------------------------------------------
;******************初始化程序*****************************   -
;-------------------------------------------------------------  
START:         BCF          STATUS,RP0        ;SEL BANK0
               BCF          STATUS,RP1
               CLRF         DIP4              ;DIP4 0
               CLRF         DIP3              ;DIP3 0
               CLRF         DIP2              ;DIP2 0
               CLRF         DIP1              ;DIP1 0
               CLRF         PD1               ;PD1  0
               CLRF         PD2               ;PD2  0
               CLRF         PD3               ;PD3  0
               CLRF         PD4               ;PD4  0
               CLRF         TEMP              ;TEMP 0
               CLRF         TEMP0             ;TEMP0 0
               CLRF         TEMP1             ;TEMP1 0
               CLRF         TEMP7             ;TEMP7 0
               CLRF         COUNT0            ;COUNT0 0
               CLRF         COUNT3            ;COUNT3 0
               CLRF         ACCALO            ;ACCALO 0
               CLRF         ACCAHI            ;ACCAHO 0
               CLRF         ACCBLO            ;ACCBLO 0
               CLRF         ACCBHI            ;ACCBHO 0
               CLRF         ACCCLO            ;ACCCLO 0
               CLRF         ACCCHI            ;ACCCHO 0
               CLRF         ACCDLO            ;ACCDLO 0
               CLRF         ACCDLO            ;ACCDLO 0
               CLRF         PORTA             ;PORTA 0
               CLRF         R_LAB             ;查表中转暂存
               CLRF         COUNT5
               BSF          STATUS,RP0        ;SEL BANK1
               MOVLW        0EH
               MOVWF        ADCON1            ;RA1-RA5为普通I/0口
               MOVLW        3FH
               MOVWF        TRISA             ;RA1/RA5为输入
               BCF          STATUS,RP0        ;SEL BANK0
               CLRF         PORTB             ;PORTB 0
               BSF          STATUS,RP0
               MOVLW        00H
               MOVWF        TRISB             ;TRISB 为输出口
               BCF          OPTION_REG,7   
               BCF          STATUS,RP0        ;SEL BANK0
               CLRF         PORTC             ; PORTC  0
               BSF          STATUS,RP0        ;BANK1
               MOVLW        00H
               MOVWF        TRISC             ;PORTC OUTPUT
               BCF          STATUS,RP0        ;BANK0
               CLRF         PORTD             ;PORTD 0
               BSF          STATUS,RP1        ;BANK1
               MOVLW        00H
               MOVWF        TRISD             ;PORTD  OUTPUT
               BCF          STATUS,RP0        ;BANK0
               CLRF         PORTE             ;PORTE  0
               BSF          STATUS,RP1        ;BANK 1
               MOVLW        00H
               MOVWF        PORTE             ;PORTE OUTPUT
               BSF          STATUS,RP0
               BCF         STATUS,RP1        ;SEL BANK1
               MOVLW       07H               ;定时归TMR0   ,分频比为256
               MOVWF       OPTION_REG
               BCF         STATUS,RP0        ;SEL BANK0
               MOVLW       0A0H              ;开TMR0中断    5MS
               MOVWF       INTCON      
               MOVLW       0EBH               ;TMR0赋初值5MS
               MOVWF       TMR0;
               RETURN
沙发
jwwhy|  楼主 | 2009-11-25 08:48 | 只看该作者
怎么上面出现了图片啊 郁闷,重新上传.
;-------------------------------------------------------------  
;************************************************************-
;-------------------------------------------------------------  
list  p=16f877A     ; list directive to define processor
#include <p16f877A.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
;-------------------------------------------------------------
;************************************************************-  
;-------------------------------------------------------------
;--------------74LS164显示定义-------------------------------
#DEFINE        CLK164        PORTC,3     ;定义164时钟位 .CLK
#DEFINE        ENABLE164_1   PORTB,1    ;定义164显示使能位,在刷新是关掉数码管以防闪烁
#DEFINE        ENABLE164_2   PORTB,2    ;定义164显示使能位,在刷新是关掉数码管以防闪烁
#DEFINE        ENABLE164_3   PORTB,3   ;定义164显示使能位,在刷新是关掉数码管以防闪烁
#DEFINE        ENABLE164_4   PORTB,4    ;定义164显示使能位,在刷新是关掉数码管以防闪烁
;***************************************************************************
TIME_5MS       EQU         20H               ;延时5MS标志位
W_temp         EQU         21H               ;W暂存
STATUS_temp    EQU         22H               ;STATUS暂存
DIP4           EQU         23H               ;显示高H缓冲
DIP3           EQU         24H               ;显示高L缓冲
DIP2           EQU         25H               ;显示低H缓冲
DIP1           EQU         26H               ;显示低L缓冲
COUNT0         EQU         27H               ;采样04次数
COUNT3         EQU         28H
PD1            EQU         29H               ;查表高H显示
PD2            EQU         2AH               ;查表高L显示
PD3            EQU         2BH               ;查表低H显示
PD4            EQU         2CH               ;查表低L显示
ACCALO         EQU         2DH               ;存放乘数低8位
ACCAHI         EQU          2EH               ;存放乘数高8位
ACCBLO         EQU         2FH               ;存放被乘数低8位和乘积第16~23位
ACCBHI         EQU         30H               ;存放被乘数高8位和乘积第24~31位
ACCCLO         EQU         31H               ;存放乘积低8位
ACCCHI         EQU         32H               ;存放乘积高8位
ACCDLO         EQU         33H               ;临时寄存器
ACCDHI         EQU          34H               ;临时寄存器
TEMP           EQU         35H               ;临时寄存器
TEMP0          EQU         36H               ;AD采样暂存
TEMP1          EQU         37H               ;AD采样高位暂存
TEMP7          EQU         38H               ;;AD采样高位暂存
SIGN           EQU         39H               ;存放乘积的符号
R_LAB          EQU         3AH               ;查表中转暂存
COUNT1         EQU         3BH
COUNT2         EQU         3CH  
COUNT5         EQU         3DH
;-------------------------------------------------------------
;************************************************************-
;-------------------------------------------------------------
              ORG         00H  
              NOP   
              GOTO        MAIN
              ORG         0004H
              GOTO        INTSER
;-------------------------------------------------------------  
;****************中断程序************************************-
;-------------------------------------------------------------  
INTSER:        CALL       PP
               BCF        INTCON,2         ;清溢出位
               MOVLW      0EBH             ;TMR0重新赋初值
               MOVWF      TMR0
               BSF        TIME_5MS,0       ;5MS标志为1
               GOTO       OO
PP:            MOVWF      W_temp
               SWAPF      STATUS,W
               BCF        STATUS,RP0
               MOVWF      STATUS_temp
               Return
OO:            SWAPF      STATUS,W
               MOVWF      STATUS
               SWAPF      W_temp,F
               SWAPF      W_temp,w
               RETFIE
;-------------------------------------------------------------  
;***************** 主程序*********************************   -
;-------------------------------------------------------------
MAIN:          CALL         START           ;初始化子程序
JJ:            CALL         ADC             ;AD采样子程序
               CALL         DISP1           ;AD采样*4*1000/1000子程序
               CALL         TIAOZHENG       ;查表子程序
               CALL         DISPLAY1        ;数码管显示子程序
               GOTO         JJ              ;循环显示
;-------------------------------------------------------------
;******************  显示时间查表   *************************-
;-------------------------------------------------------------
TABLE:       MOVF      R_LAB,0
             ADDWF     PCL,1          ;    将W寄存器内的7段显示码地址放入PC                              
             RETLW     3FH            ;0     
             RETLW     06H            ;1                                
             RETLW     5BH            ;2
             RETLW     4FH            ;3
             RETLW     66H            ;4
             RETLW     6DH            ;5
             RETLW     7DH            ;6
             RETLW     07H            ;7
             RETLW     7FH            ;8
             RETLW     6FH            ;9
;-------------------------------------------------------------
;******************初始化程序*****************************   -
;-------------------------------------------------------------  
START:         BCF          STATUS,RP0        ;SEL BANK0
               BCF          STATUS,RP1
               CLRF         DIP4              ;DIP4 0
               CLRF         DIP3              ;DIP3 0
               CLRF         DIP2              ;DIP2 0
               CLRF         DIP1              ;DIP1 0
               CLRF         PD1               ;PD1  0
               CLRF         PD2               ;PD2  0
               CLRF         PD3               ;PD3  0
               CLRF         PD4               ;PD4  0
               CLRF         TEMP              ;TEMP 0
               CLRF         TEMP0             ;TEMP0 0
               CLRF         TEMP1             ;TEMP1 0
               CLRF         TEMP7             ;TEMP7 0
               CLRF         COUNT0            ;COUNT0 0
               CLRF         COUNT3            ;COUNT3 0
               CLRF         ACCALO            ;ACCALO 0
               CLRF         ACCAHI            ;ACCAHO 0
               CLRF         ACCBLO            ;ACCBLO 0
               CLRF         ACCBHI            ;ACCBHO 0
               CLRF         ACCCLO            ;ACCCLO 0
               CLRF         ACCCHI            ;ACCCHO 0
               CLRF         ACCDLO            ;ACCDLO 0
               CLRF         ACCDLO            ;ACCDLO 0
               CLRF         PORTA             ;PORTA 0
               CLRF         R_LAB             ;查表中转暂存
               CLRF         COUNT5
               BSF          STATUS,RP0        ;SEL BANK1
               MOVLW        0EH
               MOVWF        ADCON1            ;RA1-RA5为普通I/0口
               MOVLW        3FH
               MOVWF        TRISA             ;RA1/RA5为输入
               BCF          STATUS,RP0        ;SEL BANK0
               CLRF         PORTB             ;PORTB 0
               BSF          STATUS,RP0
               MOVLW        00H
               MOVWF        TRISB             ;TRISB 为输出口
               BCF          OPTION_REG,7   
               BCF          STATUS,RP0        ;SEL BANK0
               CLRF         PORTC             ; PORTC  0
               BSF          STATUS,RP0        ;BANK1
               MOVLW        00H
               MOVWF        TRISC             ;PORTC OUTPUT
               BCF          STATUS,RP0        ;BANK0
               CLRF         PORTD             ;PORTD 0
               BSF          STATUS,RP1        ;BANK1
               MOVLW        00H
               MOVWF        TRISD             ;PORTD  OUTPUT
               BCF          STATUS,RP0        ;BANK0
               CLRF         PORTE             ;PORTE  0
               BSF          STATUS,RP1        ;BANK 1
               MOVLW        00H
               MOVWF        PORTE             ;PORTE OUTPUT
               BSF          STATUS,RP0
               BCF         STATUS,RP1        ;SEL BANK1
               MOVLW       07H               ;定时归TMR0   ,分频比为256
               MOVWF       OPTION_REG
               BCF         STATUS,RP0        ;SEL BANK0
               MOVLW       0A0H              ;开TMR0中断    5MS
               MOVWF       INTCON      
               MOVLW       0EBH               ;TMR0赋初值5MS
               MOVWF       TMR0;
               RETURN

使用特权

评论回复
板凳
jwwhy|  楼主 | 2009-11-25 08:49 | 只看该作者
;**************74LS164发送子程序****************************
DISPLAY1:      BCF          STATUS,RP0    ;选择体0
               BCF          STATUS,RP1
FSBCD:         MOVLW        08H           ;发送循环次数
               MOVWF        COUNT5
FSBCD_1        BCF          CLK164        ;时钟位清0
               MOVF         PD1,0         ;显示位1准备送到去74LS164
               ANDLW        80H           ;只保留最高位
               IORWF        PORTD,1       ;到PORTD口去
               BSF          CLK164        ;打开时钟控制
               NOP
               BCF          CLK164        ;关闭时钟控制
               RLF          PD1,1         ;左移
               DECFSZ       COUNT5,1      ;发送完毕否
               GOTO         FSBCD_1       ;没有,
               BSF          ENABLE164_1   ;开显示最高位1
;*******************************************************
DISPLAY2:      BTFSS        TIME_5MS,0    ;延时5MS
               GOTO         DISPLAY2     
               BCF          TIME_5MS,0    ;5mS 标志位清0
              
               BCF          ENABLE164_1   ;关显示最高位1
FSBCD_2:       MOVLW        08H           ;发送循环次数
               MOVWF        COUNT5
            
FSBCD_3        BCF          CLK164        ;时钟位清0
               MOVF         PD2,0         ;显示位2准备送到去74LS164
               ANDLW        80H           ;只保留最高位
               IORWF        PORTD,1       ;到PORTD口去
               BSF          CLK164        ;打开时钟控制
               NOP
               BCF          CLK164        ;关闭时钟控制
               RLF          PD2,1         ;左移
               DECFSZ       COUNT5,1      ;发送完毕否
               GOTO         FSBCD_3       ;没有
               BSF          ENABLE164_2   ;开显示2
;**********************************************************
DISPLAY3:      BTFSS        TIME_5MS,0    ;延时5MS
               GOTO         DISPLAY3   
               BCF          TIME_5MS,0    ;5mS 标志位清0
               BCF          ENABLE164_2   ;关显示2
FSBCD_4:       MOVLW        08H           ;发送循环次数
               MOVWF        COUNT5
FSBCD_5        BCF          CLK164        ;时钟位清0
               MOVF         PD3,0         ;显示位3准备送到去74LS164
               ANDLW        80H           ;只保留最高位
               IORWF        PORTD,1       ;到PORTD口去
               BSF          CLK164        ;打开时钟控制
               NOP
               BCF          CLK164        ;关闭时钟控制
               RLF          PD3,1
               DECFSZ       COUNT5,1      ;发送完毕否
               GOTO         FSBCD_5
               BSF          ENABLE164_3   ;开显示3
;****************************************************
DISPLAY4:      BTFSS        TIME_5MS,0    ;延时5MS
               GOTO         DISPLAY4  
               BCF          TIME_5MS,0    ;5mS 标志位清0
               
               BCF          ENABLE164_3   ;关显示3
FSBCD_6:       MOVLW        08H           ;发送循环次数
               MOVWF        COUNT5
            
FSBCD_7        BCF          CLK164        ;时钟位清0
               MOVF         PD4,0         ;显示位4准备送到去74LS164
               ANDLW        80H           ;只保留最高位
               IORWF         PORTD,1      ;到PORTD口去
               BSF          CLK164        ;打开时钟控制
               NOP
               BCF          CLK164        ;关闭时钟控制
              
               RLF          PD4,1
               DECFSZ       COUNT5,1      ;发送完毕否
               GOTO         FSBCD_7
               BSF          ENABLE164_4   ;开显示4
;***********************************************
DISPLAY5:    BTFSS    TIME_5MS,0         ;延时5MS
              GOTO     DISPLAY5
              BCF      TIME_5MS,0         ;5mS 标志位清0
              BCF      ENABLE164_4        ;关显示4
              BCF      CLK164             ;
              RETURN
;-------------------------------------------------------------
;************************************************************-
;-------------------------------------------------------------

                 END



仿真发现AD采样运算到查表的数据都是对的,就是最后传数据到74LS164不正常,不知道哪里出问题了,从DISPLAY1以后程序有没有问题,关键是时序.

使用特权

评论回复
地板
jwwhy|  楼主 | 2009-11-25 08:51 | 只看该作者
还有部分没有发,请帮看看74LS164发送子程序有没有问题.

使用特权

评论回复
5
auzxj| | 2009-11-25 09:49 | 只看该作者
楼主,你发这么多代码没人会静下心来看的,更何况还是汇编
我把我的一段用C写的164的代码供你参考吧
/**********************************************************
写164数据子函数
**********************************************************/
void wr_bits(unsigned char num)
{
        unsigned char i;
                for(i=0;i<8;i++)
                {
                        if(num&0x80) //从数据的高位开始送
                        data_164 =1;
                else
                        data_164 =0;
                num<<=1; //向左移动一位
                clk_164 =0; //下降沿将数据写入164
                _nop_();
                clk_164 =1;
                }
}

使用特权

评论回复
6
auzxj| | 2009-11-25 09:50 | 只看该作者
这是管脚声明
sbit data_164 = P0^6; //74HC164串行数据口
sbit clk_164 = P0^7;  //74HC164时钟口

使用特权

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

本版积分规则

83

主题

281

帖子

0

粉丝