《单片机串口通信.docx》由会员分享,可在线阅读,更多相关《单片机串口通信.docx(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、单片机串口通信 RS232最基本的:1. 异步串行通信方式2. 几个参数需要设置:a) 波特率(使用定时器)b) 校验位、数据位、停止位(选择串口通信模式)3. 编写中断服务程序。切记,RI与TI需要软件清零。几个关键寄存器:PCON:关注SMOD位。SCON:D7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRI其中,SM0、SM1:串行口工作方式选择位:SM0、SM1工作方式功能描述波特率0 0方式08位移位寄存器fosc/120 1方式110位UART可变1 0方式211位UARTfosc/64或fosc/321 1方式311位UART可变REN:接收允许控制位。T
2、I与RI由软件清零。然后就是定时器相关的寄存器,如TMOD,TH1和TL1的初值设定,启动定时器TR1,开启中断EA,ES。常用波特率除值表:最简例程:发送(发送完成之后TI=1):#include #include void delay(unsigned int i); /函数声明char code MESSAGE= 小茉莉,太阳出来了(liao)。;unsigned int a;void main (void) SCON = 0x40; /串口工作模式1,即SM0=0,SM1=1 TMOD|= 0x20; /定时器工作方式2 TH1 = 0xFD; /reload value 9600、数
3、据位8、停止位1。效验位无(11.0592) TL1 = 0xFD; TR1 = 1; /开启定时器1 ES = 1; /开串口中断 EA = 1; /开总中断 while(1) a=0; while(MESSAGEa != 0) SBUF = MESSAGEa; while(!TI);/ 等特数据传送(TI发送中断标志)。当一个字节发送完毕后系统进入中断。 TI = 0;/ 清除数据传送标志/ RI 与 TI都需要手动清除 a+; / 下一个字符 delay(10000); /* 延时处理程序 */ void delay(unsigned int i)unsigned char j;for(
4、i; i 0; i-)for(j = 200; j 0; j-) ;接收(接收到数据后RI=1):#include #include sbit BEEP = P15;unsigned char b;void main (void) SCON = 0x50; /REN=1允许串行接受状态,串口工作模式1 TMOD|= 0x20; /定时器工作方式2 TH1 = 0xFD;/ 波特率9600 (11.0592M) TL1 = 0xFD; TR1 = 1; ES = 1; /开串口中断 EA = 1; / 开总中断 BEEP=1;/低电平触发蜂鸣器 b=0xff ;while(1) BEEP=b;
5、void ser() interrupt 4RI =0 ;b = SBUF ;收发:#include bit Flag;unsigned char ReData,SenData;void main (void) SCON = 0x50; TMOD|= 0x20; /定时器工作方式2 TH1 = 0xFD;/ 波特率9600、数据位8、停止位1。效验位无 (11.0592M) TL1 = 0xFD; TR1 = 1; ES = 1; /开串口中断 EA = 1; / 开总中断 Flag = 0 ;while(1) if (Flag=1) SBUF=SenData; /SUBF接受/发送缓冲器 while(TI=0); TI=0; Flag=0; /* 串口中断程序*/void ser_int (void) interrupt 4 using 1 RI = 0; /清除RI接受中断标志ReData = SBUF; /SUBF接受/发送缓冲器SenData=ReData; Flag=1;
限制150内