【单片机实验】串口通信实验

实验三:串口通信实验

内容:

(1)利用电脑串口与实验台串口进行连接;

(2)根据帧格式定义、波特率定义,编程配置串口,并编写控制程序;

(3)实现从电脑上输入控制字符,由单片机通过串口接收,并控制LED显示的功能;

(4)对所编程序进行调试及验证。

要求:

(1)掌握波特率的概念、学会编程设置波特率和工作方式;

(2)掌握串口通信的编程控制方法;

(3)理解解MAX232串口通信的硬件电路结构。 注意实验三,需要同学们自己编写程序,实现从电脑串口助手(利用单片机下载软件提供的串口调试助手),发送一个字符给单片机,单片机通过中断方式接收,或通过查询方式接收后,把该字符的值送到8个LED显示 你的任务:编写主程序,串口初始化(要启动定时器),编写中断接收程序,和查询接收程序,接收到数据后,还要回送电脑显示,并驱动LED,当接收到的数据是88H时,驱动一个8个LED轮流点亮,当接收到的数据是99H时,停止8LED流水亮。当接收到的数据是11H时,LED全亮。当介绍到的数据是FFH时,全灭。 编程实现,明天实验课直接去调试。一定要提前编写程序,实验课只是去验证你的程序是否正确。

 1 #include <reg51.h>
 2 #include <intrins.h>
 3 unsigned char NewData,led,Count; 
 4 bit NewFlag ;
 5 void main( void ){
 6     TMOD = 0x21 ; 
 7     TH0 = ( 65536 - 10000 ) / 256 ;
 8     TL0 = ( 65536 - 10000 ) % 256 ;
 9     Count = 0 ;
10     led = 0xFE ; 
11     TH1 = 0xFD ; 
12     TL1 = 0xFD ; 
13     TR1 = TR0 = 1 ;
14     SCON = 0x50 ;
15     ES = EA = ET0 = 1 ;
16     NewFlag = 0 ; 
17     while ( 1 ){
18         if( NewFlag ){
19             if( NewData == 0x88 ){
20                 ET0 = 1 ;
21             }
22             if( NewData == 0x99 ){
23                 ET0 = 0;
24             }
25             TI = 0 ;
26             SBUF = NewData ;
27             while ( TI == 0 );
28             NewFlag = 0 ;
29         }
30     }
31 }
32 void set0 ( void ) interrupt 4 {
33     if( TI ) TI = 0 ;
34     if( RI ) {
35         RI = 0 ;
36         NewData = SBUF ; 
37         NewFlag = 1 ;
38     }
39 }
40 void T0_INT () interrupt 1 {
41     TH0 = ( 65536 - 10000 ) / 256 ; 
42     TL0 = ( 65536 - 10000 ) % 256 ;
43     Count ++  ;
44     if( Count >= 50 ){
45         Count = 0 ;
46         led = _crol_(led , 1 );
47         P1 = led ; 
48         if( NewData == 0x11 ) P1 = 0 ;
49         if( NewData == 0xFF ) P1 = 0xFF ;
50     }
51 }
View Code

猜你喜欢

转载自www.cnblogs.com/Osea/p/11083538.html