找回密码
 立即注册
查看: 80|回复: 3

求问,要求:300ms接收一针OX9B,如果接收正常就发送0X3B,想问问大家逻辑有什么问题

[复制链接]

该用户从未签到

4

主题

10

回帖

70

积分

注册会员

积分
70
发表于 2023-6-21 10:00:26 | 显示全部楼层 |阅读模式
个人感觉是定时器2配置问题 ,没有计时发送

#include "reg51.h"
#include "intrins.h"

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

sfr     T4T3M       =   0xd1;
sfr     T4H         =   0xd2;
sfr     T4L         =   0xd3;
sfr     T3H         =   0xd4;
sfr     T3L         =   0xd5;
sfr     S3CON       =   0xac;
sfr     S3BUF       =   0xad;
//sfr     IE2         =   0xaf;

sfr     P_SW2       =   0xba;
sfr     P0M0        =   0x94;
sfr     P0M1        =   0x93;
sfr     P1M0        =   0x92;
sfr     P1M1        =   0x91;
sfr     P3M0        =   0xb2;
sfr     P3M1        =   0xb1;

//定时器初始化
sfr     T2L         =   0xd7;
sfr     T2H         =   0xd6;
sfr     AUXR        =   0x8e;
sfr     IE2         =   0xaf;
#define ET2             0x04
sfr     AUXINTIF    =   0xef;
#define T2IF            0x01

#define uchar unsigned char
#define uint unsigned int

sbit CON=P2^7;
uchar buffer[2]={0X9B,0X3B};
uchar timing=0;
uchar fs=0,js=0;
void TM2_Isr() interrupt 12
{
        T2L = (65536-11059200/1000);      //1ms中断
    T2H = (65536-11059200/1000) >> 8;
        timing++;
        if(timing==300)
        {
                js=1;
                timing==0;
        }
}


void Uart3Isr() interrupt 17
{
    if (S3CON & 0x02)
    {
        S3CON &= ~0x02;
    }
       
    if (S3CON & 0x01)
    {
        S3CON &= ~0x01;
                CON=0;
       buffer[0] = S3BUF;
                js=0;
                fs=1;
                CON=1;

    }
}

void main()
{
        P0M0=0x00;
        P0M1=0x00;
        P1M0=0x00;
        P1M1=0x00;

       
        CON=1;
       
    P_SW2 = 0x00;
    S3CON = 0x50;
    T3L = BRT;
    T3H = BRT >> 8;
    T4T3M = 0x0a;
    IE2 = 0x08;
    EA = 1;

                //定时器2
    T2L = 0xff;
    T2H = 0xff;
    AUXR = 0x18;                                //设置外部计数模式并启动定时器
    IE2 = ET2;
       
    while (1)
    {
                if(fs==1)
                {
                        CON=0;
                        S3BUF=buffer[1];
                        CON=1;
                }
    }
}


回复 送花

使用道具 举报

该用户从未签到

4

主题

10

回帖

70

积分

注册会员

积分
70
 楼主| 发表于 2023-6-21 10:34:20 | 显示全部楼层
单片机是STC8A8K64D4
回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    奋斗
    11 小时前
  • 签到天数: 130 天

    [LV.7]常住居民III

    8

    主题

    79

    回帖

    1076

    积分

    金牌会员

    机长

    积分
    1076
    发表于 2023-6-21 12:25:38 | 显示全部楼层
    ⓪括号缩进都对不齐,代码看起来太头疼了,没几个人愿意分析这样的代码
    ①注意uchar的范围是0~255,所以timing根本到不了300
    ②计时器2是自动重载的,没必要在中断中给T2L和T2H值
    ③js在串口中断中一直被置0,和定时器2没有一丁点关系
    ④fs在串口中断中一直被置1,会在main一直死循环发数据
    ⑤其它的不想看了,可能还有好多问题
    业余撸代码,专业开飞机
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    4

    主题

    10

    回帖

    70

    积分

    注册会员

    积分
    70
     楼主| 发表于 2023-6-21 12:37:43 | 显示全部楼层
    hsrzq 发表于 2023-6-21 12:25
    ⓪括号缩进都对不齐,代码看起来太头疼了,没几个人愿意分析这样的代码
    ①注意uchar的范围是0~255,所以tim ...

    好的谢谢指教 刚开始学习 还都不太懂
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-14 11:56 , Processed in 0.059665 second(s), 40 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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