原理图呢?
按你的代码推断
单片机每次只输出8位数据
以你的描述来看
你用了并联的接线方法
应改用串联的接线方法并在代码中输出16位数据
- SDATA_595 EQU P1.0 ;串行数据输入
- SCLK_595 EQU P1.2 ;移位时钟脉冲
- RCK_595 EQU P1.1 ;输出锁存器控制脉冲
- ;================================================
- ORG 0000H
- LJMP MAIN
- ORG 0030H
- ;================================================
- MAIN:MOV SP,#60H
- MOV R0,#0FEH
- MOV R1,#0FFH
- CLR SCLK_595
- MAIN1:
- CALL OUT_595
- CALL DELAY
- CLR C
- MOV A,R1
- RLC A
- MOV R1,A
- MOV A,R0
- RLC A
- MOV R0,A
- JNC MAIN1
- ORL 01H, #01H;地址01H即R1
- JMP MAIN1
- ;---------------------------------------------------------------
- ;输出锁存器输出数据子程序
- ;---------------------------------------------------------------
- OUT_595:
- MOV R4,#08H
- MOV A,R1;//输出高八位
- WR_LOOP1:
- RLC A
- MOV SDATA_595,C
- SETB SCLK_595 ;上升沿发生移位
- NOP
- NOP
- CLR SCLK_595
- DJNZ R4,WR_LOOP1
- MOV R4,#08H
- MOV A,R0//输出低八位
- WR_LOOP2:
- RLC A
- MOV SDATA_595,C
- SETB SCLK_595 ;上升沿发生移位
- NOP
- NOP
- CLR SCLK_595
- DJNZ R4,WR_LOOP2
- CLR RCK_595
- NOP
- NOP
- SETB RCK_595 ;上升沿将数据送到输出锁存器
- NOP
- NOP
- NOP
- CLR RCK_595
- RET
- ;--------------------------------------------------------------
- ;延时子程序
- ;--------------------------------------------------------------
- DELAY:MOV R5,#03H
- DEL0:MOV R6,#0FFH
- DEL1:MOV R7,#0FFH
- DJNZ R7,$
- DJNZ R6,DEL1
- DJNZ R5,DEL0
- RET
- ;---------------------------------------------------------------
- END
复制代码
|