文档详情

第6章80C51单片机的串行口.ppt

发布:2017-06-14约5.95千字共51页下载文档
文本预览下载声明
* * 串行口初始化步骤 确定T1的工作方式(TMOD) 计算T1的初值,装载TH1、TL1 启动T1(置位TR1) 确定串行口工作方式(SCON) 串口中断设置(IE、IP) * * 6.3 80C51单片机的串行口应用 6.3.1 利用单片机串口的并行I/O扩展 占用串口! 单片机端的电平转换 6.3.2 单片机与PC机间的通信 与PC机的硬件连接 直通连接 交叉连接 PC机串行口检查 PC机的串行口的收、发信号引脚短接 运行串口调试软件 连机编程测试 void main(void) { uchar temp; init(); while (1) { temp = ReceiveChar();//接收数据 SendChar(temp); //发送数据 } } void init(void) { SCON = 0x50; //方式1(N,8,1),接收允许 PCON = 0x00; //波特率不倍增 TMOD = 0x20; //置T1为8位自动重装方式 TL1 = 0xfd; TH1 = 0xfd; //波特率9600 TR1 = 1; } 7 6 5 4 3 2 1 0 SCON SM0 SM1 SM2 REN TB8 RB8 TI RI 字节地址:98H uchar ReceiveChar() { uchar ch; while (!RI); //等待接收完 ch = SBUF; RI = 0; return (ch); } void SendChar(uchar ch) { SBUF = ch; //发送字符 while (!TI); //等待发送完 TI = 0; //清标志 } 通信程序的扩充与完善 通讯协议: 每帧:数据8位,起始位1位,停止位1位,无检验,波特率9600。 PC机作为主机,主机命令由4个字符形成的字符串构成,首字符‘$’是同步头,次字符为命令关键字,其他2个字符未定义。 设命令关键字为1时,单片机要将缓冲区的数据以由前至后的顺序发送到PC机端;当命令关键字为2时,单片机要将缓冲区的数据以由后至前的顺序发送到PC机端,其他关键字未定义。 单片机端程序: void DataInit(void) { //设置缓冲区调试数据 uchar i; for(i=0;i10;i++) OutBuff[i]=i+0x30; } void SPortInit(void) { TMOD |=0x20; SCON=0x50; TH1=0xfd; TL1=0xfd; TR1=1; ES = 1; EA = 1; } void SendChar(uchar ch) { SBUF = ch; //发送字符 while (!TI); //等待发送完 TI = 0; } void SPortIsr () interrupt 4 { uchar i,ch; ES=0; ch = SBUF; RI=0; if(ch= =0x24) //检测‘$’ { InBuff[0]=ch; for(i=1;i4;i++) { while (!RI); RI=0; InBuff[i] = SBUF; } InFullFlag=1; } ES=1; } void main(void) { DataInit(); SPortInit(); InFullFlag = 0; while(1) { if(InFullFlag) { switch(InBuff[1]) {//依命令完成相应功能 } InFullFlag = 0; } } } switch(InBuff[1]) {//依命令完成相应功能 case 0x31: for(i=0;i10;i++) SendChar(OutBuff[i]); break; case 0x32: for(i=0;i10;i++) SendChar(OutBuff[9-i]); break; default:break; } * * PC机端程序: Private Sub Form_Load() MSComm1.CommPort = 1 设置通信端口号为COM1 MSComm1.Settings = 9600,n,8,1
显示全部
相似文档