找回密码
 立即注册
查看: 267|回复: 5

关于AI8051U的串口超时检测的事宜

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:454
  • 最近打卡:2025-05-01 07:53:22

28

主题

162

回帖

1879

积分

金牌会员

积分
1879
发表于 2024-12-6 21:25:16 | 显示全部楼层 |阅读模式

今天再测试串口一的超时中断功能,想实现串口输入数字,转换成整数

在使用串口超时功能发现,如果是以进入中断的方式,完全没问题,即

UR1TOCR = 0xff;

#include <STC8051U.H>
#include "intrins.h"
#include <stdio.h>
#include <math.h>

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

bit busy;
char wptr;
char rptr;
char buffer[16];

void UartIsr() interrupt 4
{
    if (TI)
    {
        TI = 0;
        busy = 0;
    }
    if (RI)
    {
        RI = 0;
        buffer[wptr++] = SBUF;
        wptr &= 0x0f;
    }
}

void UartSend(char dat)
{
    while (busy);
    busy = 1;
    SBUF = dat;
}

//void UartSendStr(char *p)
//{
//    while (*p)
//    {
//        UartSend(*p++);
//    }
//}

void UartInit()
{
    SCON = 0x50;
    T2L = BRT;
    T2H = BRT >> 8;
    AUXR = 0x15;
    wptr = 0x00;
    rptr = 0x00;
    busy = 0;

	UR1TOTH = 0xff;
	UR1TOTL = 0xff;
	UR1TOTE = 0x00;
	UR1TOCR = 0xff;
}

void main()
{
	char i = 0;
	char j = 0;
	char tmp = 0;

    WTST = 0;  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度

    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;

    UartInit();
    ES = 1;
    EA = 1;

    while (1)
    {
		if (UR1TOSR & 0x01)
		{
			UR1TOSR |= 0x80;
			for(i=0;buffer[i]!='\0';i++)
			{
				j++;
			}
			for(i=0;i<j;i++)
			{
				tmp = tmp + (buffer[i]-0x30) * pow(10, j-i-1);
			}
			UartSend(tmp);
	
			j = 0;
			tmp = 0;
			wptr = 0x00;
			for(i=0;i<=16;i++)
			{
				buffer[i] = '\0';
			}
		}
    }
}


image.png

如果把UR1TOCR = 0xaf;

那么还是在主循环里查询,就没有响应了

image.png

通过阅读数据手册,我的理解是,应该有两种途径,一个是通过中断的方式实时响应,一个是通过主循环查询的方式

image.png

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:454
  • 最近打卡:2025-05-01 07:53:22

28

主题

162

回帖

1879

积分

金牌会员

积分
1879
发表于 2024-12-6 22:01:59 | 显示全部楼层

顶贴,希望大佬看到,虽然超时功能是放在中断里才使用,但也不能让自己存在疑惑

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-12-6 22:29:53 | 显示全部楼层
建议UR1TOCR = 0xA0;
无效位填0
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:454
  • 最近打卡:2025-05-01 07:53:22

28

主题

162

回帖

1879

积分

金牌会员

积分
1879
发表于 2024-12-6 22:48:11 | 显示全部楼层
Debu*** 发表于 2024-12-6 22:29
建议UR1TOCR = 0xA0;
无效位填0

谢谢。我一开始是A0的,就是没反应,然后F0,有反应,就试试AF,然后又试了FF
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:239
  • 最近打卡:2025-05-02 03:42:37

22

主题

283

回帖

905

积分

高级会员

积分
905
发表于 2024-12-7 14:59:40 | 显示全部楼层
183443*** 发表于 2024-12-6 22:48
谢谢。我一开始是A0的,就是没反应,然后F0,有反应,就试试AF,然后又试了FF ...

解决了吗?我也一样不使能中断,查询不到标志
REMOVEUNUSED
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:454
  • 最近打卡:2025-05-01 07:53:22

28

主题

162

回帖

1879

积分

金牌会员

积分
1879
发表于 2024-12-7 16:07:27 | 显示全部楼层
邮*** 发表于 2024-12-7 14:59
解决了吗?我也一样不使能中断,查询不到标志

没解决,不过这也不是关键性的,帖子就这沉着吧,比较要超时检测,不就是要实时性么,能进中断就行
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 06:36 , Processed in 0.124217 second(s), 85 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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