微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 这个串口问题困扰我许久了

这个串口问题困扰我许久了

时间:10-02 整理:3721RD 点击:

#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()去掉后 就可以在串口调试助手里输出"本次抢答失败"  

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top