这个串口问题困扰我许久了
#include<reg52.h>
#include<stdio.h>
sbit beep=P3^7;//蜂鸣器
//报警程序
void buz_on(void)
{
beep = 0; //开蜂鸣器
delay_50ms(10);//延时0.5秒
beep = 1; //关蜂鸣器
}
void serial_init(void);
void main()
{
serial_init();
buz_on();//加了这句就不能输出了
printf("老哦嗷嗷嗷\n");
while(1)
{
}
}
void serial_init(void) //串口初始化函数
{
TMOD = 0x20; //T1工作方式1,用于设定波特率
TH1 = 0xF3; //波特率4800Bps,12MHz晶振
TL1 = 0xF3;
PCON |= 0x80; //SMOD = 1,波特率加倍
SCON = 0x50; //允许发送接收
ES = 0; //禁止串口中断
TI = 1;
TR1 = 1;
}
加上个buz_on();这句后就不能再串口调试助手上输出了 ,把这句换成其他的函数也是不能输出 总之在printf那句前不能调用任何 函数 程序可以跑到printf里 我在while里加个小灯 ,一段时间后会亮起来,这期间,在printf里做了许多事情 可是就是不输出想要的数据 高手来帮忙解答下吧
不要用print函数,里面有很多未知功能,还有串口调试工具不支持中文
我用自己写的串口输出一个样啊 你看下面这个
#include <reg51.h>
#include<delay.h>
#define RATE_12M //时钟12M,选择延时函数是用到
#define uchar unsigned char
#define uint unsigned int
#define count_time 50000//T0(mode 1)的计数值,大约0.05s
#define TH_M1 (65536-count_time)/256//T0(mode 1)计数高八位
#define TL_M1 (65536-count_time)%256//T0(mode 1)计数低八位
sbit beep=P3^7;//蜂鸣器
uchar hao,shi,ge; //hao选手号,shi、ge十、个位
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,};//共阴极数码管0~9的编码
uchar fail_str[] = "本次抢答失败!";
void init()//初始化函数
{
//串口、定时器0初始化
TMOD = 0x22; //T1、 T0都是工作方式1,T1用于设定波特率
TH1 = 0xF3; //波特率4800Bps,12MHz晶振(51太高的波特率用在串口上会出现乱码的现象)
TL1 = 0xF3;
PCON |= 0x80; //SMOD = 1,波特率加倍
SCON = 0x50; //允许发送接收(工作方式1,波特率由定时器1的溢出脉冲控制)
ES = 0; //禁止串口中断
EA = 1;//开启总中断
TR1 = 1; //启动定时器1
ET0 = 0;//定时器0中断禁止,等抢答按键启动后置1进入中断开始计时
TR0 = 1; //启动定时0,
//其他初始化
}
void write_digit(uchar duan,uint wei) //duan、wei分别为数码管的段选和位选
{
P2 = wei;
P0 = tab[duan];
delay_ms(2);
P2 = 0xff; //关闭数码管位选,消影
}
//报警程序
void buz_on(void)
{
beep = 0; //开蜂鸣器
delay_50ms(10);//延时0.5秒
beep = 1; //关蜂鸣器
}
//倒计时的两只数码管显示
void display_time(void)
{
write_digit(shi,0xfe); //十位显示
write_digit(ge,0xfd); //个位显示
}
//发送一个字节
void send_byte(uchar dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
//发送一个字符串
void send_str(uchar *s)
{
while(*s!='\0')
{
send_byte(*s);
s++;
}
}
void main(void)
{
init();//初始化
while(1)
{
buz_on();
send_str(fail_str);
while( 1 )
{
display_time(); //倒计时显示
}
}
}
在main程序里 那个buz_on()去掉后 就可以在串口调试助手里输出"本次抢答失败"