找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4546|回复: 5
收起左侧

关于单片机scanf()函数,printf()及串口的问题

[复制链接]
ID:84705 发表于 2016-4-10 23:19 | 显示全部楼层 |阅读模式
#include<stdio.h>
#include "stc15.h"

void Uart1_Init(void)
{
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x40;                //定时器1时钟为Fosc,即1T
        AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0F;                //设定定时器1为16位自动重装方式
        TL1 = 0xE0;                //设定定时初值
        TH1 = 0xFE;                //设定定时初值
        TI = 1;
        ET1 = 0;               
        TR1 = 1;                //启动定时器1
        ES = 0;                   //打开串口中断
        EA = 0;               
}
void main(void)
{
        u16 x = 0;
        u16 y = 0;
        Uart1_Init();
        P55 = 0;
        printf("Input x,y:\n");
        scanf("%d%d",&x,&y);
        printf("\n");
        printf("%d+%d=%d\n",x,y,x+y);
        printf("\n");
        printf("%xh+%xh=%xh\n",x,y,x+y);
        while(1);
}

通过串口怎么输入,我输入以后结果为零
好像没什么效果

回复

使用道具 举报

ID:110895 发表于 2016-4-11 05:58 | 显示全部楼层
ES = 1; EA = 1; 似乎没见到串口中断程序。
回复

使用道具 举报

ID:43149 发表于 2016-4-11 08:26 | 显示全部楼层
怎么会收到一直是0呢?!
应该是没有数据吧?或者是乱码。
那么应该是波特率不匹配的原因!
回复

使用道具 举报

ID:84705 发表于 2016-4-11 13:47 | 显示全部楼层
liuyimao485812 发表于 2016-4-11 05:58
ES = 1; EA = 1; 似乎没见到串口中断程序。

这是书上的例子,改写的,好像不需要用到中断
回复

使用道具 举报

ID:84705 发表于 2016-4-11 13:49 | 显示全部楼层
tswdey 发表于 2016-4-11 08:26
怎么会收到一直是0呢?!
应该是没有数据吧?或者是乱码。
那么应该是波特率不匹配的原因!

波特率没错,也不是乱码,采用文本形式接收
回复

使用道具 举报

ID:97438 发表于 2016-4-11 21:59 | 显示全部楼层
liuyimao485812 发表于 2016-4-11 05:58
ES = 1; EA = 1; 似乎没见到串口中断程序。

库里面实现的中断程序
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表