打印

请教一下串口

[复制链接]
1331|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huangqi412|  楼主 | 2007-3-17 22:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include"reg51.h"//输入输出
#include"stdio.h"  
#define uchar unsigned char

uchar i ;//全部全局变量
uchar code str1[10]="nihao" ;//code型必须在定义时给值
uchar str2[8];               //暂时不给值

main()
{
    void chchsh();//声明    
    void bote();
    void jshd();
    void fsd();
    
    bote();             //波特率,不用中断
    printf("%s",str1);  //为什么输入输出总是字符间有间隔 ?应该//为hello,但是确实h,e,l,l 字符间间隔0x00。
    jshd();               //单个输入     
    printf(" ");        //好象没起作用      
    fsd();              //单个输出

     TI=1;       //用完以后要ti为1才可以进行printf 为什么?
     printf(" ");
            
    scanf("%s",str2);      //一次输入   
    printf(" %s ",str1); //自动输出    
    printf("%s ",str2);
     chchsh();             //开放中断
     i=0;
    SBUF=str1;//中断方式发送一次
     for(;;)
     {;}
}
//****************************
void bote()//波特率
{
SCON=0x50;      
TMOD|=0x20;
PCON|=0x80;
TH1=0xfd;
TR1=1;
TI=1;            //为什么初始化时候ti要为1??
}


void chchsh()//开放串口中断
{IE=0x90;    
}

void jshd()//单个接受
{   
    for(i=0;i<8;i++)//送给str2
    {        
        while(1)//等待接受标志
        {              
            if(RI)
    break ;     //接受到则break跳出while 
        }        
        RI=0 ;//清零        
        str2=SBUF ;//送出        
        i++;//下一个        
    }
}


void fsd()          //单个发送
{
    
    for(i=0;i<8;i++) //个数
    {
        SBUF=str2;//发送
        i++;         //下一个       
        while(1)
        {            
            if(!TI)      //等待
            {;}
    else break;     //直到为1则跳出while死循环
        }
        TI=0 ;//清零       
    }
}

void chkou() interrupt 4  //串口中断
{
TI=0;          //清标志
i++;           //下一个
if(i==8)        //如果达到8个,关中断整个程序完
ES=0;
}

相关帖子

沙发
工控秀才| | 2007-3-19 18:03 | 只看该作者

换S

为C,应该就没有问题了!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

622

主题

24960

帖子

18

粉丝