精华内容
下载资源
问答
  • 笔者发现不少朋友一点不懂或知道的不全面,编辑这里发布一些硬盘串口与并口比较详细的介绍。希望对接触的朋友有帮助。  为了便于大家理解,有朋友这样介绍串并口硬盘的区别:  通俗的说,串口

    不经常接触电脑的朋友可能会很多一些电脑小知识不理解,今天编辑在电脑爱好者QQ群中就发现有朋友问了一个比较简单,但新手朋友一般不怎么会关注到的问题:什么是串口硬盘,什么是并口硬盘。两者哪个速度快些等。笔者发现不少朋友一点不懂或知道的不全面,编辑这里发布一些硬盘串口与并口比较详细的介绍。希望对接触的朋友有帮助。

     为了便于大家理解,有朋友这样介绍串并口硬盘的区别:

     通俗的说,串口形容一下就是 一条车道,而并口就是有8个车道
    同一时刻能传送8位(一个字节)数据。
    但是并不是并口快,由于8位通道之间的互相干扰。传输受速度就受到了限制。而且当传输出错时,要同时重新传8个位的数据。串口没有干扰,传输出错后重发一位就可以了。所以快比并口快。串口硬盘就是这样被人们重视的。

    下面我们来分享下串口硬盘与并口硬盘数据线的区别,如下图:


    串口硬盘”与“并口硬盘” 区别
     随着技术的成熟,越来越多的主板和硬盘都开始支持SATA(串行ATA),SATA接口逐渐有取代传统的PATA(并行ATA)的趋势。那么SATA和PATA在传输模式上有何区别,SATA相对PATA又有何优势呢?这就正是本文需要讨论的话题。 

    何谓并行ATA 
    ATA其实是IDE设备的接口标准,大部分硬盘、光驱、软驱等等都使用的是ATA接口。譬如现在绝大部分的朋友用的都是并行ATA接口的硬盘,应该对它80针排线的接口是再熟悉不过了吧?平常我们说到硬盘接口,就不得不提到什么Ultra-ATA/100、Ultra-ATA/133,这表示什么呢?这告诉我们该硬盘接口的最大传输速率为100MB/s和133MB/s,且硬盘是以并行的方式进行数据传输,wWw.PC841.CoM所以我们也把这类硬盘称为并行ATA。 

    何谓串行ATA 
    串行ATA全称是Serial ATA,它是一种新的接口标准。与并行ATA的主要不同就在于它的传输方式。它和并行传输不同,它只有两对数据线,采用点对点传输,以比并行传输更高的速度将数据分组传输。现在的串行ATA接口传输速率为150MB/s,而且这个值将会迅速增长。 

    串行ATA和并行ATA传输的区别 
     举个比较夸张的例子,A、B两支队伍在比赛搬运包裹,A代表并行ATA,B代表串行ATA。 
    比赛开始,A派出了40个人用人力搬运包裹,而B只派出去了一辆货车来搬运。在一个来回里他们搬运的包裹数量都相同,大家可以很清楚最后的结果,当然是用货车搬运的B队先把包裹运完,因为货车的速度比人步行的速度快得多多了。同样,串行传输比并行传输的速率高就类似这个道理。 
    回到现实中来,现在的并行ATA接口使用的是16位的双向总线,在1个数据传输周期内可以传输4个字节的数据;而串行ATA使用的8位总线,每个时钟周期能传送1个字节。这两种传输方式除了在每个时钟周期内传输速度不一样之外,在传输的模式上也有根本的区别,串行ATA数据是一个接着一个数据包进行传输,而并行ATA则是一次同时传送数个数据包,虽然表面上一个周期内并行ATA传送的数据更多,但是我们不要忘了,串行ATA的时钟频率要比并行的时钟频率高很多,也就是说,单位时间内,进行数据传输的周期数目更多,所以串行ATA的传输率高于并行ATA的传输率,并且未来还有更大的提升空间。 

    为什么我们要采用串行ATA接口 
     这个回答很简单,当然是为了获得更高的数据传输率。随着当前设备需求的数据传输率越来越高,接口的工作频率也越来越高,并行ATA接口逐渐暴露出一些设计上的“硬伤”,其中最致命的就是并行线路的信号干扰。由于传统并行ATA采用并行的总线传输数据,必须要求各个线路上数据同步,如果数据不能同步,就会出现反复读取数据,导致性能的下降,甚至导致读取数据不稳定。 
    而采用排线设计的数据线,正是数据读取无法更快的“罪魁祸首”。由于并排的高速信号在传输时,会在每条电缆的周围产生微弱的电磁场,进而影响到其他数据线中的数据传递,还会因为线缆的长度和电压的变化而不断变化,随着总线频率的提升,磁场的强度也越来越大,信号干扰的影响也越来越明显。 
    从理论上说串行传输的工作频率可以无限提高,串行ATA就是通过提高工作频率来提升接口传输速率的。因此串行ATA可以实现更高的传输速率,而并行ATA在没有有效地解决信号串扰问题之前,则很难达到这样高的传输速率。 
    并行ATA接口在总线频率方面受到其设计的制约,并不能一味地提升,而随着对数据传输率的要求越来越高,目前最快的并行ATA接口ATA133的频率为33MHz,这个几乎已经达到了并行接口的极限,再继续改造线路已不太现实。所以推出新的接口势在必行。 
    除了传输率较高之外,SATA还有哪些优点呢? 
    1.数据更可靠 
    在校验方面,并行ATA总线只是简单的CRC校验,一旦接收方发现数据传输出现问题,就会自行将这些数据丢弃、然后要求重发,如果数据信号相互干扰过大,就会严重影响硬盘的性能。 
    而串行ATA既对命令进行CRC校验,也对数据分组进行CRC校验,以此提高总线的可靠性。 
    2.连线更简单 
    在数据线方面,并行ATA采用80针的排线,串行ATA由于采用点对点方式传输数据,所以只需要4条线路即可完成发送和接收功能,加上另外的三条地线,一共只需要7条的物理连线就可满足数据传输的需要。由于传输数据线较少,使得SATA在物理线路的电气性能方面的干扰大大减小,这也保证了未来磁盘传输率进一步的提升。 
    和并行ATA相比,串行ATA的数据线更细小,这也使得机箱内部的连线比较容易整理,有助于机箱内部空气的流通,使得机箱内部的散热更好。同样,串行ATA还有采用非排针脚设计的接口和支持热插拔功能等优点。 
    串行ATA推出之后,并行ATA还会存在吗 
     总的说来,串行ATA的优势是很明显的。当然,目前还有一些相对比较低速的设备在使用并行ATA,如光驱、刻录机等设备,并行ATA的传输率已经可以满足的需要,所以,并行和串行会在很长一段时间内并存。当然,串行ATA支持所有的ATA设备,也可支持光驱等设备,但是串行ATA目前会先运用在硬盘上,未来将会支持更多的存储设备。

    写在最后

     目前我们使用的硬盘绝大多数都是串口STA硬盘STA,在比较老的电脑中有时候还可以看到以前的并口硬盘,随着科学技术的发展,并口硬盘正逐渐的退出了我们的视线,所以大家在DIY组装电脑的过程目前来讲可购买的都是串口硬盘,但作为电脑爱好者我们还是很有必要掌握串并口硬盘之间的关系。


    展开全文
  • 并口串口驱动.zip

    2019-03-25 11:27:29
    驱动支持PCI、PCIE转的串并口,支持DH382、TXIC382、WCH382、MCS98XX、MCS99XX、AX99100
  • 阐述PC机的串口与并口在单片机开发中的应用。  关键词:并口编程 串口通信 在线编程 ISP MTV230 W78E516B  引 言  1 在线编程简介  51内核的单片机在线编程模式一般分为两大类。一类是使用JTAG协议...
  • 利用串口与并口实现51内核单片机的在线编程来源:单片机及嵌入式系统应用 作者:浙江大学 张懿摘要:详细说明利用并口模拟I2C总线协议,实现Myson MTV230芯片的在线编程(ISP)过程,以及利用PC机的串口通信实现...
  • 作为一个电路设计师,我整个职业生涯都花在接口电路上,串行并行都做过,且速度不慢(DDR3-1600Mbps, SerDes 30Gbps),这个问题不答实在技痒难耐。已经看到的答案中,大家基本上都命中了关键的知识点,但是没有把背后...
  • 单片机实现并口转串口的功能,并口输入,串口输出
  • 并口转串口程序

    2012-08-30 22:44:29
    并口转串口程序,希望有帮助!
  • AD7606原理图库+并口串口原理图。还有完整的并口接口原理图
  • STM32采用并口串口驱动12864,根据STM32的资源配置,任选两种方式都可以!
  • 串口并口的比较

    2020-11-19 01:26:06
    这两个接口是最早出现在计算机中的标准接口即RS232标准,在这个标准产生之前每个厂家生产的计算机的外设也都计算机一起配套生产的,其它厂家的外设是不兼容的。RS232标准实在太慢了,现在剩下的这两个接口分别...
  • pci/pcie打印卡串口/并口卡驱动是一款专门用来修复串口没反应的驱动程序,主要解决用户驱动无法连接或者识别等功能,有需要者欢迎下载!pci/pcie驱动驱动简介:现在的主板很多都不带有并口或或者串口,而原来很多...
  • ch352pci转并口串口卡驱动是一款专门用户进行pci卡安装的驱动程序,不仅可以成功实现pci口转串口,还可可以保证能够有不俗的性能表现。有需要的朋友欢迎前来下载体验!ch352pci转并口串口卡驱动介绍现在新型号的主板...
  • 阐述PC机的串口与并口在单片机开发中的应用。关键词:并口编程 串口通信 在线编程 ISP MTV230 W78E516B引 言1 在线编程简介 51内核的单片机在线编程模式一般分为两大类。一类是使用JTAG协议的在线编程模式。这类...
  • LCD12864 并口串口通用程序

    千次阅读 2019-03-27 21:42:46
    #if 0 //并口 /*****等待LCD空闲*****/ void WaitBusy(void) { uint32_t i=500; while(i--); } void Lcd_WriteData(uint8_t dispdata) { LCD_RS_1; LCD_RW_0; LCD_EN_1; WaitBusy(); ...

     

    #if 0 //并口
    
    /*****等待LCD空闲*****/
    void WaitBusy(void)
    {
         uint32_t i=500;
         while(i--);
    }
    void Lcd_WriteData(uint8_t dispdata)
    {
     
    	   LCD_RS_1;
         LCD_RW_0;
         LCD_EN_1;
         WaitBusy();
    	
    
    		
    	(dispdata&0x01) >0 ?	GPIO_SetBits(GPIOE, GPIO_Pin_14): GPIO_ResetBits(GPIOE, GPIO_Pin_14);
    	(dispdata&0x02) >0 ?	GPIO_SetBits(GPIOE, GPIO_Pin_13): GPIO_ResetBits(GPIOE, GPIO_Pin_13);
    	(dispdata&0x04) >0 ?	GPIO_SetBits(GPIOE, GPIO_Pin_12): GPIO_ResetBits(GPIOE, GPIO_Pin_12);
    	(dispdata&0x08) >0 ?	GPIO_SetBits(GPIOE, GPIO_Pin_11): GPIO_ResetBits(GPIOE, GPIO_Pin_11);
    	(dispdata&0x10) >0 ?	GPIO_SetBits(GPIOE, GPIO_Pin_10): GPIO_ResetBits(GPIOE, GPIO_Pin_10);
    	(dispdata&0x20) >0 ?	GPIO_SetBits(GPIOE, GPIO_Pin_9 ): GPIO_ResetBits(GPIOE, GPIO_Pin_9 );
    	(dispdata&0x40) >0 ?	GPIO_SetBits(GPIOE, GPIO_Pin_8 ): GPIO_ResetBits(GPIOE, GPIO_Pin_8 );
    	(dispdata&0x80) >0 ?	GPIO_SetBits(GPIOE, GPIO_Pin_7 ): GPIO_ResetBits(GPIOE, GPIO_Pin_7 );
    							
    	  LCD_EN_0;
    }
    
    /*****写指令代码*****/
    void Lcd_WriteCmd(uint8_t cmdcode)
    {
    	
    
    	 LCD_RS_0;
    	 LCD_RW_0;
    	 LCD_EN_1;
    	 WaitBusy();
    	(cmdcode&0x01) >0 ?	GPIO_SetBits(GPIOE, GPIO_Pin_14): GPIO_ResetBits(GPIOE, GPIO_Pin_14);
    	(cmdcode&0x02) >0 ?	GPIO_SetBits(GPIOE, GPIO_Pin_13): GPIO_ResetBits(GPIOE, GPIO_Pin_13);
    	(cmdcode&0x04) >0 ?	GPIO_SetBits(GPIOE, GPIO_Pin_12): GPIO_ResetBits(GPIOE, GPIO_Pin_12);
    	(cmdcode&0x08) >0 ?	GPIO_SetBits(GPIOE, GPIO_Pin_11): GPIO_ResetBits(GPIOE, GPIO_Pin_11);
    	(cmdcode&0x10) >0 ?	GPIO_SetBits(GPIOE, GPIO_Pin_10): GPIO_ResetBits(GPIOE, GPIO_Pin_10);
    	(cmdcode&0x20) >0 ?	GPIO_SetBits(GPIOE, GPIO_Pin_9 ): GPIO_ResetBits(GPIOE, GPIO_Pin_9 );
    	(cmdcode&0x40) >0 ?	GPIO_SetBits(GPIOE, GPIO_Pin_8 ): GPIO_ResetBits(GPIOE, GPIO_Pin_8 );
    	(cmdcode&0x80) >0 ?	GPIO_SetBits(GPIOE, GPIO_Pin_7 ): GPIO_ResetBits(GPIOE, GPIO_Pin_7 );
    		
        LCD_EN_0;
    }
    void LCD_Clean(void)
    {
     	 Lcd_WriteCmd(0x01);
       delayms(20);
    }
    
    /*****写数据*****/
    
    
    /*****初始化LCD*****/
    void Lcd_Init(void)
    {
    	
    	GPIO_InitTypeDef  GPIO_InitStructure; 
    	RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE, ENABLE); 
    	
    	
    		//LCD - DATA
       GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14;
       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
       GPIO_Init(GPIOE, &GPIO_InitStructure);
    	 //LCD - RS RW EN
       GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;
       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
       GPIO_Init(GPIOC, &GPIO_InitStructure);
    	
    	
    
         delayms(50);
         Lcd_WriteCmd(0x30);//扩充指令操作		 
         delayms(1);
         Lcd_WriteCmd(0x30);//基本指令操作
         delayms(1);
         Lcd_WriteCmd(0x0c); //显示开,关光标
    	   delayms(1);
         Lcd_WriteCmd(0x01); //清除LCD的显示内容
    		 delayms(20);
    }
    
    
    
    
    /*****显示汉字*****/
    void hanzi_Disp(uint8_t x,uint8_t y,const uint8_t  *s)
    {
         Lcd_WriteCmd(addr_tab[8*x+y]);
         while(*s>0)
         {
         Lcd_WriteData(*s);
         s++;
         }
    		 
    }
    /***************************************************************/
    
    /***************************************************************/
    void OrigiNumToDisNum(uint8_t x,uint8_t y,unsigned long int OriginNum)
    {
    	unsigned char i;
    	unsigned char j;
    	DisNum1[0] =  OriginNum/10000000+0x30;
    	DisNum1[1] = (OriginNum%10000000)/1000000+0x30;
    	DisNum1[2] = (OriginNum%1000000)/100000+0x30;
    	DisNum1[3] = (OriginNum%100000)/10000+0x30;
    	DisNum1[4] = (OriginNum%10000)/1000+0x30;
    	DisNum1[5] = (OriginNum%1000)/100+0x30;
    	DisNum1[6] = (OriginNum%100)/10+0x30;
    	DisNum1[7] = (OriginNum%10)+0x30;
    
    	for(j=0;j<8;j++)
    	{
    		if(DisNum1[j]!=0x30)
    		{
    			break;
    		}
    	}
    	Lcd_WriteCmd(addr_tab[8*x+y]);
    	for(i=j;i<8;i++)
    	{
    		Lcd_WriteData(DisNum1[i]);
    	}
    }
    
    void OrigiNumToDisNumPhone(uint8_t x,uint8_t y,uint64_t OriginNum)
    {
    	unsigned char i;
    	unsigned char j;
    
    
    	
    			DisNum1[11]=OriginNum%10+'0';
    	    DisNum1[10]=OriginNum/10%10+'0';
    	    DisNum1[9]=OriginNum/100%10+'0';
    			DisNum1[8]=OriginNum/1000%10+'0';
    			DisNum1[7]=OriginNum/10000%10+'0';
    			DisNum1[6]=OriginNum/100000%10+'0';
    			DisNum1[5]=OriginNum/1000000%10+'0';			
    			DisNum1[4]=OriginNum/10000000%10+'0';
    			DisNum1[3]=OriginNum/100000000%10+'0';
    			DisNum1[2]=OriginNum/1000000000%10+'0';
    			DisNum1[1]=OriginNum/10000000000%10+'0';
    			DisNum1[0]=OriginNum/100000000000%10+'0';
    	
    	
    	
    	
    	
    	
    	
    	for(j=0;j<12;j++)
    	{
    		if(DisNum1[j]!=0x30)
    		{
    			break;
    		}
    	}
    	Lcd_WriteCmd(addr_tab[8*x+y]);
    	for(i=j;i<12;i++)
    	{
    		Lcd_WriteData(DisNum1[i]);
    	}
    }
    
    void shuzi_Disp(uint8_t x,uint8_t y,uint8_t s)
    {
         Lcd_WriteCmd(addr_tab[8*x+y]);
    
         Lcd_WriteData(s);
    
    }
    
    #else //串口
    /***********************************************************************
    12864液晶的4线串行驱动模式
    
    引脚定义:RS(CS)=====>PA0
              RW(SID)====>PA1
              EN(SCLK)===>PA2
    		  RST=====>PA3
        PSB为硬件控制,接高电平为8位或4位的并行模式,接低电平为串行模式
    ************************************************************************/
    
    void LCD12864_Send(unsigned char Data_Command)
    {
    	unsigned char i;
    	
    	Set_CS();    //CS为高电平,使能CS
    	
    	for(i=0;i<8;i++)
    	{
    		if((Data_Command & 0x80)!=0)        //发送的是1
    			Set_SID();              //SID为高电平
    		else 
    			if(((Data_Command & 0x80)==0))  //发送的是0
    				Clr_SID();         //SID为低电平
    	       
    		
    		Set_SCLK();                  //SCLK为高电平
    		Clr_SCLK();                  //SCLK为低电平
    		
    		Data_Command<<=1;                   //完成一次发送后数据左移一位,等待第二次发送	
    	}
    	
    	Clr_CS();     //CS为低电平,失能CS
    }
    
    
    //LCD12864写数据函数
    //入口参数:Data(要写入的数据)
    
    void Lcd_WriteData(unsigned char Data)
    {
    	unsigned char Save_Data_1,Save_Data_2;
    	
    	Save_Data_1=Data & 0xf0;        //数据前四位
    	Save_Data_2=(Data & 0x0f)<<4;   //数据后四位
    	
    	LCD12864_Send(0xfa);            // 发送第一固定字节数据指令
    	LCD12864_Send(Save_Data_1);     // 发送数据前四位
    	LCD12864_Send(Save_Data_2);     // 发送数据后四位	
    }
    
    
    //LCD12864写命令函数
    //入口参数:Command(要写入的命令)
    
    void Lcd_WriteCmd(unsigned char Command)
    {
    	unsigned char Save_Command_1,Save_Command_2;
    	
    	Save_Command_1=Command & 0xf0;        //命令前四位
    	Save_Command_2=(Command & 0x0f)<<4;   //命令后四位
    	
    	LCD12864_Send(0xf8);                  // 发送第一固定字节命令指令
    	LCD12864_Send(Save_Command_1);        // 发送命令前四位
    	LCD12864_Send(Save_Command_2);        // 发送命令后四位	
    }
    
    
    //LCD12864送显示函数
    //入口参数:x表示行;y表示列;*p表示要写入的数据
    
    void LCD12864_Display(unsigned char x,unsigned char y,unsigned char *p)
    {
    	if(x==1)
    		x=0;
    	else
    		if(x==2)
    			x=2;
    		else
    			if(x==3)
    				x=1;
    			else 
    				if(x==4)
    					x=3;
    					
    	Lcd_WriteCmd(0x80+8*x+(y-1));
    	
    	while(*p)
    	{
    		Lcd_WriteData(*p);
    		p++;
    	}	
    }
    
    
    //LCD12864初始化函数
    //入口参数:无
    
    void Lcd_Init()
    {	
    	GPIO_InitTypeDef GPIO_InitStructure;
    	RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE, ENABLE); 
    	
    
    	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;		//	PB口全部设置成 推挽输出 GPIO_Pin_None表示无引脚被选中
    	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //	GPIO_Speed_10MHz	GPIO_Speed_2MHz
    	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;	//  GPIO_Mode_Out_OD 开漏输出	GPIO_Mode_AF_OD 复用开漏输出	GPIO_Mode_AF_PP 复用推挽输出
    	GPIO_Init(GPIOC,&GPIO_InitStructure);			//指定哪个端口
    
    	Clr_RST();
    	delayms(10);
    	Set_RST();
    
    	Lcd_WriteCmd(0x01);      //清屏指令
    	delayms(1);                      //1us*参数,1ms
    	Lcd_WriteCmd(0x06);      //进入设定点,游标右移指令
    	delayms(70);                        //1us*参数,70us
    	Lcd_WriteCmd(0x0c);      //显示开指令
    	delayms(70);                       //1us*参数,70us
    	
    }
    
    void LCD12864_Cls()
    {
    	Lcd_WriteCmd(0x01);      //清屏指令;
    }
    
    void LCD12864()
    {
    	LCD12864_Display(1,1,"Good!           ");
    
    }
    void LCD_Clean(void)
    {
     	 Lcd_WriteCmd(0x01);
       delayms(20);
    }
    
    /*****显示汉字*****/
    void hanzi_Disp(uint8_t x,uint8_t y,const uint8_t  *s)
    {
         Lcd_WriteCmd(addr_tab[8*x+y]);
         while(*s>0)
         {
         Lcd_WriteData(*s);			
         s++;
         }
    		 
    }
    /***************************************************************/
    
    /***************************************************************/
    void OrigiNumToDisNum(uint8_t x,uint8_t y,unsigned long int OriginNum)
    {
    	unsigned char i;
    	unsigned char j;
    	DisNum1[0] =  OriginNum/10000000+0x30;
    	DisNum1[1] = (OriginNum%10000000)/1000000+0x30;
    	DisNum1[2] = (OriginNum%1000000)/100000+0x30;
    	DisNum1[3] = (OriginNum%100000)/10000+0x30;
    	DisNum1[4] = (OriginNum%10000)/1000+0x30;
    	DisNum1[5] = (OriginNum%1000)/100+0x30;
    	DisNum1[6] = (OriginNum%100)/10+0x30;
    	DisNum1[7] = (OriginNum%10)+0x30;
    
    	for(j=0;j<8;j++)
    	{
    		if(DisNum1[j]!=0x30)
    		{
    			break;
    		}
    	}
    	Lcd_WriteCmd(addr_tab[8*x+y]);
    	for(i=j;i<8;i++)
    	{
    		Lcd_WriteData(DisNum1[i]);
    	}
    }
    
    void OrigiNumToDisNumPhone(uint8_t x,uint8_t y,uint64_t OriginNum)
    {
    	unsigned char i;
    	unsigned char j;
    
    
    	
    			DisNum1[11]=OriginNum%10+'0';
    	    DisNum1[10]=OriginNum/10%10+'0';
    	    DisNum1[9]=OriginNum/100%10+'0';
    			DisNum1[8]=OriginNum/1000%10+'0';
    			DisNum1[7]=OriginNum/10000%10+'0';
    			DisNum1[6]=OriginNum/100000%10+'0';
    			DisNum1[5]=OriginNum/1000000%10+'0';			
    			DisNum1[4]=OriginNum/10000000%10+'0';
    			DisNum1[3]=OriginNum/100000000%10+'0';
    			DisNum1[2]=OriginNum/1000000000%10+'0';
    			DisNum1[1]=OriginNum/10000000000%10+'0';
    			DisNum1[0]=OriginNum/100000000000%10+'0';
    	
    	
    	
    	
    	
    	
    	
    	for(j=0;j<12;j++)
    	{
    		if(DisNum1[j]!=0x30)
    		{
    			break;
    		}
    	}
    	Lcd_WriteCmd(addr_tab[8*x+y]);
    	for(i=j;i<12;i++)
    	{
    		Lcd_WriteData(DisNum1[i]);
    	}
    }
    
    
    
    
    void shuzi_Disp(uint8_t x,uint8_t y,uint8_t s)
    {
         Lcd_WriteCmd(addr_tab[8*x+y]);
    
         Lcd_WriteData(s);
    
    }
    
    #endif
    
    #if 0 //并口
    //PC0~2 PE7~14
    
    
    #define  LCD_RS_1    GPIO_SetBits(GPIOC, GPIO_Pin_2)//PORTB|=1<<PB5
    #define  LCD_RS_0    GPIO_ResetBits(GPIOC, GPIO_Pin_2) //PORTB&=~(1<<PB5)
    #define  LCD_RW_1    GPIO_SetBits(GPIOC, GPIO_Pin_1)//PORTB|=1<<PB6
    #define  LCD_RW_0    GPIO_ResetBits(GPIOC, GPIO_Pin_1) //PORTB&=~(1<<PB6)
    #define  LCD_EN_1    GPIO_SetBits(GPIOC, GPIO_Pin_0)//PORTB|=1<<PB7
    #define  LCD_EN_0    GPIO_ResetBits(GPIOC, GPIO_Pin_0)//PORTB&=~(1<<PB7)
    
    
    
    #else //串口
    
    #define  LCD_RS_1    GPIO_SetBits(GPIOC, GPIO_Pin_2)//PORTB|=1<<PB5
    #define  LCD_RS_0    GPIO_ResetBits(GPIOC, GPIO_Pin_2) //PORTB&=~(1<<PB5)
    #define  LCD_RW_1    GPIO_SetBits(GPIOC, GPIO_Pin_1)//PORTB|=1<<PB6
    #define  LCD_RW_0    GPIO_ResetBits(GPIOC, GPIO_Pin_1) //PORTB&=~(1<<PB6)
    #define  LCD_EN_1    GPIO_SetBits(GPIOC, GPIO_Pin_0)//PORTB|=1<<PB7
    #define  LCD_EN_0    GPIO_ResetBits(GPIOC, GPIO_Pin_0)//PORTB&=~(1<<PB7)
    
    //函数声明
    
    #define Set_CS()   LCD_RS_1
    #define Set_SID()  LCD_RW_1
    #define Set_SCLK() LCD_EN_1
    #define Set_RST()  PCout(3)=1
    
    #define Clr_CS()   LCD_RS_0
    #define Clr_SID()  LCD_RW_0
    #define Clr_SCLK() LCD_EN_0
    #define Clr_RST()  PCout(3)=0
    
    void LCD12864(void);
    void LCD12864_Init(void);
    void LCD12864_Display(unsigned char x,unsigned char y,unsigned char *p);
    void LCD12864_Cls(void);
    void Lcd_WriteCmd(unsigned char Command);
    void LCD12864();
    
    #endif

    用微信扫描二维码

    为博主 打个赏

    金额随意 快来“打”我呀 要买枸杞当归补补~~

    转自:https://www.zhjm.site/wordpress/?p=295

    展开全文
  • 随着科技技术水平的逐渐成熟,如今越来越多的主板和硬盘都开始支持串行ATA(SATA)接口,逐步...其实串口硬盘和并口硬盘的主要区别在于硬盘主板的传输模式不同,物理接口也不一样。 什么是并行ATA ATA其实是IDE设备的

    随着科技技术水平的逐渐成熟,如今越来越多的主板和硬盘都开始支持串行ATA(SATA)接口,逐步取代传统的并行ATA(PATA)接口。那么,到底什么是并口硬盘和串口硬盘?它们又有何区别呢?

    SATA硬盘,也就是一般所说的串口硬盘,使用的是高频率的串行通信方式,其典型的接口外观如下图:在这里插入图片描述
    PATAIDE硬盘,或称IDE硬盘,并口硬盘,使用的是多条信号线并行通信方式,其典型的接口外观如下图:在这里插入图片描述
    其实串口硬盘和并口硬盘的主要区别在于硬盘与主板的传输模式不同,物理接口也不一样。

    什么是并行ATA

    ATA其实是IDE设备的接口标准,大部分硬盘、光驱、软驱等等都使用的是ATA接口。譬如现在绝大部分的朋友用的都是并行ATA接口的硬盘,应该对它80针排线的接口是再熟悉不过了吧?平常我们说到硬盘接口,就不得不提到什么Ultra-ATA/100、Ultra-ATA/133,这表示什么呢?这告诉我们该硬盘接口的最大传输速率为100MB/s和133MB/s,且硬盘是以并行的方式进行数据传输,所以我们也把这类硬盘称为并行ATA。

    什么是串行ATA

    串行ATA全称是Serial ATA,它是一种新的接口标准。与并行ATA的主要不同就在于它的传输方式。它和并行传输不同,它只有两对数据线,采用点对点传输,以比并行传输更高的速度将数据分组传输。现在的串行ATA接口传输速率为150MB/s,而且这个值将会迅速增长。

    串行ATA和并行ATA传输的区别

    举个比较夸张的例子,A、B两支队伍在比赛搬运包裹,A代表并行ATA,B代表串行ATA。

    比赛开始,A派出了40个人用人力搬运包裹,而B只派出去了一辆货车来搬运。在一个来回里他们搬运的包裹数量都相同,大家可以很清楚最后的结果,当然是用货车搬运的B队先把包裹运完,因为货车的速度比人步行的速度快得多多了。同样,串行传输比并行传输的速率高就类似这个道理。

    回到现实中来,现在的并行ATA接口使用的是16位的双向总线,在1个数据传输周期内可以传输4个字节的数据;而串行ATA使用的8位总线,每个时钟周期能传送1个字节。这两种传输方式除了在每个时钟周期内传输速度不一样之外,在传输的模式上也有根本的区别,串行ATA数据是一个接着一个数据包进行传输,而并行ATA则是一次同时传送数个数据包,虽然表面上一个周期内并行ATA传送的数据更多,但是我们不要忘了,串行ATA的时钟频率要比并行的时钟频率高很多,也就是说,单位时间内,进行数据传输的周期数目更多,所以串行ATA的传输率高于并行ATA的传输率,并且未来还有更大的提升空间。

    为什么要采用串行ATA接口

    这其实很容易理解,当然是为了获得更高的数据传输率。随着当前设备需求的数据传输率越来越高,接口的工作频率也越来越高,并行ATA接口逐渐暴露出一些设计上的“硬伤”,其中最致命的就是并行线路的信号干扰。由于传统并行ATA采用并行的总线传输数据,必须要求各个线路上数据同步,如果数据不能同步,就会出现反复读取数据,导致性能的下降,甚至导致读取数据不稳定。

    而采用排线设计的数据线,正是数据读取无法更快的“罪魁祸首”。由于并排的高速信号在传输时,会在每条电缆的周围产生微弱的电磁场,进而影响到其他数据线中的数据传递,还会因为线缆的长度和电压的变化而不断变化,随着总线频率的提升,磁场的强度也越来越大,信号干扰的影响也越来越明显。

    从理论上说串行传输的工作频率可以无限提高,串行ATA就是通过提高工作频率来提升接口传输速率的。因此串行ATA可以实现更高的传输速率,而并行ATA在没有有效地解决信号串扰问题之前,则很难达到这样高的传输速率。

    并行ATA接口在总线频率方面受到其设计的制约,并不能一味地提升,而随着对数据传输率的要求越来越高,目前最快的并行ATA接口ATA133的频率为33MHz,这个几乎已经达到了并行接口的极限,再继续改造线路已不太现实。所以推出新的接口势在必行。

    展开全文
  • Protues仿真实例-51单片机-并口转串口.rar
  • ST7920驱动 并口+串口

    2010-08-08 12:25:31
    ST7920 显示驱动,包括并口串口
  • USB并口串口双向通讯

    2018-10-10 09:19:36
    支持打印机类的USB、并口串口的双向通讯; 资源为动态链接库工程; 源代码可选取部分功能,用于自己的项目工程;
  • USB TO RS232 打印口 串口并口驱动
  • 并口串口通信

    2013-03-13 09:29:07
    串口通信中接收数据时延迟处理缓存处理的解决方案
  • NULL 博文链接:https://lysfrjgc-2012-126-com.iteye.com/blog/1628297
  • 串口与并口的区别

    万次阅读 2017-02-23 22:07:16
     串行接口Serial Interface是指数据一位位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信,并可以利用电话线,从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。...
    
    串行接口Serial Interface是指数据一位位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信,并可以利用电话线,从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。
    串行接口
    一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。串行通讯的特点是:数据位传送,传按位顺序进行,最少只需一根传输线即可完成;成本低但传送速度慢。串行通讯的距离可以从几米到几千米;根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种。

    并行接口,指采用并行传输方式来传输数据的接口标准。从最简单的一个并行数据寄存器或专用接口集成电路芯片如8255、6820等,一直至较复杂的SCSI或IDE并行接口,种类有数十种。一个并行接口的接口特性可以从两个方面加以描述:1. 以并行方式传输的数据通道的宽度,也称接口传输的位数;2. 用于协调并行数据传输的额外接口控制线或称交互信号的特性。 数据的宽度可以从1~128位或者更宽,最常用的是8位,可通过接口一次传送8个数据位。在计算机领域最常用的并行接口是通常所说的LPT接口。
    展开全文
  • 详细说明利用并口模拟I2C总线协议,实现Myson MTV230芯片的在线编程(ISP)过程,以及利用PC机的串口通信实现Winbond W78E516B的在线编程(ISP)过程;阐述PC机的串口与并口在单片机开发中的应用。
  • 可以测试串口并口及默认打印机的打印功能,共同学习一下。
  • 详细解释了 串口并口的区别,并且说明了以后的发展趋势
  • 文档详细介绍了串口与并口的针脚定义及功能。
  • 阿尔通PCI并口卡/串口卡驱动安装后可让阿尔通PCI、PCI-E并口卡等设备自动识别硬件型号,帮助用户正常使用。本驱动兼容多种型号卡,安装后即可正常使用。 驱动支持卡类型 一、PCI卡 1、PCI 9835 2串1并卡 2、PCI ...
  • C# 串口和USB通信编程 (串口和USB通信,U盘) 包括转串口、并口、usb打印口
  • 串口、COM口、并口、RS232、USB

    千次阅读 2020-02-23 16:36:02
    可以采用二线四线方式,二线制可实现真正的多点双向通信,而采用四线连接时, RS-422 一样只能实现点对多的通信,即只能有一个主(Master)设备,其余为从设备,但它比 RS-422 有改进,无论四线还是二线连接方式...
  • 串口 并口 USB

    2012-10-24 12:03:57
    串口并口,USB等各种接口做了详细的总结介绍。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,127
精华内容 4,450
关键字:

并口与串口