单片机串行通信

上传人:w****2 文档编号:41701726 上传时间:2021-11-22 格式:DOC 页数:12 大小:320.50KB
返回 下载 相关 举报
单片机串行通信_第1页
第1页 / 共12页
单片机串行通信_第2页
第2页 / 共12页
单片机串行通信_第3页
第3页 / 共12页
点击查看更多>>
资源描述
45 甲机通过串口控制乙机 LED /* 名称:甲机发送控制命令字符说明:甲单片机负责向外发送控制命令字符“A”、“B”、“C',或者停止发送,乙机根据所接收到的字符完成 LED1闪烁、LED2闪烁、双闪烁、或停止闪烁。*/ #include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED仁POP;sbit LED2=P0A3;sbit K仁 P1AO;/ 延时void DelayMS(uint ms)uchar i;while(ms-) for(i=O;i<12O;i+); / 向串口发送字符void Putc_to_SerialPort(uchar c)SBUF=c;while(TI=O);TI=O;/ 主程序void main() uchar Operation_No=O; SCON=Ox4O;/ 串口模式 1TMOD=Ox2O;/T1 工作模式 2PCON=OxOO;/ 波特率不倍增TH1=Oxfd;TL1=Oxfd;TI=O;TR1=1;while(1) if(K1=O)/按下K1时选择操作代码 0, 1,2,3 while(K1=0);Operation_No=(Operation_No+1)%4;switch(Operation_No)/ 根据操作代码发送 A/B/C 或停止发送case 0: LED1=LED2=1;break; case 1: Putc_to_SerialPort('A');LED1=LED1;LED2=1;break; case 2: Putc_to_SerialPort('B');LED2=LED2;LED1=1;break;case 3: Putc_to_SerialPort('C');LED1=LED1;LED2=LED1;break;DelayMS(100);/* 名称:乙机程序接收甲机发送字符并完成相应动作LED完成不同闪烁动作。说明:乙机接收到甲机发送的信号后,根据相应信号控制 */#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED仁POP;sbit LED2=P0A3;/ 延时void DelayMS(uint ms)uchar i;while(ms-) for(i=O;i<12O;i+);/ 主程序void main()SCON=Ox5O;/ 串口模式 1,允许接收TMOD=Ox2O;/T1 工作模式 2PCON=OxOO;/ 波特率不倍增TH1=Oxfd;/ 波特率 96OOTL1=Oxfd;RI=O;TR1=1;LED1=LED2=1;while(1)if(RI) II如收到则LED闪烁RI=0;switch(SBUF) II根据所收到的不同命令字符完成不同动作DelayMS(IOO);46单片机之间双向通信/* 名称:甲机串口程序说明:甲机向乙机发送控制命令字符, 甲机同时接收乙机发送的数字,并显示在 数码管上。*/#in clude<reg51.h>#define uchar un sig ned char#define uint un sig ned intsbit LED仁P1A0;sbit LED2=P"3;sbit K仁 P1A7;uchar Operation_No=0; / 操作代码II数码管代码kTmj- 坤刑岬4罠111!M 1<P3uOnd> FtiricM Jri j n *rajflll 町皿M araiMTipi iH pVf Ei3TS_?hOih 耐沁MtPOHK Mi AU M.i-a&i吋阳3P;M3L*.VI 1 F| 1H JJ!冷MHFSaFWDPI 1VfBT-lPl <町 UTCIH !F>BPI 1巧尹电即rU2fORH-Crtacase 'A':LED1=LED1;LED2=1;break;IILED1闪烁case 'B':LED2=LED2;LED1=1;break;IILED2闪烁case C:LED1=LED1;LED2=LED1;II双闪烁else LED仁 LED2=1;II关闭LEDuchar code DSY_CODE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;II延时void DelayMS(ui nt ms)uchar i;while(ms-) for(i=0;i<120;i+);II向串口发送字符void Putc_to_SerialPort(uchar c)SBUF=c;while(TI=0);TI=0;/ 主程序void main() LED1=LED2=1;P0=0x00;SCON=0x50;/ 串口模式 1,允许接收TMOD=0x20;/T1 工作模式 2PCON=0x00;/ 波特率不倍增TH1=0xfd;TL1=0xfd;TI=RI=0;TR1=1;IE=0x90; / 允许串口中断 while(1) DelayMS(100);if(K1=0) / 按下 K1 时选择操作代码 0,1,2,3while(K1=0);Operation_No=(Operation_No+1)%4;switch(Operation_No) / 根据操作代码发送 A/B/C 或停止发送 case 0: Putc_to_SerialPort('X'); LED1=LED2=1; break;case 1: Putc_to_SerialPort('A'); LED1=LED1;LED2=1; break;case 2: Putc_to_SerialPort('B'); LED2=LED2;LED1=1; break;case 3: Putc_to_SerialPort('C');LED1=LED1;LED2=LED1; break;/ 甲机串口接收中断函数void Serial_INT() interrupt 4if(RI)RI=0;if(SBUF>=0&&SBUF<=9) P0=DSY_CODESBUF; else P0=0x00;/* 名称:乙机程序接收甲机发送字符并完成相应动作说明:乙机接收到甲机发送的信号后,根据相应信号控制LED完成不同闪烁动作。*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED1=P1A0;sbit LED2=P"3;sbit K2=P1A7;uchar NumX=-1;/ 延时void DelayMS(uint ms)uchar i;while(ms-) for(i=0;i<120;i+);/ 主程序void main()LED1=LED2=1;SCON=0x50;/ 串口模式 1,允许接收TMOD=0x20;/T1 工作模式 2TH1=0xfd;/ 波特率 9600TL1=0xfd;PCON=0x00;/ 波特率不倍增RI=TI=0;TR1=1;IE=0x90;while(1)DelayMS(100);if(K2=0) while(K2=0);NumX=+NumX%11; /产生 010范围内的数字,其中 1 0表示关闭 SBUF=NumX;while(TI=0);TI=0;void Serial_INT() in terrupt 4if(RI) /如收到则LED则动作RI=0; switch(SBUF) /根据所收到的不同命令字符完成不同动作case X:case 'A':case 'B':case C:LED1=LED2=1;break;LED1=0;LED2=1;break;LED2=0;LED1=1;break;LED仁LED2=0;/全灭LED1 亮/LED2 亮/全亮47单片机向主机发送字符串/*名称:单片机向主机发送字符串说明:单片机按一定的时间间隔向主机 发送字符串,发送内容在虚拟终端显示。*/#in clude<reg51.h>#define uchar un sig ned char#define uint un sig ned int/延时void DelayMS(ui nt ms)uchar i;while(ms-) for(i=0;i<120;i+);/向串口发送字符void Putc_to_SerialPort(uchar c)SBUF=c;while(TI=0);TI=0;/向串口发送字符串void Puts_to_SerialPort(uchar *s) .&*!上阿旧问D AT泪 gF師MN申;.刘珂*U1 " while(*s!='0')I -'I口,JTU -i "虫 隣胡iTO 曲neo (3.|:-:<:aitF5CH遠迥MFZ Ml 5F24HIJP2WI1亠;LP21AM-他QAMr 5 i 3 J raFflpnHlpgFnifpnPutc_to_SerialPort(*s); s+;DelayMS(5);/ 主程序void main()uchar c=0;SCON=0x40;TMOD=0x20;TH1=0xfd;TL1=0xfd;PCON=0x00;TI=0;/ 串口模式 1 /T1 工作模式 2/ 波特率 9600/ 波特率不倍增TR1=1;DelayMS(200);/ 向主机发送数据Puts_to_SerialPort("Receiving From 8051.rn");Puts_to_SerialPort("rn");DelayMS(50);while(1)Putc_to_SerialPort(c+'A'); DelayMS(100);Putc_to_SerialPort(' ');DelayMS(100);if(c=25) / 每输出一遍后加横线 Puts_to_SerialPort("rnDelayMS(100); c=(c+1)%26;if(c%10=0) / 每输出 10 个字符后换行 rn");Puts_to_SerialPort("rn");DelayMS(IOO);48单片机与PC通信/*名称:单片机与PC通信说明:单片机可接收 PC发 送的数字字符,按下单片机的K1键后,单片机可向PC发送字 符串。在Proteus环境下完成本 实验时,需要安装VirtualSerial Port Driver 和串口调 试助手。本例缓冲100个数字字- r111 1IlfHidTill<oumiP_DRTiC0fC/_LLl=!ArE-4biLj! yj»Tnnne«V _pvJar¥-MrjjtcI冋T_fl5W 上 ElHu 霽尸jtr_厂EH 牝小吟上廿九f口 EFR; 口IFC1.IKD1 leiwtd恂42 冲晦5 ICRWCAil砂gMOMS 樹MP?2IQPlltM-il器1:虫 fijAilg 陀加狎 P27I5Plfl Pl 1Fl 2F7Fl斗PI-5舟如PI GF -、常Pt ?10IV- 亠 亠:fl士LJ2口 BFR 用 口-寸±toumF_W)BT:CM2y _WJaT¥-k£tElM5_aJT?F 上 CZmIHuQtJEJT HFF m饰"ig符,缓冲满后新数字从前面开始存放(环形缓冲)*/#in clude<reg51.h>#defi ne uchar un sig ned char#defi ne uint un sig ned intuchar Receive_Buffer101;/接收缓冲uchar Buf_ln dex=0;/缓冲空间索引/数码管编码uchar code DSY_CODE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00;/延时void DelayMS(ui nt ms)uchar i;while(ms-) for(i=0;i<120;i+);/主程序void mai n()uchar i;P0=0x00;Receive_Buffer0=-1;SCON=Ox5O;/串口模式1,允许接收TMOD=0x20;/T1 工作模式2TH1=0xfd;/波特率 9600TL1=0xfd;PCON=0x00;/波特率不倍增EA=1;EX0=1;IT0=1;ES=1;IP=0x01;TR1=1;while(1)for(i=0;i<100;i+) / 收到 -1 为一次显示结束 if(Receive_Bufferi=-1) break; P0=DSY_CODEReceive_Bufferi; DelayMS(200);DelayMS(200);/ 串口接收中断函数void Serial_INT() interrupt 4uchar c;if(RI=0) return;ES=0;/ 关闭串口中断RI=0;/ 清接收中断标志c=SBUF;if(c>='0'&&c<='9') / 缓存新接收的每个字符,并在其后放 -1 为结束标志 Receive_BufferBuf_Index=c-'0' Receive_BufferBuf_Index+1=-1; Buf_Index=(Buf_Index+1)%100;ES=1;void EX_INT0() interrupt 0 / 外部中断 0uchar *s=" 这是由 8051 发送的字符串! rn"uchar i=0;while(si!='0')SBUF=si;while(TI=0);TI=0;i+;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 演讲稿件


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!