|
發布時間: 2020-2-20 20:07
正文摘要:串口設置通信,輸入數字為什么燈就是不亮,是程序哪里有問題還是串口助手設置錯了 串口中斷中能使用while(TI==0) 替代while(!TI) 還有人說不能在串口中斷中使用while循環 & ... |
。。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模式發送數字就要去掉分支語句中的單引號。 |