六、8051串行接口的C编程.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:27 大小:81KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

六、8051串行接口的C编程.ppt

六、8051串行接口的C编程.ppt

预览

免费试读已结束,剩余 17 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第6章8051串行口的C编程通信方式§6.251单片机串行口二、串行口的控制寄存器工作方式控制位SM0、SM12.电源控制寄存器PCON三、串行口的工作方式发送:SBUF=?;接收:?=SBUF;波特率=2SMOD*(定时器1的溢出率)/32四、串行口的初始化2.初始化步骤五、串行口应用举例main(){uchari;uintj;/*在11.0592MHz下,设置9600波特率,方式1*/TMOD=0x20;//设置定时器1的方式TH1=0xfd;//设置定时器1的初值TL1=0xfd;SCON=0x50;//设置串行口方式1,并允许接收PCON=0x00;TR1=1;//启动定时器1while(1){i=0;while(trdata[i]!=0x00)//发送字符串{SBUF=trdata[i];while(TI==0);TI=0;i++;}for(j=0;j<12500;j++);//延时}}例2:发送单字符子函数例3:发送字符串子函数例4:发送字符串程序。例1的程序可以改写成调用子函数的方式。main(){uintj;while(1){send_string(“MCS-51”);send_char(0x0d);send_char(0x0a);for(j=0;j<12500;j++);}}例5:串行口发送接收程序,将接收到的字符发送出去。while(1){while(RI==0);RI=0;a=SBUF;SBUF=a;while(TI==0);TI=0;}}例6:单片机fosc=11.0592MHz,波特率9600,设置8个字节的队列缓冲区用于接收。根据接收到的命令执行不同的操作。#include<reg51.h>#defineucharunsignedchar#definebuffer_size8//缓冲区大小ucharcomrxdbuf[buffer_size];//串口接收缓冲区ucharcomrxdwrite;bitcmdbegin,cmdok;//命令起始和结束标志main(){/*在12MHz下,设置4800波特率,方式1*/TMOD=0x20;//设置定时器1的方式TH1=0xf3;//设置定时器1的初值TL1=0xf3;SCON=0x50;//设置串行口方式1,并允许接收PCON=0x80;TR1=1;//启动定时器1ES=1;EA=1;for(;;){if(cmdok){cmdok=0;if(string_compare(“start",5)!=0)…//处理启动命令elseif(string_compare(“stop",4)!=0)…//处理停止命令elseif(string_compare(“pause",5)!=0)…//处理暂停命令}}}voidserial()interrupt4using1{uchara;if(RI){RI=0;a=SBUF;if(a==‘#’){cmdbegin=1;comrxdwrite=0;}elseif(a==‘*’){cmdbegin=0;cmdok=1;}elseif(cmdbegin==1){comrxdbuf[comrxdwrite]=a;comrxdwrite++;if(comrxdwrite>=buffer_size)comrxdwrite=0;}}}ucharstring_compare(uchar*string,ucharnumber)//串口字符串比较{ucharb,c;for(b=0;b<number;b++){c=comrxdbuf[b];if(c!=(*string))return(0);string++;}return(1);}