求问,要求:300ms接收一针OX9B,如果接收正常就发送0X3B,想问问大家逻辑有什么问题
个人感觉是定时器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={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 = 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;
CON=1;
}
}
}
单片机是STC8A8K64D4 ⓪括号缩进都对不齐,代码看起来太头疼了,没几个人愿意分析这样的代码
①注意uchar的范围是0~255,所以timing根本到不了300
②计时器2是自动重载的,没必要在中断中给T2L和T2H值
③js在串口中断中一直被置0,和定时器2没有一丁点关系
④fs在串口中断中一直被置1,会在main一直死循环发数据
⑤其它的不想看了,可能还有好多问题
hsrzq 发表于 2023-6-21 12:25
⓪括号缩进都对不齐,代码看起来太头疼了,没几个人愿意分析这样的代码
①注意uchar的范围是0~255,所以tim ...
好的谢谢指教 刚开始学习 还都不太懂{:lol:}
页:
[1]