微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 各位老师帮我看看这个程序的不足。多谢了。

各位老师帮我看看这个程序的不足。多谢了。

时间:10-02 整理:3721RD 点击:
各位老师帮我看看这个程序的不足。多谢了。
#include<reg52.h>
#define uchar unsigned char
uchar *p="I love you",flag;
void serial_init()
{
    SCON=0x50;
    PCON=0x00;
    TMOD|=0x20;
    TH1=0xFD;
    TL1=0xFD;
    TR1=1;
    EA=1;
    ES=1;
}
void serial_send(uchar a)
{
    if(flag==1)
    {    flag=0;
        ES=0;
        SBUF=a;
        while(!T1);
        T1=0;
        ES=1;
    }
}
void main()
{   
    serial_init();
    while(1);
}
void serial_tx() interrupt 4
{
    while(*p++!='\0')
    {
    RI=0;
    flag=1;
    serial_send(SBUF);
    }
}

应该注意的问题:
1.没有项目说明,函数说明,包括作者 功能 时间 输入输出参数,返回值等等;
2.没有注释,函数内和外都没有;
3.对齐方式,没有用TAB键吧!应该至少空两格!
4.函数命名,应该合理通俗易懂,大小写分明;
5.格式问题,大小括号引号规则;
总结:问题很多,一看就是直接拿过来用的,没有形成自己编程风格的习惯!这个一定要改!

牛呀。

都是最基本的,可以看看LINUX 或者WINDOWS的内核程序,或者看看自己买的开发板的程序,要想着这个东西 别人拿过来一眼就能看懂就可以了!程序是给人看的 ,不是自己吃的!

老师,你批评很对。我是一个初学者,这个程序呢,比较小所以我就没有做注释,像您这像的老师,一眼就能明了。我还是想麻烦老师能指出这个程序的逻辑问题。多谢老师了。

1、自定义数据类型名最好用 typedef 不要用#define预处理命令。具体差别可以百度下。
2、函数名最好开头单词大写。比如void Serial_Init(void)。定义函数的时候缩进分开层次,这个你已经做到了。函数定义的前面,注释上功能,调用形式,传递参数以及说明等等。
3.赋值语句,赋值“=”号两边加空格。比如:a = 0;之后调试的时候易发现错误。
4、定义并初始化一个字符串。最好弄个数组。Array[]={"i LOVE YOU"}.51单片机的话在在定义的时候加上修饰关键字"code"告诉编译器,这个数组数据是不易修改数据,保存在代码区。
5、指针和变量不要一起定义。分开定义。
个人意见,仅供参考。

flag 这个标志没有初始化  还有 这个标志用的有问题 你应该是判断整个字符串发送完了 这个标志多余了  还有 没有延时 会误码的


路过支持一下

谢谢您。老师!
你的指教,我受益匪浅。我是一位刚开始自学51单片机的学生,还望你多多指教!

老师,谢谢您!
你受累了。我想用中断法来写这个程序!

恩!别叫我老师 咱们都是好朋友!


你这个中断法发送字符串是有问题的。首先就是缺少进入中断的触发,按你的逻辑,得先有接收中断,才能触发发送字符串。此外,中断法发送字符串不是要你在一次串口中断中完成所有字符的发送,而应该是一次中断发送一次字符串,否则你这个中断发送字符串与查询法发送有什么异同。

首先,非常感谢你。
那你看看,在我的原程序上应当如何改正,麻烦你了!

可参考11#的     

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

网站地图

Top