熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2020-2-20 20:07
正文摘要:串口設(shè)置通信,輸入數(shù)字為什么燈就是不亮,是程序哪里有問(wèn)題還是串口助手設(shè)置錯(cuò)了 串口中斷中能使用while(TI==0) 替代while(!TI) 還有人說(shuō)不能在串口中斷中使用while循環(huán) & ... |
。。jj 發(fā)表于 2020-2-21 09:22 問(wèn)題找出來(lái)了 買板子的時(shí)候商家說(shuō)晶振是12MHZ的 但板子晶振是11.0592 波特率一直不對(duì) ![]() |
。。jj 發(fā)表于 2020-2-21 09:22 燈可以亮 好像接受出現(xiàn)了問(wèn)題 發(fā)送1的時(shí)候燈led6,led7都亮了 但返回的數(shù)據(jù)一直亂碼 ![]() #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() //串口初始化函數(shù) { TMOD=0x20; //設(shè)置計(jì)數(shù)器工作方式2 TH1=0xF3; //計(jì)數(shù)器初始值設(shè)置,注意波特率是4800 TL1=0xF3; PCON=0x80; //波特率加倍 TR1=1; //打開(kāi)計(jì)數(shù)器 SCON=0x50; //設(shè)置為工作方式1 ES=1; //打開(kāi)接收中斷 EA=1; //打開(kāi)總中斷 } 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; //出去接收到的數(shù)據(jù) if(RI==1) { led6=0; } RI=0; //清除接收中斷標(biāo)志位 SBUF=receiveData; //將接收到的數(shù)據(jù)放入到發(fā)送寄存器 while(!TI); //等待發(fā)送數(shù)據(jù)完成 if(TI==1) { led7=0; } TI=0; //清除發(fā)送完成標(biāo)志位 } int main() { uart_init(); //串口初始化 while(1); return 0; } |
wulin 發(fā)表于 2020-2-21 06:07 請(qǐng)教一下大佬 現(xiàn)在能接受和發(fā)送但是一直是亂碼 這個(gè)哪里錯(cuò)了嗎 ![]() 晶振是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() //串口初始化函數(shù) { TMOD=0x20; //設(shè)置計(jì)數(shù)器工作方式2 TH1=0xF3; //計(jì)數(shù)器初始值設(shè)置,注意波特率是4800 TL1=0xf3; PCON=0x80; //波特率加倍 TR1=1; //打開(kāi)計(jì)數(shù)器 SCON=0x50; //設(shè)置為工作方式1 ES=1; //打開(kāi)接收中斷 EA=1; //打開(kāi)總中斷 } 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\串口發(fā)送問(wèn)題.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; 這個(gè)地方是不是要改成led0=~led0;每次取一下反 |
樓主的程序沒(méi)有問(wèn)題,我在開(kāi)發(fā)板上試了一下,我的led可以亮,應(yīng)該是樓主的led出了問(wèn)題。 |
根據(jù)串口助手截圖看來(lái)你的串口通信問(wèn)題不大,燈不亮要用萬(wàn)用表查led相關(guān)電路是否沒(méi)接對(duì),或者不通。 |
從程序看沒(méi)有嚴(yán)重問(wèn)題。分支判斷使用了字符數(shù)字0~7 case '0':led0=0;break;,串口助手要用文本模式發(fā)送數(shù)字0~7,接收端才能正確解析信息,如果用HEX模式發(fā)送數(shù)字就要去掉分支語(yǔ)句中的單引號(hào)。 |
Powered by 單片機(jī)教程網(wǎng)