通过USB转TTL |
这点东西也很难吗?开个数组存起来不就行了 |
cn_zhx 发表于 2021-2-21 15:24 嗯对 是这个意思。 但串口3的收发程序编写不知道哪里错了,不能收发,能不能帮忙看看。 #include "stc15f2k60s2.h" // 单片机STC15F2K60S2头文件,可以不再加入reg51.h #include "uart.h" sbit KEY1 = P2^0; sbit KEY2 = P2^1; #define S3RI 0x01 //S3CON.0 #define S3TI 0x02 //S3CON.1 #define ES3 0x08 //IE2.3 #define uchar unsigned char #define uint unsigned int unsigned char date; void delay(uint z) { uint i,j; for(i=z;i>0;i--) for(j=110;j>0;j--); } void UartInit(void); void Uart3Init(void); void main(void) { //定时器 TMOD = 0x00;//定时器0,模式0 TH0=0x3c;//50ms定时器初值设定 TL0=0xb0; TR0=1; ET0=1; EA=1; UartInit(); Uart3Init(); led1 = 1; led3 = 1; while(1) { if(KEY2==0) { delay(1000); if(KEY2==0) //确认触发 { SBUF = '1'; delay(100); } if(KEY1==0) { delay(1000); if(KEY1==0) //确认触发 { S3BUF='2'; delay(100); } } } } } void uart1ISR() interrupt 4 { if(RI){ date=SBUF; //单片机接受 SBUF=date; //单片机发送 RI=0; } if(TI){ TI=0; } } void UART3_Isr(void) interrupt 17 { if (S3CON & S3RI) { date = S3BUF; S3BUF = date; S3CON &= ~S3RI; // 清中断标志 } if (S3CON & S3TI) { S3CON &= ~S3TI; // 清中断标志 } } void Uart3Init(void) { // S3CON = 0x10; // 8位数据,可变波特率 // T2L=(65536-11059200/4/9600); // T2H=(65536-11059200/4/9600)>>8; // AUXR = 0x14; //定时器2时钟为Fosc,即1T // IE2=0x08; // 使能串口中断 // EA = 1; // 开总中断 S3CON = 0x10; // 8位数据,可变波特率 AUXR |= 0x04; // 定时器2时钟为Fosc,即1T T2L = (65536-11059200/4/9600); T2H = (65536-11059200/4/9600)>>8; // 设定定时初值 AUXR |= 0x10; // 启动定时器2 IE2 = ES3; // 使能串口中断 EA = 1; // 开总中断 } void UartInit(void) //9600bps { /* SCON = 0x50; //8位数据,可变波特率 // AUXR = 0x15; //定时器2时钟为Fosc,即1T T2L=(65536-11059200/4/9600); T2H=(65536-11059200/4/9600)>>8; ET1 = 0; //禁止定时器1中断 ES=1;*/ SCON = 0x50; // 8位数据,可变波特率 AUXR |= 0x40; // 定时器1时钟为Fosc,即1T AUXR &= 0xFE; // 串口1选择定时器1为波特率发生器 TMOD &= 0x0F; // 设定定时器1为16位自动重装方式 TL1 = (65536-11059200/4/9600); // 设定定时初值 TH1 = (65536-11059200/4/9600)>>8; // 设定定时初值 ET1 = 0; // 禁止定时器1中断 TR1 = 1; // 启动定时器1 ES = 1; // 开串口中断 EA = 1; // 开总中断 } |
你的问题描述的不太明白。 看看是不是这样:P30接收的数据从P11发送出去,相反,P10接收的数据从P31发送出去。如果是这样的话,写上两个不同串口的收发程序,透明发送出去就行。 |
随便网上搜个STM32的ESP8266例程就好了,自己改一下 |
418854190 发表于 2021-2-19 16:19 好的 我看看 另外请问你说的下载软件的范例程序是哪里找的 |
如果这个芯片有双串口,那就从芯片手册上去找,我记得stc的新芯片官方都给例程 |
这两个串口是完全独立的,不能进行相互切换 |
不懂C语言 汇编转过P3.6 P3.7 想转哪个就调用哪个 用的是STC15W204S 试过用P3.0接收 P3.7发送 程序是在下载软件的范例程序里找的 源程序没用明白 把改串口的部分提取出来就行了 ;串口P3.0_RX P3.1_TX RXTX30: MOV A,P_SW1; ANL A,#03FH; //S1_S0=0 S1_S1=0 MOV P_SW1,A; //(P3.0/RxD, P3.1/TxD) RET; ;----------------------- ;串口P3.6_RX P3.7_TX RXTX36: MOV A,P_SW1 ANL A,#03FH //S1_S0=1 S1_S1=0 ORL A,#S1_S0 //(P3.6/RxD_2, P3.7/TxD_2) MOV P_SW1,A RET; |
devcang 发表于 2021-2-19 12:08 这总共有四组串口。 下载读写用的是P30和P31,想将P30的RX转P11的tx2,P10的rx2转P31的tx。但不知道该怎么操作编码。 |
devcang 发表于 2021-2-19 12:08 这个芯片总共有四组串行口。 因为下载用的是P30和P31口,将3031收到的at指令再发过去(rx转tx2,rx2转tx)。我不知道该怎么编码。 |
你好@ 这两个串口是完全独立的,不能进行相互切换 |
这是双串口的MCU,打开双串口(完整版的下载工具中有例子),速率相同,就可以通讯了 |
是为了解决发送AT指令,没有反应的问题。希望大佬们给点方法思路! |