找回密码
 立即注册
查看: 297|回复: 4

8051U 32BIT 串口 1 接收超时的问题

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:238
  • 最近打卡:2025-05-01 13:11:43

22

主题

283

回帖

901

积分

高级会员

积分
901
发表于 2024-11-13 19:45:31 | 显示全部楼层 |阅读模式
使能串口 1 接收超时中断没问题


禁止串口 1 接收超时中断,查询不到串口 1 超时中断请求标志



#include "../../comm/AI8051U.h"
#include "stdio.h"
#include "intrins.h"

typedef         unsigned char        u8;
typedef         unsigned int        u16;
typedef         unsigned long        u32;

#define MAIN_Fosc        24000000UL

void Uart1_Init(void);        //9600bps@24.000MHz
        
void main(void)
{
        u32 Count = 1000;
        
    WTST = 0;  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度

    P0M1 = 0x00;   P0M0 = 0xff;   //设置为推挽输出
    P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
    P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
    P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
    P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
    P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
    P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
        
        Uart1_Init();
        REN = 1;
        
        UR1TOTL = Count;
        UR1TOTH = Count >> 8;
        UR1TOTE = Count >> 16;
        
        UR1TOCR = 0X80;
//        UR1TOCR = 0XC0;
//        EA = 1;
        
    while(1)
    {
                if(UR1TOSR & 0X01)
                {
                        UR1TOSR |= 0X80; //清除串口1超时中断请求
                        P52 = !P52;
                }
    }
}

void Uart1_Init(void)        //9600bps@24.000MHz
{
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x40;                //定时器时钟1T模式
        AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0F;                //设置定时器模式
        TL1 = 0x8F;                        //设置定时初始值
        TH1 = 0xFD;                        //设置定时初始值
        ET1 = 0;                        //禁止定时器中断
        TR1 = 1;                        //定时器1开始计时
}

void Uart1_Isr(void) interrupt 4
{
//        if (TI)                                //检测串口1发送中断
//        {
//                TI = 0;                        //清除串口1发送中断请求位
//        }
//        if (RI)                                //检测串口1接收中断
//        {
//                RI = 0;                        //清除串口1接收中断请求位
//        }
//        if(UR1TOSR & 0X01)
//        {
//                UR1TOSR |= 0X80; //清除串口1超时中断请求
//                P52 = !P52;
//        }
}

REMOVEUNUSED
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:238
  • 最近打卡:2025-05-01 13:11:43

22

主题

283

回帖

901

积分

高级会员

积分
901
发表于 2024-11-13 20:05:33 | 显示全部楼层
QQ浏览器截图20241113200143.png
REMOVEUNUSED
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2024-11-13 21:58:42 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

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

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-11-13 23:38:58 | 显示全部楼层
写1清零,读永远是0
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:238
  • 最近打卡:2025-05-01 13:11:43

22

主题

283

回帖

901

积分

高级会员

积分
901
发表于 2024-11-13 23:55:24 | 显示全部楼层
本帖最后由 邮箱 于 2024-11-13 23:57 编辑
Debu*** 发表于 2024-11-13 23:38
写1清零,读永远是0

可以读的
TOIF:串口 1 超时中断请求标志位。(只读)
CTOIF:写“1”清除串口 1 超时中断标志位 TOIF。(只写)

不使能接收超时中断,查询不到超时中断标志位 TOIF 置“1”
REMOVEUNUSED
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 02:44 , Processed in 0.251407 second(s), 78 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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