。。jj 发表于 2020-2-21 09:22 问题找出来了 买板子的时候商家说晶振是12MHZ的 但板子晶振是11.0592 波特率一直不对 ![]() |
。。jj 发表于 2020-2-21 09:22 灯可以亮 好像接受出现了问题 发送1的时候灯led6,led7都亮了 但返回的数据一直乱码 ![]() #include <reg52.h> #define uint unsigned int #define uchar unsigned char uchar i; sbit led0=P2^0; sbit led1=P2^1; sbit led2=P2^2; sbit led3=P2^3; sbit led4=P2^4; sbit led5=P2^5; sbit led6=P2^6; sbit led7=P2^7; void uart_init() //串口初始化函数 { TMOD=0x20; //设置计数器工作方式2 TH1=0xF3; //计数器初始值设置,注意波特率是4800 TL1=0xF3; PCON=0x80; //波特率加倍 TR1=1; //打开计数器 SCON=0x50; //设置为工作方式1 ES=1; //打开接收中断 EA=1; //打开总中断 } void uart() interrupt 4 { uchar receiveData; i=SBUF; switch(i) { case '0':led0=0;break; case '1':led1=0;break; case '2':led2=0;break; case '3':led3=0;break; case '4':led4=0;break; case '5':led5=0;break; // case '6':led6=0;break; // case '7':led7=0;break; default:P2=0XFF;break; } receiveData=SBUF; //出去接收到的数据 if(RI==1) { led6=0; } RI=0; //清除接收中断标志位 SBUF=receiveData; //将接收到的数据放入到发送寄存器 while(!TI); //等待发送数据完成 if(TI==1) { led7=0; } TI=0; //清除发送完成标志位 } int main() { uart_init(); //串口初始化 while(1); return 0; } |
wulin 发表于 2020-2-21 06:07 请教一下大佬 现在能接受和发送但是一直是乱码 这个哪里错了吗 ![]() 晶振是12MHZ #include<reg52.h> #define uint unsigned int #define uchar unsigned char uchar temp=85; sbit LED1=P2^0; void Delay1ms(unsigned int T) { unsigned int x; for(;T>0;T--) { for(x=110;x>0;x--); } } void uart_init() //串口初始化函数 { TMOD=0x20; //设置计数器工作方式2 TH1=0xF3; //计数器初始值设置,注意波特率是4800 TL1=0xf3; PCON=0x80; //波特率加倍 TR1=1; //打开计数器 SCON=0x50; //设置为工作方式1 ES=1; //打开接收中断 EA=1; //打开总中断 } void SentData(uchar temp) { SBUF=temp; while(TI==0); if(TI==1) { LED1=~LED1; } TI=0; } int main() { uart_init(); while(1) { SentData(temp); Delay1ms(250); Delay1ms(250); } return 0; } C:\Users\Administrator\Desktop\串口发送问题.png |
case '0':led0=0;break; case '1':led1=0;break; case '2':led2=0;break; case '3':led3=0;break; case '4':led4=0;break; case '5':led5=0;break; case '6':led6=0;break; case '7':led7=0;break; default:P2=0XFF;break; 这个地方是不是要改成led0=~led0;每次取一下反 |
楼主的程序没有问题,我在开发板上试了一下,我的led可以亮,应该是楼主的led出了问题。 |
根据串口助手截图看来你的串口通信问题不大,灯不亮要用万用表查led相关电路是否没接对,或者不通。 |
从程序看没有严重问题。分支判断使用了字符数字0~7 case '0':led0=0;break;,串口助手要用文本模式发送数字0~7,接收端才能正确解析信息,如果用HEX模式发送数字就要去掉分支语句中的单引号。 |