51串口通信
Posted 王大白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51串口通信相关的知识,希望对你有一定的参考价值。
/* *单片机接收主机的数据,然后将数据传送到P2口, *当按下K1=P1.4 时, 单片机发送字符串 给主机 */ #include <reg51.h> #include <intrins.h> unsigned char key_s, key_v, tmp; char code str1[] = "123 "; char code str2[] = "abc "; char code str3[] = "666 "; void send_str(); bit scan_key(); void proc_key(); void delayms(unsigned char ms); void send_char(unsigned char txd); sbit K1 = P1^4; main() { SCON=0X50; //设置为工作方式1 TMOD=0X20; //设置计数器工作方式2 PCON=0X80; //波特率加倍 TH1=0XF3; //计数器初始值设置,注意波特率是4800的 TL1=0XF3; TR1 = 1; //启动定时器1 IE = 0x0; //禁止任何中断 while(1) { if(scan_key()) // 扫描按键 { delayms(10); // 延时去抖动 if(scan_key()) // 再次扫描 { key_v = key_s; // 保存键值 proc_key(); // 键处理 } } if(RI) // 是否有数据到来 { RI = 0; tmp = SBUF; // 暂存接收到的数据 P2 = tmp; // 数据传送到P0口 send_char(tmp); // 回传接收到的数据 } } } bit scan_key() { key_s = 0x00; key_s |= K1; return(key_s ^ key_v); } void proc_key() { if((key_v & 0x01) == 0) { // K1按下 send_str(); // 传送字串"welcome!... } } void send_char(unsigned char txd) { SBUF = txd; while(!TI); // 等特数据传送 TI = 0; // 清除数据传送标志 } void send_str() { unsigned char i = 0; while(str1[i] != ‘\0‘) { SBUF = str1[i]; while(!TI); // 等特数据传送 TI = 0; // 清除数据传送标志 i++; // 下一个字符 } i = 0; while(str2[i] != ‘\0‘) { SBUF = str2[i]; while(!TI); // 等特数据传送 TI = 0; // 清除数据传送标志 i++; // 下一个字符 } i = 0; while(str3[i] != ‘\0‘) { SBUF = str3[i]; while(!TI); // 等特数据传送 TI = 0; // 清除数据传送标志 i++; // 下一个字符 } } void delayms(unsigned char ms) { unsigned char i; while(ms--) { for(i = 0; i < 120; i++); } }
以上是关于51串口通信的主要内容,如果未能解决你的问题,请参考以下文章