|
本帖最后由 我会想你的 于 2020-11-12 08:55 编辑
问题找到了,是我开了全局中断,注释了就可以,谢谢各位大佬帮忙
c语言小白,串口打印字符串“1234”,打印“12345” 乱码,不知什么原因?哪位大佬可以帮我看下?
我使用的单片机是STC115F2K32S2
烧写时我晶振使用的是22.1184MHz
代码如下:
#include<STC15F.h>
#include<string.h>
#define MAIN_Fosc 22118400L //主时钟,晶振频率不同的直接在这里修改频率
#define serial_one_baud_rate 115200L //波特率,只需在这里修改波特率就可以了
#define Timer1_Reload (65536UL -(MAIN_Fosc / 4 / serial_one_baud_rate)) //用定时器1做波特率发生器,计算定时器1的重装值
unsigned char Table[]="12345";
unsigned char Buff[32]; //数据缓冲区
sbit KEY=P3^2;
//发送数据函数
void SEND_data(unsigned char *Buff)
{
unsigned char j;
unsigned char lenth=0;
lenth=strlen(Buff);//计算数据长度
for(j=0;j<lenth;j++) //发送数据
{
SBUF=Buff[j];
while(TI==0);
TI=0;
}
}
//延时1ms函数
void delay_1ms(unsigned int t)
{
unsigned int x,y;
for(x=t;x>0;x--)
for(y=110;y>0;y--);
}
//缓冲区初始化
void Buff_init()
{
unsigned char n; //将Table里的数据放到缓冲区里
for(n=0;n<16;n++)
{
Buff[n]= Table[n];
delay_1ms(100);
}
}
//串口初始化函数
void serial_init()
{
SCON |= 0x40; //8位数据
TR1 = 0; //关闭定时器
TMOD &= 0x0F; //设定定时器1为16位自动重装方式
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TH1 = (u8)(Timer1_Reload >> 8);
TL1 = (u8)Timer1_Reload;
TR1 = 1; //打开定时器
PS = 1; //高优先级中断
REN = 1; //允许接收
ES = 1; //允许中断
EA = 1; //允许全局中断
}
void main()
{
unsigned char i;
Buff_init();
serial_init();
while(1)
{
if(KEY==0)
{
while(!KEY);
SEND_data(Buff);
delay_1ms(1000);
}
}
} |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|