#include<reg52.h> //程式的功能就是通過電腦給的單片機發送一個10進制
#include<intrins.h> //數字,讓單片機在數碼管上顯示
typedef unsigned int uint;
typedef unsigned char uchar;
sbit A0=P2^2;
sbit A1=P2^3;
sbit A2=P2^4;
uint num;
void delay(uint i)
{
while(i--);
}
void display(uint i)
{
uchar bai,shi,ge;
uchar a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
bai=i/100;
shi=i%100/10;
ge=i%10;
P0=0x00;
A0=0;A1=0;A2=0;
P0=a[ge];
delay(100);
P0=0x00;
A0=1;A1=0;A2=0;
P0=a[shi];
delay(100);
P0=0x00;
A0=0;A1=1;A2=0;
P0=a[bai];
delay(100);
}
void UARTInit()
{
EA=1; //打開總中斷
ES=1; //打開串口中斷允許位
SM0=0; SM1=1; //設定串口作業模式
REN=1; //打開串口,允許串口收發資料
TR1=1; //啟動定時器1產生波特率
TMOD=0x20; //設定定時器1的作業模式
TH1=0XFD; //設定波特率9600,經過計算TL1初值為253時能產生9600的波特率
TL1=0XFD;
}
void UART () interrupt 4
{
if(RI)
{
num=SBUF;
RI=0; //軟體清零接受標志位
}
display(num);
}
void main()
{
while(1)
{
UARTInit();
}
}
uj5u.com熱心網友回復:
單片機用的普中的51學習板。因為用串口通信調式,用的普中自帶的串口調式小程式。這是調式的界面,無論我在輸入區輸入什么單片機都沒任何反應
uj5u.com熱心網友回復:
UARTInit 放在回圈外面uj5u.com熱心網友回復:
可還是沒反應啊
uj5u.com熱心網友回復:
num=SBUF-'0';uj5u.com熱心網友回復:
中斷里不要 放 delayuj5u.com熱心網友回復:
你是usb 轉串口還是直接用的串口對串口?程式想寫入單片機首先硬體和驅動程式一定不能少,再一個就是你的系統是不是支持串口驅動程式?串口驅動程式版本低也不行,重新再從相關網站下載驅動,希望可以幫到你,window 7 系統不行的話,試試window XP 系統試試uj5u.com熱心網友回復:
串口初始化順序,一般還真沒像你這樣寫的,基本都是先配置后使能,你是先運行定時器之后配置,猜測可能定時器不支持運行時配置,所以是作業在默認模式,此時波特率很低,而PC是9600,假設單片機實際波特率100,你發96個單片機才收到一個,實際還不一定能收到uj5u.com熱心網友回復:
樓主在串口通訊除錯前完成數碼管動態顯示了嗎?uj5u.com熱心網友回復:
謝謝樓主分享uj5u.com熱心網友回復:
你這.....,小學生!?初始化串口放在while(1)外面,串口接收中斷只接收資料,對資料的處理和顯示,丟在while(1)里面去做uj5u.com熱心網友回復:
void UART () interrupt 4
{
if(RI)
{
num=SBUF;
RI=0; //軟體清零接受標志位
}
display(num); //中斷一般只負責做簡單的接收資料,顯示放在主回圈里
}
void main()
{
//需要初始化的動作放在此處
while(1)
{
UARTInit(); //回圈里,執行會發生變化的動作,或對狀態的監視,初始化放在此處錯誤
}
}
lz還需要好好學習天天向上,加油
uj5u.com熱心網友回復:
謝謝





uj5u.com熱心網友回復:
完成了完成,我那個display就是用的動態數碼管的程式
uj5u.com熱心網友回復:
謝謝樓主分享轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/7863.html
標籤:單片機/工控
上一篇:無人機新手
