找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2108|回复: 9
打印 上一主题 下一主题
收起左侧

89c52单片机串口接收程序向stc8a8k64d4移植后没有反应的问题

[复制链接]
跳转到指定楼层
楼主
大佬们,之前我用51单片机弄了个串口接收(无反馈pc端,单接收)的程序。实验效果是单片机接收到串口信号后反馈给P1的端口。然后对端口的高低电平来做判断。后来换了STC8a的板子。然后接收程序不变,中断程序按照烧录软件的例程复制过来。然而运行后一直没有反应。之后一直改都亦是如此。我也是有点懵了。所以浪费大佬们的一点时间来帮我看看具体是什么问题...

程序如下:(已包括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空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1023753 发表于 2022-8-8 15:33 | 只看该作者
串口端口定义对不对,晶振频率,波特率选择对不对?
回复

使用道具 举报

板凳
ID:639106 发表于 2022-8-8 19:57 | 只看该作者
应该是寄存器不同吧,stc8系列的寄存器·有些不同,需要按数据手册进行调整
回复

使用道具 举报

地板
ID:624769 发表于 2022-8-8 21:28 | 只看该作者
TMOD = 0x00;
回复

使用道具 举报

5#
ID:155507 发表于 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. }

复制代码
回复

使用道具 举报

6#
ID:195496 发表于 2022-8-9 09:08 | 只看该作者
新单片机是1T的,程序要修改才能用,涉及到有关波特率的寄存器
回复

使用道具 举报

7#
ID:161164 发表于 2022-8-9 09:37 | 只看该作者
换芯片的时候要留意寄存器设置的分别
下面是STC89C的


下面是STC8的


你的代码中有AUXR = 0x15;
选择定时器2作为波特率发射器

但前几句是定时器1的初始化
所以波特率不对


回复

使用道具 举报

8#
ID:1034262 发表于 2022-8-9 09:59 | 只看该作者
STC8A8K64D4速度远比STC89的快。波特率计算方法也不同,IO上电后是高阻,要设置。
回复

使用道具 举报

9#
ID:1034262 发表于 2022-8-9 09:59 | 只看该作者
楼主可以取STC官网下载例子直接测试。
回复

使用道具 举报

10#
ID:123289 发表于 2022-8-9 10:16 | 只看该作者
向7#多学习学习,学会查数据手册。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表