实验三:串口通信实验
内容:
(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 }
原文地址:https://www.cnblogs.com/Osea/p/11083538.html
时间: 2024-10-08 01:17:00