精华内容
下载资源
问答
  • 该接口电路不仅能同时进行数据发送和接收,也可作为一个同步移位寄存器使用。当以此类型单片机构成分布式多级应用系统,器件本身的串口资源就不够用了。笔者在实际开发中,查阅了有关资料,总结出如下两种常用而...
  • 摘要:S2067是AMCC公司生产的具有双向接收和发送功能的高速串行数据传输芯片。它内含两个独立的收发器,可用于高速数据...S2067有两个用于接收和发送串行I/O,这两个串行I/O利用光信号或电信号进行数据传输
  • 一,初学者的要求1、掌握51单片机串行口的结构和工作特点。2、掌握双机串行通信主、从机的区别与...利用K1作为主机发送启动按钮。 具体工作方式可在串行口方式一、二、三中灵活选择,例程为方式一实现。三,程序代...

    一,初学者的要求

    1、掌握51单片机串行口的结构和工作特点。

    2、掌握双机串行通信时主、从机的区别与联系。

    3、熟练掌握串行中断服务程序的设计方法及技巧。

    4、掌握Proteus仿真软件中双机通信电路的画法和实际硬件电路的注意事项。

    二,本次实践任务

    如后图所示,实现编程将主机数据传输到从机中并显示;利用K1作为主机发送启动按钮。

    具体工作方式可在串行口方式一、二、三中灵活选择,例程为方式一实现。

    cfcd05211e8dfc235f4385ad0fd47359.png

    三,程序代码(分两部分)

    1. 主机代码
    #include  #define uchar unsigned char #define uint unsigned int sbit DUAN=P2^6;sbit WEI=P2^7;sbit K1=P3^4;/*¶¨ÒåÆô¶¯°´¼üK1*/uchar j=0;uchar data led[6]={1,2,3,4,5,6};uchar data ledwei[6]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};uchar data displaytab[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay()  /*ÑÓʱº¯Êý,Ô¼1mS*/{uchar x,y;for(x=2; x>0; x--)for(y=250; y>0; y--);}void delay10ms() /*ÑÓʱº¯Êý,Ô¼10mS*/{uchar m,n;for(m=20; m>0; m--)for(n=250; n>0; n--);}void display(){uchar i;for (i=0;i<6;i++){P0=displaytab[led[i]];DUAN=1;DUAN=0;P0=ledwei[i]; WEI = 1;WEI = 0;delay();P0=0xff;/*ÏûÓ°*/ WEI = 1;WEI = 0;}}void main(){TMOD=0x06; //0000 0110,T0¹¤×÷ÔÚ·½Ê½¶þ,¼ÆÊýģʽTH0=0xff; //³õֵΪÁÙ½çÖµ£¬T0×÷ΪÖ÷»úÆô¶¯°´¼ü TL0=0xff;TR0=1;EA=1;ET0=1;PS=1;while(1){display();}}void t0() interrupt 1 {delay10ms(); /*ÆÕͨÏû¶¶Ç°²¿*/if(K1==0){TMOD=0x26; //0010 0110,T0ÑÓÐøÖ÷º¯ÊýÖй¦ÄÜ£¨T0¹¤×÷ÔÚ¼ÆÊýģʽ£¬·½Ê½¶þ£¬³õֵΪÁÙ½çÖµ£¬×÷ΪÖ÷»úÆô¶¯°´¼ü£© //´ËʱT1¹¦ÄÜ,·½Ê½¶þ,×÷Ϊ²¨ÌØÂÊ·¢ÉúÆ÷£¬²Î¼ûP197-198˵Ã÷SCON=0x50; //0101 0000,´®¿Ú¹¤×÷ÔÚ·½Ê½Ò»,ÔÊÐí½ÓÊÕTH1=0xff; //12MHz¾§Õñ,²¨ÌØÂÊ62.5kb/s TL1=0xff; //³õÖµ¿É²Î¼û¿Î±¾P198±í8-2PCON=0x80; //1000 0000£¬²¨ÌØÂʱ¶ÔöÓÐЧTR1=1;ES=1; SBUF=led[j];}while(!K1); /*ÆÕͨÏû¶¶ºó²¿*/delay10ms();while(!K1);}void uart() interrupt 4{if(j<6){j++;SBUF=led[j];}else{j=0;} TI=0; /*Çå´®Ðз¢ËÍÖжÏÇëÇó±êÖ¾TI*/} 
    746dc21babe1a5a348d7fbff3a7b4da2.png
    6ba5e722fd5355618db97cc2cec72016.png
    134067d8a4702fc8a052cbb1a10f9aaa.png
    874c7caa70eb7b18c895fb670c1001a8.png
    47c54c7a6768a0bc6abcf204a8ca5010.png
    31186d39d28abfed5d8f8b4ed9bd581b.png
    ebbad4cd7739217b18b5901c07827c32.png
    f2ef75290518b24bbf25fc04fd9f07aa.png

    2.从机代码

    #include  #define uchar unsigned char #define uint unsigned int sbit DUAN=P2^6;sbit WEI=P2^7;uchar j=0;uchar data led[6]={0,0,0,0,0,0};uchar data ledwei[6]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};uchar data displaytab[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay()  /*ÑÓʱº¯Êý,Ô¼1mS*/{uchar x,y;for(x=2; x>0; x--)for(y=250; y>0; y--);}void display(){uchar i;for (i=0;i<6;i++){P0=displaytab[led[i]];DUAN=1;DUAN=0;P0=ledwei[i]; WEI = 1;WEI = 0;delay();P0=0xff;/*ÏûÓ°*/ WEI = 1;WEI = 0;}}void main(){ TMOD=0x20;//´ËʱT1¹¦ÄÜ,·½Ê½¶þ,×÷Ϊ²¨ÌØÂÊ·¢ÉúÆ÷£¬²Î¼ûP197-198˵Ã÷SCON=0x50;//0101 0000,´®¿Ú¹¤×÷ÔÚ·½Ê½Ò»,ÔÊÐí½ÓÊÕTH1=0xff;//12MHz¾§Õñ,²¨ÌØÂÊ62.5kb/s TL1=0xff;//³õÖµ¿É²Î¼û¿Î±¾P198±í8-2PCON=0x80;//1000 0000£¬²¨ÌØÂʱ¶ÔöÓÐЧTR1=1;ES=1;EA=1;while(1){display();}}void uart() interrupt 4{if(j<6){led[j]=SBUF;j++;}else{j=0;} RI=0;/*Çå´®ÐнÓÊÕÖжÏÇëÇó±êÖ¾RI*/} 

    四,仿真结果

    注意:利用K1作为主机发送启动按钮

    146700b82c22a39b9a84921d49924ee4.png
    展开全文
  • 一,初学者的要求1、掌握51单片机串行口的结构和工作特点。2、掌握双机串行通信主、从机的区别与...利用K1作为主机发送启动按钮。 具体工作方式可在串行口方式一、二、三中灵活选择,例程为方式一实现。三,程序代...

    一,初学者的要求

    1、掌握51单片机串行口的结构和工作特点。

    2、掌握双机串行通信时主、从机的区别与联系。

    3、熟练掌握串行中断服务程序的设计方法及技巧。

    4、掌握Proteus仿真软件中双机通信电路的画法和实际硬件电路的注意事项。

    二,本次实践任务

    如后图所示,实现编程将主机数据传输到从机中并显示;利用K1作为主机发送启动按钮。

    具体工作方式可在串行口方式一、二、三中灵活选择,例程为方式一实现。

    e595dd120b4517166a1d29946e815a48.png

    三,程序代码(分两部分)

    1. 主机代码
    #include  #define uchar unsigned char #define uint unsigned int sbit DUAN=P2^6;sbit WEI=P2^7;sbit K1=P3^4;/*¶¨ÒåÆô¶¯°´¼üK1*/uchar j=0;uchar data led[6]={1,2,3,4,5,6};uchar data ledwei[6]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};uchar data displaytab[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay()  /*ÑÓʱº¯Êý,Ô¼1mS*/{uchar x,y;for(x=2; x>0; x--)for(y=250; y>0; y--);}void delay10ms() /*ÑÓʱº¯Êý,Ô¼10mS*/{uchar m,n;for(m=20; m>0; m--)for(n=250; n>0; n--);}void display(){uchar i;for (i=0;i<6;i++){P0=displaytab[led[i]];DUAN=1;DUAN=0;P0=ledwei[i]; WEI = 1;WEI = 0;delay();P0=0xff;/*ÏûÓ°*/ WEI = 1;WEI = 0;}}void main(){TMOD=0x06; //0000 0110,T0¹¤×÷ÔÚ·½Ê½¶þ,¼ÆÊýģʽTH0=0xff; //³õֵΪÁÙ½çÖµ£¬T0×÷ΪÖ÷»úÆô¶¯°´¼ü TL0=0xff;TR0=1;EA=1;ET0=1;PS=1;while(1){display();}}void t0() interrupt 1 {delay10ms(); /*ÆÕͨÏû¶¶Ç°²¿*/if(K1==0){TMOD=0x26; //0010 0110,T0ÑÓÐøÖ÷º¯ÊýÖй¦ÄÜ£¨T0¹¤×÷ÔÚ¼ÆÊýģʽ£¬·½Ê½¶þ£¬³õֵΪÁÙ½çÖµ£¬×÷ΪÖ÷»úÆô¶¯°´¼ü£© //´ËʱT1¹¦ÄÜ,·½Ê½¶þ,×÷Ϊ²¨ÌØÂÊ·¢ÉúÆ÷£¬²Î¼ûP197-198˵Ã÷SCON=0x50; //0101 0000,´®¿Ú¹¤×÷ÔÚ·½Ê½Ò»,ÔÊÐí½ÓÊÕTH1=0xff; //12MHz¾§Õñ,²¨ÌØÂÊ62.5kb/s TL1=0xff; //³õÖµ¿É²Î¼û¿Î±¾P198±í8-2PCON=0x80; //1000 0000£¬²¨ÌØÂʱ¶ÔöÓÐЧTR1=1;ES=1; SBUF=led[j];}while(!K1); /*ÆÕͨÏû¶¶ºó²¿*/delay10ms();while(!K1);}void uart() interrupt 4{if(j<6){j++;SBUF=led[j];}else{j=0;} TI=0; /*Çå´®Ðз¢ËÍÖжÏÇëÇó±êÖ¾TI*/} 
    23ea50a52f021d8fffe9ee836480ab96.png
    b553390b82561326d528be9a032a2274.png
    78e2125bdd8fdaf4c65abda57f8de1b4.png
    50f16a6faa4c7b68c3d7b0aa013a3d05.png
    e3aa8ea248b6843e210043f3d4b6146c.png
    04d6f21ad285ba748d53f939cf232cc2.png
    089021cac6d95d256ef8a394d238a931.png
    ef0a7d069bccc989a401f667c7a36154.png

    2.从机代码

    #include  #define uchar unsigned char #define uint unsigned int sbit DUAN=P2^6;sbit WEI=P2^7;uchar j=0;uchar data led[6]={0,0,0,0,0,0};uchar data ledwei[6]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};uchar data displaytab[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay()  /*ÑÓʱº¯Êý,Ô¼1mS*/{uchar x,y;for(x=2; x>0; x--)for(y=250; y>0; y--);}void display(){uchar i;for (i=0;i<6;i++){P0=displaytab[led[i]];DUAN=1;DUAN=0;P0=ledwei[i]; WEI = 1;WEI = 0;delay();P0=0xff;/*ÏûÓ°*/ WEI = 1;WEI = 0;}}void main(){ TMOD=0x20;//´ËʱT1¹¦ÄÜ,·½Ê½¶þ,×÷Ϊ²¨ÌØÂÊ·¢ÉúÆ÷£¬²Î¼ûP197-198˵Ã÷SCON=0x50;//0101 0000,´®¿Ú¹¤×÷ÔÚ·½Ê½Ò»,ÔÊÐí½ÓÊÕTH1=0xff;//12MHz¾§Õñ,²¨ÌØÂÊ62.5kb/s TL1=0xff;//³õÖµ¿É²Î¼û¿Î±¾P198±í8-2PCON=0x80;//1000 0000£¬²¨ÌØÂʱ¶ÔöÓÐЧTR1=1;ES=1;EA=1;while(1){display();}}void uart() interrupt 4{if(j<6){led[j]=SBUF;j++;}else{j=0;} RI=0;/*Çå´®ÐнÓÊÕÖжÏÇëÇó±êÖ¾RI*/} 

    四,仿真结果

    注意:利用K1作为主机发送启动按钮

    e1e6551ee897522b5c5afe35d68da57f.png
    展开全文
  • 抗干扰性下降等不良因素,因此能尽量使用现有串口,利用切换技术,完成串行口不同类型,不同端口的数据传送是优先选择。  2.硬件功能简述  本设计用于数据采集监控系统如图1所示。采用485串行口完成数据采集...
  • 抗干扰性下降等不良因素,因此能尽量使用现有串口,利用切换技术,完成串行口不同类型,不同端口的数据传送是优先选择。 2.硬件功能简述 本设计用于数据采集监控系统如图1所示。采用485串行口完成数据采集,和...
  • (3) 串行数据发送和接收与普通的文件操作相同,在对串行口进行操作,通常利用ReadFile函数读取串行口收到的数据利用WriteFile将需要发送数据写如串行口。n 串行数据的接收利用ReadFile函数可以读取将...

    (3)    串行数据的发送和接收

    与普通的文件操作相同,在对串行口进行操作时,通常利用ReadFile函数读取串行口收到的数据,利用WriteFile将需要发送的数据写如串行口。

    n        串行数据的接收

    利用ReadFile函数可以读取将串行口接收到的数据。ReadFile函数原型如下:

    BOOL ReadFile

    HANDLE hFile

    LPVIOD   lpBuffer

    DWORD   nNumberOfBytesToRead

    LPDWORD   lpNumberOfBytesRead

    LPOVERLAPPED lpOverlapped

    );

    其中参数hFile指向已经打开的串行口句柄;lpBuffer指向一个读取数据缓冲区;nNumberOfBytesToRead指定要从串行设备中读取的字节数;lpNumberOfBytesRead指明实际从串行口中读出的字节数;lpOverlapped指向一个OVERLAPPED结构变量,该结构变量中包含一个同步事件。

    通常如果调用成功,ReadFile返回非0值;否则返回值为0。但是对于接收操作在后台进行的串口来说,返回值为0不一定说明函数调用失败。此时可以调用GetLastError函数获取进一步的信息。如果GetLastError返回值为ERROR_IO_PENDING,则说明该读取串口的操作仍然处于后台等待状态,而非一个真正意义上的错误。

    n        串行数据的发送

    利用WriteFile函数可以向串行口写入数据。WriteFile函数原型如下:

    BOOL WriteFile

    HANDLE hFile

    LPVIOD   lpBuffer

    DWORD   nNumberOfBytesToWrite

    LPDWORD   lpNumberOfBytesWritten

    LPOVERLAPPED lpOverlapped

    );

    其中参数hFile指向已经打开的串行口句柄;lpBuffer指向一个发送数据缓冲区;nNumberOfBytesToRead指定要从串行设备中发送的字节数;lpNumberOfBytesRead指明实际从串行口中发送的字节数;lpOverlapped指向一个OVERLAPPED结构变量,该结构变量中包含一个同步事件。

    通常如果调用成功,WriteFile返回非0值;否则返回值为0。但是对于发送操作在后台进行的串口来说,返回值为0不一定说明函数调用失败。此时可以调用GetLastError函数获取进一步的信息。如果GetLastError返回值为ERROR_IO_PENDING,则说明该写入串口的操作仍然处于后台等待状态,而非一个真正意义上的错误。

    (4)    关闭串行口

    在用完串行口后通常要将其关闭。如果忘记关闭,该串口会始终处于打开状态,其它的应用程序就不能打开或使用它。

    关闭串口可以使用函数CloseHandle,其函数原型如下:

    BOOL CloseHandle

        HANDLE hObject

    );

    CloseHandle函数非常简单,其中hObject为该打开串口的句柄。如果该函数调用成功,则返回值为非0;否则返回值为0

    展开全文
  • 通常采用的办法是用单片机的串行I/ O 来完成数据通信,但是该方法有许多不足之处:、在利用单片机的串口进行发送和接收数据时,对传输的数据只能进行奇偶校验,然而在无线通信场合,被传输的数据极易受到电磁、静电...
  • http://www.cppblog.com/Lee7/archive/2008/01/08/40685.html(3) 串行数据发送和接收与普通的文件操作相同,在对串行口进行操作,通常利用ReadFile函数读取串行口收到的数据利用WriteFile将需要发送数据...

    http://www.cppblog.com/Lee7/archive/2008/01/08/40685.html

    (3)    串行数据的发送和接收

    与普通的文件操作相同,在对串行口进行操作时,通常利用ReadFile函数读取串行口收到的数据,利用WriteFile将需要发送的数据写如串行口。

    n        串行数据的接收

    利用ReadFile函数可以读取将串行口接收到的数据。ReadFile函数原型如下:

    BOOL ReadFile

    HANDLE hFile

    LPVIOD   lpBuffer

    DWORD   nNumberOfBytesToRead

    LPDWORD   lpNumberOfBytesRead

    LPOVERLAPPED lpOverlapped

    );

    其中参数hFile指向已经打开的串行口句柄;lpBuffer指向一个读取数据缓冲区;nNumberOfBytesToRead指定要从串行设备中读取的字节数;lpNumberOfBytesRead指明实际从串行口中读出的字节数;lpOverlapped指向一个OVERLAPPED结构变量,该结构变量中包含一个同步事件。

    通常如果调用成功,ReadFile返回非0值;否则返回值为0。但是对于接收操作在后台进行的串口来说,返回值为0不一定说明函数调用失败。此时可以调用GetLastError函数获取进一步的信息。如果GetLastError返回值为ERROR_IO_PENDING,则说明该读取串口的操作仍然处于后台等待状态,而非一个真正意义上的错误。

    n        串行数据的发送

    利用WriteFile函数可以向串行口写入数据。WriteFile函数原型如下:

    BOOL WriteFile

    HANDLE hFile

    LPVIOD   lpBuffer

    DWORD   nNumberOfBytesToWrite

    LPDWORD   lpNumberOfBytesWritten

    LPOVERLAPPED lpOverlapped

    );

    其中参数hFile指向已经打开的串行口句柄;lpBuffer指向一个发送数据缓冲区;nNumberOfBytesToRead指定要从串行设备中发送的字节数;lpNumberOfBytesRead指明实际从串行口中发送的字节数;lpOverlapped指向一个OVERLAPPED结构变量,该结构变量中包含一个同步事件。

    通常如果调用成功,WriteFile返回非0值;否则返回值为0。但是对于发送操作在后台进行的串口来说,返回值为0不一定说明函数调用失败。此时可以调用GetLastError函数获取进一步的信息。如果GetLastError返回值为ERROR_IO_PENDING,则说明该写入串口的操作仍然处于后台等待状态,而非一个真正意义上的错误。

    (4)    关闭串行口

    在用完串行口后通常要将其关闭。如果忘记关闭,该串口会始终处于打开状态,其它的应用程序就不能打开或使用它。

    关闭串口可以使用函数CloseHandle,其函数原型如下:

    BOOL CloseHandle

        HANDLE hObject

    );

    CloseHandle函数非常简单,其中hObject为该打开串口的句柄。如果该函数调用成功,则返回值为非0;否则返回值为0

    展开全文
  • 通常采用的办法是用单片机的串行I/ O 来完成数据通信,但是该方法有许多不足之处:第一、在利用单片机的串口进行发送和接收数据时,对传输的数据只能进行奇偶校验,然而在无线通信场合,被传输的数据极易受到电磁、...
  • 由于UART串行口的广泛应用,在传统的8位和16位的处理器以及...中断方式可以在接收到信息或需要发送数据时产生中断,在中断服务程序中完成数据的接收与发送。相对于查询方式,中断方式的CPU利用率要高。在CPU任务简单的
  • 串口通信

    2021-01-23 18:55:20
    1、SCON 是一个特殊功能寄存器,用以设定串行口的工作方式、接收/发送控制以及设置状态标志: 2、3、SM2,多机通信控制位,主要用于方式2和方式3。当接收机的SM2=1可以利用收到的RB8来控制是否激活RI(RB8=0不...
  • 51单片机7-串口通信

    2019-01-05 21:03:47
    2.我的单片机串行口的结构 说明:接收、发送缓冲器都是SBUF物理上独立的,占用同一地址99H ; 3.串口控制寄存器SCON 本寄存器设定串口的工作方式,接受和发送控制和设置状态标志。 数据结构: (1)SM0和SM1...
  • 单片机期末考试题目及答案详解

    热门讨论 2009-06-23 10:30:30
    22.通过串行口发送数据时,在程序中应使用 A.MOVX SBUF,A B.MOVC SUBF,A C.MOV SUBF,A D.MOV A,SUBF 23.通过串行口接收数据时,在程序中应使用 A.MOVX A,SBUF B.MOVC A,SUBF C.MOV SUBF,A...
  • 在构成为定时器,每个机器周期加1 (使用12MHz 时钟,每1us 加1),这 样以机器周期为基准可以用来测量时间间隔。在构成为计数器,在相应的外部 引脚发生从1 到0 的跳变计数器加1,这样在计数闸门的控制下可以...
  • 4.12 串行EEPROM中的数据保护技术及应用中应注意的问题 4.13 一种实用的抗电源干扰设计 4.14 雪崩型瞬态电压抑制器的选用 4.15 控制系统中电路的过渡状态及干扰的解决措施 4.16 带备份电池的微处理...
  • STM32F10xxx参考手册

    2012-10-17 11:38:40
    10.3.4 可编程的数据传输宽度、对齐方式和数据大小端 145 10.3.5 错误管理 146 10.3.6 中断 146 10.3.7 DMA请求映像 147 10.4 DMA寄存器 149 10.4.1 DMA中断状态寄存器(DMA_ISR) 149 10.4.2 DMA中断标志清除...
  • 电子设计.doc

    2019-05-28 11:58:28
    0134、单片机串行口与PC机通讯资料 0135、单片机串行通信发射机论文资料 0136、单片机定时闹钟论文资料 0137、单片机红外遥控系统设计论文资料 0138、单片机控制LED点阵显示器毕业设计论文资料 0139、单片机控制交通...
  • 这是书的光盘。共分为两个部分,这是第一部分。 本书由浅入深、循序渐进地... 本章总结了在内核模式下的四种等待方法,读者可以利用这些方法灵活地用在自己的驱动程序中。最 后本章还介绍了如何对IRP的超时情况进行...
  • CISCO 技术大集合

    2013-05-22 01:07:13
    以下在Router1上设置了访问192.1.0.64/26这个网下一跳地址为192.200.10.6,即当有目的地址属于192.1.0.64/26的网络范围的数据报,应将其路由到地址为192.200.10.6的相邻路由器。在Router3上设置了访问192.1.0.128/26...
  • RED HAT LINUX 6大全

    热门讨论 2011-10-21 18:46:06
    2.2.2 不利用引导软盘进行安装 7 2.2.3 虚拟控制台 7 2.2.4 对话框 7 2.3 一步步地安装 7 2.3.1 开始安装 7 2.3.2 内核参数选项 8 2.3.3 安装程序 9 2.3.4 选择一种安装方法 9 2.3.5 光盘安装 10 2.4 硬件配置 14 ...
  • 4 .3 .3对元数据更好的支持........ 169 4.3.4 纖.................................. 170 4.3.5 Reflection A P I.......................172 4.4 丨L Disassembler.........................173 4.5 内存管理........

空空如也

空空如也

1 2
收藏数 23
精华内容 9
关键字:

利用串行口发送数据时