3
115
561
高级会员
tlx*** 发表于 2026-5-4 18:12 这个更没玩过了
使用道具 举报 送花
9
65
注册会员
wul*** 发表于 2026-5-5 20:04 模拟串口很占用CPU资源,还是考虑串口在不同的管脚上切换为宜。
tlx*** 发表于 2026-5-5 22:11 我整个程序就是串口转发,不做其他的事情
26
231
中级会员
#include "STC8H.h" typedef unsigned char uchar; typedef unsigned int uint; sbit RXB = P3^0; //定义UART TX/RX端口 sbit TXB = P3^1; uchar TBUF,RBUF; uchar TDAT,RDAT; uchar TCNT,RCNT; uchar TBIT,RBIT; bit TING,RING; bit TEND,REND; uchar t, r; uchar buf[16]; //初始UART模块 void UART_INIT() { TING = 0; RING = 0; TEND = 1; REND = 0; TCNT = 0; RCNT = 0; TMOD = 0x02; //8位自动重载12T模式 TL1 = 0xE8; //设定定时初值(波特率1200) TH1 = 0xE8; //设定定时器重装值 // TMOD = 0x00; // 16位自动重载模式中的Time0 // AUXR = 0x80; // 1T工作模式 // TL0 = BAUD; // TH0 = BAUD>>8; // 初始Time0和设置重载值 TR0 = 1; // tiemr0开始运行 ET0 = 1; // 启用Time0中断 PT0 = 1; // 提高定时中断优先级 EA = 1; // 打开全局中断开关 } // void main() { P0M0 = 0x00;P0M1 = 0x00; P1M0 = 0x00;P1M1 = 0x00; P2M0 = 0x00;P2M1 = 0x00; P3M0 = 0x00;P3M1 = 0x00; P4M0 = 0x00;P4M1 = 0x00; P5M0 = 0x00;P5M1 = 0x00; P6M0 = 0x00;P6M1 = 0x00; P7M0 = 0x00;P7M1 = 0x00; UART_INIT(); //初始UART模块 while (1) { //用户功能 if (REND) //接收完成标志为真 { REND = 0;//接收完成标志清0 buf[r++ & 0x0f] = RBUF;//保存在缓存中 } if (TEND) { if (t != r) { TEND = 0; TBUF = buf[t++ & 0x0f];//发送缓存中数据 TING = 1; } } } } //UART定时器中断例程 void tm0() interrupt 1 using 1 { if (RING) { if (--RCNT == 0) { RCNT = 3; //重置发送波特率计数器 if (--RBIT == 0) { RBUF = RDAT; //将数据保存到RBUF RING = 0; //停止接收 REND = 1; //设置接收完成标志 } else { RDAT >>= 1; if (RXB) RDAT |= 0x80; //将RX数据转换为RX缓冲区 } } } else if (!RXB) { RING = 1; //设置开始接收标志 RCNT = 4; //初始接收波特率计数器 RBIT = 9; //initial receive bit number (8 data bits + 1 stop bit) } //初始接收比特数(8个数据位+ 1个停止位) if (--TCNT == 0) { TCNT = 3; //重置发送波特率计数器 if (TING) //判断是否发送 { if (TBIT == 0) { TXB = 0; //发送起始位 TDAT = TBUF; //加载数据 TBUF 到 TDAT TBIT = 9; //initial send bit number (8 data bits + 1 stop bit) } //初始发送比特数(8个数据位+ 1个停止位) else { TDAT >>= 1; //将数据转换到CY if (--TBIT == 0) { TXB = 1; TING = 0; //停止发送 TEND = 1; //设置发送完成标志 } else { TXB = CY; //将CY写入TX端口 } } } } } 复制代码
本版积分规则 发表回复 回帖后跳转到最后一页
|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )
GMT+8, 2026-5-9 05:41 , Processed in 0.140756 second(s), 71 queries .
Powered by Discuz! X3.5
© 2001-2026 Discuz! Team.