找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

89c52單片機串口接收程序向stc8a8k64d4移植后沒有反應(yīng)的問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1041580 發(fā)表于 2022-8-7 21:02 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
大佬們,之前我用51單片機弄了個串口接收(無反饋pc端,單接收)的程序。實驗效果是單片機接收到串口信號后反饋給P1的端口。然后對端口的高低電平來做判斷。后來換了STC8a的板子。然后接收程序不變,中斷程序按照燒錄軟件的例程復(fù)制過來。然而運行后一直沒有反應(yīng)。之后一直改都亦是如此。我也是有點懵了。所以浪費大佬們的一點時間來幫我看看具體是什么問題...

程序如下:(已包括8a的頭文件)

#include "stc8aa.h"
#include "intrins.h"

#define FOSC            11059200UL
#define BRT             (65536 - FOSC / 115200 / 4)

sbit tx1=P2^0;

unsigned char Receive(void)
{
        unsigned char dat;
        while(RI==0);
                 RI=0;
                dat=SBUF;
                 return dat;
}

void Uart1_Init()                                                                    
{
                SCON = 0x50;
                TMOD = 0x20;
    TL1 = BRT;
    TH1 = BRT >> 8;
    TR1 = 1;
                REN=1;
    AUXR = 0x15;
}

void main()
{
    UartInit();
    ES = 1;
    EA = 1;
    P2M0 = 0x00;
    P2M1 = 0x00;
                P1=Receive();
                if(P1==0xfe)
                {
                        tx1=0;
                }
}


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

使用道具 舉報

沙發(fā)
ID:1023753 發(fā)表于 2022-8-8 15:33 | 只看該作者
串口端口定義對不對,晶振頻率,波特率選擇對不對?
回復(fù)

使用道具 舉報

板凳
ID:639106 發(fā)表于 2022-8-8 19:57 | 只看該作者
應(yīng)該是寄存器不同吧,stc8系列的寄存器·有些不同,需要按數(shù)據(jù)手冊進行調(diào)整
回復(fù)

使用道具 舉報

地板
ID:624769 發(fā)表于 2022-8-8 21:28 | 只看該作者
TMOD = 0x00;
回復(fù)

使用道具 舉報

5#
ID:155507 發(fā)表于 2022-8-8 22:00 | 只看該作者
STC8A 是 1T 單片機

  1. #include "reg51.h"
  2. #include "intrins.h"

  3. #define FOSC            11059200UL
  4. #define BRT             (65536 - FOSC / 115200 / 4)

  5. sfr     AUXR        =   0x8e;

  6. bit busy;
  7. char wptr;
  8. char rptr;
  9. char buffer[16];

  10. void UartIsr() interrupt 4
  11. {
  12.     if (TI)
  13.     {
  14.         TI = 0;
  15.         busy = 0;
  16.     }
  17.     if (RI)
  18.     {
  19.         RI = 0;
  20.         buffer[wptr++] = SBUF;
  21.         wptr &= 0x0f;
  22.     }
  23. }

  24. void UartInit()
  25. {
  26.     SCON = 0x50;
  27.     TMOD = 0x00;
  28.     TL1 = BRT;
  29.     TH1 = BRT >> 8;
  30.     TR1 = 1;
  31.     AUXR = 0x40;
  32.     wptr = 0x00;
  33.     rptr = 0x00;
  34.     busy = 0;
  35. }

  36. void UartSend(char dat)
  37. {
  38.     while (busy);
  39.     busy = 1;
  40.     SBUF = dat;
  41. }

  42. void UartSendStr(char *p)
  43. {
  44.     while (*p)
  45.     {
  46.         UartSend(*p++);
  47.     }
  48. }

  49. void main()
  50. {
  51.     UartInit();
  52.     ES = 1;
  53.     EA = 1;
  54.     UartSendStr("Uart Test !\r\n");

  55.     while (1)
  56.     {
  57.         if (rptr != wptr)
  58.         {
  59.             UartSend(buffer[rptr++]);
  60.             rptr &= 0x0f;
  61.         }
  62.     }
  63. }

復(fù)制代碼
回復(fù)

使用道具 舉報

6#
ID:195496 發(fā)表于 2022-8-9 09:08 | 只看該作者
新單片機是1T的,程序要修改才能用,涉及到有關(guān)波特率的寄存器
回復(fù)

使用道具 舉報

7#
ID:161164 發(fā)表于 2022-8-9 09:37 | 只看該作者
換芯片的時候要留意寄存器設(shè)置的分別
下面是STC89C的


下面是STC8的


你的代碼中有AUXR = 0x15;
選擇定時器2作為波特率發(fā)射器

但前幾句是定時器1的初始化
所以波特率不對


回復(fù)

使用道具 舉報

8#
ID:1034262 發(fā)表于 2022-8-9 09:59 | 只看該作者
STC8A8K64D4速度遠比STC89的快。波特率計算方法也不同,IO上電后是高阻,要設(shè)置。
回復(fù)

使用道具 舉報

9#
ID:1034262 發(fā)表于 2022-8-9 09:59 | 只看該作者
樓主可以取STC官網(wǎng)下載例子直接測試。
回復(fù)

使用道具 舉報

10#
ID:123289 發(fā)表于 2022-8-9 10:16 | 只看該作者
向7#多學(xué)習(xí)學(xué)習(xí),學(xué)會查數(shù)據(jù)手冊。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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