首页 > 代码库 > 51串口通信
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串口通信
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。