找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2648|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

使用單片機(jī)串口控制LED亮滅

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:695930 發(fā)表于 2020-2-21 07:06 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 你速度發(fā)生的 于 2020-2-21 08:49 編輯

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


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


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:612392 發(fā)表于 2020-2-21 10:31 | 只看該作者
1.串口收發(fā)正常嗎?
2.上位機(jī)發(fā)送命令是否是16進(jìn)制?
回復(fù)

使用道具 舉報

板凳
ID:695930 發(fā)表于 2020-2-21 12:09 | 只看該作者
cjjdemon 發(fā)表于 2020-2-21 10:31
1.串口收發(fā)正常嗎?
2.上位機(jī)發(fā)送命令是否是16進(jìn)制?

串口收發(fā)正常,上位機(jī)發(fā)送命令是16進(jìn)制
回復(fù)

使用道具 舉報

地板
ID:695930 發(fā)表于 2020-2-21 14:19 | 只看該作者
cjjdemon 發(fā)表于 2020-2-21 10:31
1.串口收發(fā)正常嗎?
2.上位機(jī)發(fā)送命令是否是16進(jìn)制?

你好,串口收發(fā)正常。上位機(jī)發(fā)送命令是16進(jìn)制
回復(fù)

使用道具 舉報

5#
ID:560467 發(fā)表于 2020-2-21 15:46 | 只看該作者
考慮一下你接受到的數(shù)據(jù)有沒有問題,波特率是否一致,
回復(fù)

使用道具 舉報

6#
ID:695930 發(fā)表于 2020-2-21 15:54 | 只看該作者
CZ1 發(fā)表于 2020-2-21 15:46
考慮一下你接受到的數(shù)據(jù)有沒有問題,波特率是否一致,

你好接受到的數(shù)據(jù)是指我使用上位機(jī)向單片機(jī)發(fā)送的數(shù)據(jù)嗎?我的波特率是一致的
回復(fù)

使用道具 舉報

7#
ID:419968 發(fā)表于 2020-2-21 19:48 | 只看該作者
stc51 p0.0 初始化成 推挽輸出
回復(fù)

使用道具 舉報

8#
ID:213173 發(fā)表于 2020-2-21 21:18 | 只看該作者
樓主串口初始化設(shè)置不當(dāng),根據(jù)晶振頻率選擇如下設(shè)置:
void UartInit()                //9600bps@11.0592MHz
{
        PCON = 0x00;                //波特率不倍速
        SCON = 0x50;                //8位數(shù)據(jù),可變波特率
        TMOD = 0x20;                //設(shè)定定時器1為8位自動重裝方式
        TL1 = 0xFD;                        //設(shè)定定時初值
        TH1 = 0xFD;                        //設(shè)定定時器重裝值
        TR1 = 1;                                //啟動定時器1
        ES=1;                                        //打開接收中斷
        EA=1;                                        //打開總中斷
}
void UartInit()                //4800bps@12.000MHz
{
        PCON = 0x80;                //使能波特率倍速位SMOD
        SCON = 0x50;                //8位數(shù)據(jù),可變波特率
        TMOD|= 0x20;                //設(shè)定定時器1為8位自動重裝方式
        TL1 = 0xF3;                        //設(shè)定定時初值
        TH1 = 0xF3;                        //設(shè)定定時器重裝值
        TR1 = 1;                                //啟動定時器1
        ES=1;                                        //打開接收中斷
        EA=1;                                        //打開總中斷
}
回復(fù)

使用道具 舉報

9#
ID:470755 發(fā)表于 2020-2-21 23:44 | 只看該作者
把你要調(diào)用的函數(shù)在主函數(shù)前面聲明一下,或者是寫在主函數(shù)前面
回復(fù)

使用道具 舉報

10#
ID:695930 發(fā)表于 2020-2-22 16:37 | 只看該作者
wulin 發(fā)表于 2020-2-21 21:18
樓主串口初始化設(shè)置不當(dāng),根據(jù)晶振頻率選擇如下設(shè)置:
void UartInit()                //9600bps@11.0592MHz
{

你好我試了一下發(fā)現(xiàn)也還是不行。。
回復(fù)

使用道具 舉報

11#
ID:696761 發(fā)表于 2020-2-22 23:36 來自手機(jī) | 只看該作者
首先確認(rèn)下數(shù)據(jù)有沒有發(fā)出,串口是否正常傳輸數(shù)據(jù),這個沒問題就試下給數(shù)據(jù)燈會不會亮
回復(fù)

使用道具 舉報

12#
ID:695930 發(fā)表于 2020-4-3 21:52 | 只看該作者
我這個整體來說沒問題,我之前自己發(fā)現(xiàn)問題主要是晶振不穩(wěn)定,建議大家使用11.0592MHz,wulin那有兩種晶振的串口設(shè)置具體的大家自己弄吧
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表