问题1:不用TI=1,也可以正常进行串口打印。
#include <STC12C5A60S2.H>
#include <math.h>
#include <stdio.h>
#include <intrins.h>
#include <stdlib.h>
#define uchar unsigned char
#define u8 unsigned char
#define u16 unsigned int
#define uint unsigned int
/***********************************************************
端口设置
***********************************************************/
sbit CLK = P0^0; //时钟信号
sbit DIO = P0^1; //数据/地址数据
sbit k1 = P3^2; //菜单键
sbit k2 = P3^3; //阈值加
sbit k3 = P3^4; //阈值减
sbit dht1 = P2^5; //定义数据线1
sbit dht2 = P2^6; //定义数据线2
sbit dht3 = P2^7; //定义数据线3
/***********************************************************
可调参数
***********************************************************/
unsigned char mode =0 ;//菜单模式初始值
signed int Tlow1 =-5 ;//低温阈值初始值
signed int TSS3 =50 ;//高温阈值初始值
int RHSS1 =55 ;//
int TIME =5 ;//
int heat1 ;
int heat2 ;
int heat3 ;
int temp1;
int temp2;
int humidity1;
int humidity2;
int humidity3;
int ms_num= 0;
int s = 0;
int min = 0;
unsigned char key1=0;
unsigned char key2=0;
unsigned char key3=0;
unsigned char flag1;
unsigned char flag2;
unsigned char tempflag=1;
/***********************************************************
4G模块初始化
***********************************************************/
unsigned char code at_mode[] ="AT+RESTORE\r\n"; //进入AT指令系统
unsigned char code state_sim[] ="AT+CPIN\r\n"; //测试sim卡是否插入正常
unsigned char code sim_intensity[]="AT+CSQ\r\n"; //测试信号强度
unsigned char code ip_adress[] ="AT+SOCK=TCPC,103.46.128.49,48118\r\n";//设置服务器ip地址,端口号
unsigned char code rst[] ="AT+REBT\r\n"; //发送数据
/***********************************************************
温湿度传感器数值初始化
***********************************************************/
unsigned char SEGData[]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, //0123456789
0x77,0x7c,0x39,0x5e,0x79,0x71,0x3d,0x76,0x0f,0x0e, //ABCDEFGHIJ
0x75,0x38,0x37,0x54,0x5c,0x73,0x67,0x31,0x49,0x78, //KLMNOPQRST
0x3e,0x1c,0x7e,0x64,0x6e,0x59,0x40 //UVWXYZ("-"是36)
};//0-9,a是10,k是20,u是30,‘—’是36
/***********************************************************
定时中断以及延迟相关函数
***********************************************************/
void Delayms (unsigned int xms);
void Timer0_Routine(void);
void UART_Routine(void);
/***********************************************************
数据发送服务相关数值初始化
***********************************************************/
void sendByte(unsigned char dat);
void SendStr (unsigned char *dat);
/***********************************************************
主函数
***********************************************************/
void main( void )
{
UART_Routine();
Timer0_Routine();
while(1)
{
printf("AT\r\n");
}
}
/********************************************************************
波特率初始化
**************************************************************/
void UART_Routine(void) //9600bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xFB; //定时器时钟12T模式
BRT = 0xFD; //设置定时重载值
AUXR |= 0x01; //串口1使用独立波特率发射器为波特率发生器
AUXR |= 0x10; //启动独立波特率发射器
// TI=1;
}
void Timer0_Routine(void) //50毫秒@11.0592MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x00; //设置定时初始值
TH0 = 0x4C; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1;
EA = 1; //允许全局中断
}
/********************************************************************
* 名称 : Delay_1ms(unsigned int i)
* 功能 : 延时子程序,延时时间为 140us
* 输入 :
* 输出 : 无
**************************************************************/
void Delayms(unsigned int xms) //@11.0592MHz,12c5a60
{
unsigned char i, j;
while(xms--)
{
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
}
/***********************************************************
xus软件延迟,延迟时间为:10乘以xus 单位us
***********************************************************/
void Delayus(unsigned char xus) //@11.0592MHz 12c5a60
{
while(xus--)
{
_nop_();
}
}
/**************************************************************
发送字符串相关函数
**************************************************************/
void SendByte(unsigned char dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
void SendStr( unsigned char *dat)
{
while(*dat != '\0')
{
sendByte(*dat++);
}
}
/**************************************************************
发送单个数据或者整个数组相关函数
**************************************************************/
char putchar( char c)
{
sendByte(c);
return c ;
}
unsigned char putuchar (unsigned char x)
{
sendByte(x);
return x ;
}
keil相关优化等级设置
串口显示结果
可以看出,即使TI=1被注释掉了,但是依旧可以串口打印!这是为什么呢?
于是我就开始删除一些无关紧要的代码,开始一步一步“试探”。当我将 void SendByte(unsigned char dat) 这个函数删除之后,发现就不能正常串口打印了。
之后,我将最后四个函数全部删除,与此同时,将TI=1,就可以正常串口打印了
就很奇怪,不知道那里的问题?如果有大佬1知道的话,指导一下我吧!!