51单片机串行口并/串、串/并转换实验

一、实验内容
利用MCS-51单片机P1.2做控制信号(把并转串单元的LOCK和串转并单元的LOCK连接至P1.2。),实现并转串、串转并,并把串转并的数据送到发光二极管单元显示。
二、仿真图

三、代码
C语言实现:

/*

74LS164:串入并出
74LS165:并入串出

*/

#include<reg52.h>
#include<intrins.h>

#define uchar8 unsigned char 
#define uint16 unsigned int

sbit CLK=P1^0;
sbit SH=P2^7;        
uchar8 nSendByte ;
 
void delay1s(void) 
 
void main()
{
   int i;
  
   nSendByte=0x80;
   nSendByte=_crol_(nSendByte,1);
   while(1)
   {
    SH=~SH;
	P0=0x80;
	SH=1;
    for(i=0;i<8;i++)
		{
		 CLK=0;
		 delay1s();
	     CLK=1;		//上升沿有效
		}
   }
}
  
void delay1s(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=167;c>0;c--)
        for(b=171;b>0;b--)
            for(a=16;a>0;a--);
    _nop_();  //if Keil,require use intrins.h
}
 

汇编实现:

/*

74LS164:串入并出
74LS165:并入串出

*/      
        CLK EQU P1.0
        SH  EPQ P2.7
        ORG 0000H
		LJMP START
		ORG 0030H
START:	MOV A,#080H		;1000 0000
        MOV R7,#8
        MOV P0,A
        CLR SH
		NOP 
		SETB SH 
        ACALL DELAY
  OUT:  CPL CLK
		ACALL DELAY
		CPL CLK
		ACALL DELAY 
		DJNZ R7,TLOOP

DELAY:	MOV R6,#0FFH
DELAY1:	MOV R5,#0FFH
		DJNZ R5,$
		DJNZ R6,DELAY1
		RET
		END