欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 使用單片機串口控制LED亮滅 [打印本頁]

作者: 你速度發生的    時間: 2020-2-21 07:06
標題: 使用單片機串口控制LED亮滅
本帖最后由 你速度發生的 于 2020-2-21 08:49 編輯

請問各位大神我的程序哪里有錯誤呢??
我這個程序為啥發送控制led亮0x01控制led滅0x00都沒有反應呢?


#include "reg52.h"    //此文件中定義了單片機的一些特殊功能寄存器
typedef unsigned int u16;   //對數據類型進行聲明定義
typedef unsigned char u8;
u8 i;
sbit led=P0^0;
/*******************************************************************************
* 函數名         :UsartInit()
* 函數功能     :設置串口
* 輸入           : 無
* 輸出           : 無
*******************************************************************************/
void UsartInit()
{
SCON=0X50;   //設置為工作方式1
TMOD=0X20;   //設置計數器工作方式2
PCON=0X80;   //波特率加倍
TH1=0XF9;    //計數器初始值設置,注意波特率是9600的
TL1=0XF9;
ES=1;      //打開接收中斷
EA=1;      //打開總中斷
TR1=1;     //打開計數器
}
/*******************************************************************************
* 函 數 名       : main
* 函數功能   : 主函數
* 輸    入       : 無
* 輸    出      : 無
*******************************************************************************/
void main()
{
led=0;
UsartInit(); // 串口初始化  
  while(1);
}
/*******************************************************************************
* 函數名         : Usart() interrupt 4
* 函數功能    : 串口通信中斷函數
* 輸入           : 無
* 輸出           : 無
*******************************************************************************/
void Usart() interrupt 4
{
u8 receiveData;
   i=SBUF;
    switch(i)
   {
    case 0x01 :led=0;break;
    case 0x00 :led=1;break;
    default : ;
   }
   receiveData=SBUF;
   RI=0;
   SBUF=receiveData;
while(!TI);    //等待發送數據完成
TI=0;       //清除發送完成標志位
}



作者: cjjdemon    時間: 2020-2-21 10:31
1.串口收發正常嗎?
2.上位機發送命令是否是16進制?
作者: 你速度發生的    時間: 2020-2-21 12:09
cjjdemon 發表于 2020-2-21 10:31
1.串口收發正常嗎?
2.上位機發送命令是否是16進制?

串口收發正常,上位機發送命令是16進制
作者: 你速度發生的    時間: 2020-2-21 14:19
cjjdemon 發表于 2020-2-21 10:31
1.串口收發正常嗎?
2.上位機發送命令是否是16進制?

你好,串口收發正常。上位機發送命令是16進制
作者: CZ1    時間: 2020-2-21 15:46
考慮一下你接受到的數據有沒有問題,波特率是否一致,
作者: 你速度發生的    時間: 2020-2-21 15:54
CZ1 發表于 2020-2-21 15:46
考慮一下你接受到的數據有沒有問題,波特率是否一致,

你好接受到的數據是指我使用上位機向單片機發送的數據嗎?我的波特率是一致的
作者: adject    時間: 2020-2-21 19:48
stc51 p0.0 初始化成 推挽輸出
作者: wulin    時間: 2020-2-21 21:18
樓主串口初始化設置不當,根據晶振頻率選擇如下設置:
void UartInit()                //9600bps@11.0592MHz
{
        PCON = 0x00;                //波特率不倍速
        SCON = 0x50;                //8位數據,可變波特率
        TMOD = 0x20;                //設定定時器1為8位自動重裝方式
        TL1 = 0xFD;                        //設定定時初值
        TH1 = 0xFD;                        //設定定時器重裝值
        TR1 = 1;                                //啟動定時器1
        ES=1;                                        //打開接收中斷
        EA=1;                                        //打開總中斷
}
void UartInit()                //4800bps@12.000MHz
{
        PCON = 0x80;                //使能波特率倍速位SMOD
        SCON = 0x50;                //8位數據,可變波特率
        TMOD|= 0x20;                //設定定時器1為8位自動重裝方式
        TL1 = 0xF3;                        //設定定時初值
        TH1 = 0xF3;                        //設定定時器重裝值
        TR1 = 1;                                //啟動定時器1
        ES=1;                                        //打開接收中斷
        EA=1;                                        //打開總中斷
}

作者: 尼瑪西亞    時間: 2020-2-21 23:44
把你要調用的函數在主函數前面聲明一下,或者是寫在主函數前面
作者: 你速度發生的    時間: 2020-2-22 16:37
wulin 發表于 2020-2-21 21:18
樓主串口初始化設置不當,根據晶振頻率選擇如下設置:
void UartInit()                //9600bps@11.0592MHz
{

你好我試了一下發現也還是不行。。
作者: CWP    時間: 2020-2-22 23:36
首先確認下數據有沒有發出,串口是否正常傳輸數據,這個沒問題就試下給數據燈會不會亮
作者: 你速度發生的    時間: 2020-4-3 21:52
我這個整體來說沒問題,我之前自己發現問題主要是晶振不穩定,建議大家使用11.0592MHz,wulin那有兩種晶振的串口設置具體的大家自己弄吧




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1