以下是我的使用笔记: 74hc166 使用方法(包括级联)
74HC166为8位并入串出芯片,其引脚,时序图如图
硬件介绍,2片74HC166.16位并行输入为16个按键,有键按下,则相应输入为低电平。
注意事项 1,在load并行数据前需要有一个CP的上升的脉冲。 2,在load完并行数据后,输出端Q7已经有了第一个bit的数据,所以后面只需循环移位7次,而不是8次。 若级联n片的话就后面循环8n-1次 否则读出的结果会错位。
以下为单片机相连的基本读程序功能:读取16位串行数据并通过UART 打印出来。如下(测试通过): ;==================================================================== ; Date : 2007 07 10 ; Author : CYH ; Chip : AT89S52 74HC166 ; Function: Receive serial data (8bits/16bit) from 74HC166 (SimScroll) ; ; _________________Registers Defination: ; A :PUT parallel data ; Modified By: CYH ; Date : 2007 07 16 ; two chip 74hc166 receive 16bits data ok,print date form UART ;==================================================================== RBUFF1 EQU 20H ;RECEIVE BUFF 8bit RBUFF2 EQU 21H ;RECEIVE BUFF 8bit
;------8052 Extensions for timer2--- T2CON EQU 0C8H RCAP2L EQU 0CAH RCAP2H EQU 0CBH TL2 EQU 0CCH TH2 EQU 0CDH
;-------pin definition------------ SIMCLK BIT P2.5 ;74HC166 CP SIMCEN BIT P2.4 ;74HC166 CE SIMPEN BIT P2.2 ;74HC166 PE
SIMCLR BIT P2.1 ;74HC166 MR SIMSER1 BIT P2.6 ;74HC166 Q7
ORG 0023H AJMP UART_Interrupt ORG 0040H AJMP MAIN
MAIN: MOV SP,#7FH ACALL Init_UART ACALL READ_74HC166 MOV A,RBUFF1 ACALL SentOneByte MOV A,RBUFF2 ACALL SentOneByte CALL DELAY CALL DELAY AJMP MAIN
;------------------------------- ; A : receive data temp store READ_74HC166: MOV R0,#7 ;counter MOV A,#00H CLR C SETB SIMPEN ;/PE=0 parallel enable input CLR SIMCEN ;/CE=0 clock enable input CLR SIMCLR ;/MR=0 asynchronous master reset(active LOW) CLR SIMCLK ;CLK=0 NOP SETB SIMCLR ;/MR=1
;---------------------
SETB SIMCLK ;CLK=1 CLR SIMPEN ;/PE=0 load parallel data NOP CLR SIMCLK NOP SETB SIMCEN ;/CE=1 inhibit SETB SIMCLK ;CLK=0 UP SETB SIMPEN ;/PE=1 NOP NOP CLR SIMCLK CLR SIMCEN ;/CE=0 enable clock
MOV C,SIMSER1 ;receive first bit RLC A SHIFT:;shift 7 times for bit 6~bit0 SETB SIMCLK ; NOP NOP MOV C,SIMSER1 RLC A CLR SIMCLK NOP ;NOP DJNZ R0,SHIFT ;8 bits MOV RBUFF1,A ;------------------------------------- MOV R0,#8 ;shift the other 8 times CLR A SHIFT1: SETB SIMCLK ; NOP NOP MOV C,SIMSER1 RLC A CLR SIMCLK NOP NOP DJNZ R0,SHIFT1 ;8 bits MOV RBUFF2,A RET ;------initial UART---------- Init_UART:
MOV SCON,#50H; TIMER2 MOV TH2,#0FFH;9600 MOV TL2,#0D9H MOV RCAP2H,#0FFH MOV RCAP2L,#0D9H SETB EA SETB ES MOV T2CON,#34H;TR2=1 RET UART_Interrupt: JB RI,Is_receive CLR TI RETI Is_receive: CLR RI PUSH ACC MOV A,SBUF ACALL SentOneByte POP ACC RETI SentOneByte: clr ES CLR TI MOV SBUF,A Wait: JNB TI,Wait CLR TI SETB ES RET ;---DELAY about 1s------- DELAY: d1: mov r6,#40 d2: mov r7,#40 djnz r7,$ djnz r6,d2 djnz r5,d1 ret END |