卡壳了,这个51程序怎么没动作啊,求解
ssungirl2015/01/08软件综合 IP:广东
刚学51,串口通讯,卡壳了,P31,P30用示波器量了,没波形,看来程序没动作。

#include <reg51.h>
#include <string.h>


#define INBUF_LEN 4   //数据长度


unsigned char inbuf1[INBUF_LEN]="1234";


void init_serialcomm(void)
{
    SCON=0x50;       //SCON: serail mode 1, 8-bit UART, enable ucvr
    TMOD=0x20;       //TMOD: timer 1, mode 2, 8-bit reload
    PCON=0x80;       //SMOD=1;
    TH1=0xF4;       //Baud:4800  fosc=11.0592MHz
    TR1=1;          // timer 1 run
}


//向串口发送一个字符
void send_char_com(unsigned char ch)  
{
    SBUF=ch;
    while(TI==0);
    TI=0;
}


//向串口发送一个字符串,strlen为该字符串长度
void send_string_com(unsigned char *str,unsigned int strlen)
{
    unsigned int k=0;
    do
    {
        send_char_com(*(str + k));
        k++;
    } while(k < strlen);
}


void Delay1ms(int x)   //误差 0us
{
    unsigned char a,b,c;
    for(c=0;c<x;c++)
        for(b=38;b>0;b--)
            for(a=13;a>0;a--);
}


main()
{
    init_serialcomm();  //初始化串口
    while(1)
    {
               send_string_com(inbuf1,INBUF_LEN);
    Delay1ms(300);
    }


}
来自:计算机科学 / 软件综合
19
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
ssungirl 作者
10年0个月前 IP:广东
739460
引用 捂脸。:
#include<reg52.h>
unsigned char flag,a;
void main()
{

        TMOD=0x20;//设置定时器1为工作方式2
        TH1=0xfd;
       ...
哦,知道了,要开中断使能,波特率才会出来。由于我只要发送,所以把发送程序和中断使能删了。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ssungirl作者
10年0个月前 IP:广东
739463
引用 捂脸。:
#include<reg52.h>
unsigned char flag,a;
void main()
{

        TMOD=0x20;//设置定时器1为工作方式2
        TH1=0xfd;
       ...
        EA=1;
       ES=1; 加了这两句还不行,不知道为什么,P2脚集体产生了动作。你给的例程是接受的,我需要发送的。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ssungirl作者
10年0个月前 IP:广东
739630
引用 捂脸。:
今天用硬件测试了一下,好像是你主函数循环那的延时过高,改到250以下可以(值越大字符串打印的速度越慢)。具体原因不太清楚。至于前面说的ES=1和EA=1这两句最好不要加,加了输出出错。抱歉了,貌似前面误导你了,,(忙着期末考试,原谅不能给出...
我试过,把Delay1ms(300);删了,但是用串口助手接收到的是乱码,应该是循环太快了导致串口助手把杂波当数据了。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ssungirl作者
10年0个月前 IP:广东
739631
引用 pldtv:
MOV     TMOD,#00100000B
        MOV     TH1,#230
        MOV     TL1,#230
        SETB    TR1
; ========================...
谢谢,不懂汇编啊
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ssungirl作者
9年11个月前 IP:广东
741637
引用 changle:
我的贴子不是有个串口通信?
搞定了,不知道怎么回事,要用4800波特率才能传,9600不行
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ssungirl作者
9年11个月前 IP:广东
741657
引用 changle:
测一测晶振频率是不是11点几,电脑单片机同样传输设置,
11.0592
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ssungirl作者
9年11个月前 IP:广东
741725
引用 changle:
SCON  = 0x50;         // SCON: 模式 1, 8-bit UART, 使能接收  
TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
...
你这个TMOD |= 0x20;是不等于么,貌似不用打开EA和ES吧,我传送成功的4800波特率就没打开这2个啊
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X00; //波特率倍数1
TH1=0XFA; //计数器初始值设置,注意波特率是4800的
TL1=0XFA;
TR1=1; //打开计数器
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
ssungirl
机友 笔友
文章
21
回复
694
学术分
0
2014/07/23注册,1年9个月前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}