2288|5

68

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于串口的问题 [复制链接]

#include
#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit   clock=P1^1;     // 时钟信号(数据输入)
sbit   date_out=P3^2;    // 数据输出
sbit   cs=P1^0;            // 片选信号
float volt;
uchar code table[10] = {0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09};
uchar code table_d[10] = {0x02, 0x9e, 0x24, 0x0c, 0x98, 0x48, 0x40, 0x1e, 0x00, 0x08};     //带点数码管显示
uchar t0_num, flag_time,flag_on,flag_uart,temp;
//*************延时函数*************
void delay(uint del)
{
uchar i, j;
for(i=0; i for(j=0; j<=148; j++);
}

//***********初始化函数***************
void init()
{
  TMOD=0X21;
  TH1=0XFD;
  TL1=0XFD;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  SM0=0;
  SM1=1;
  REN=1;
  //SCON=0X50;
  TR1=1;
  TR0=1;
  ET0=1;
  EA=1;
  ES=1;

}

//*************获得AD的值**********************
uchar tlc549_qudong()
{
uchar i,temp;
cs=1;
clock=0;
cs=0;                   // cs置底电平。 同时date_out为高。(=1).
_nop_();
_nop_();                //延时大约1.4us,开始转换。
for(i=0;i<8;i++)        //开始串行数据的输入;
{
    temp<<=1;
    temp|=date_out;
    clock=1;
   
    _nop_();
    clock=0;                //CLK transition time Max 0.1us
}
cs=1;
for(i=17;i>0;i--)   //延时17us后读出数据。
_nop_();
return temp ;
}

//***********数据扩大1000倍,为了方便读出*************//
/*void date_conversation(void)
{
     uchar AD_Data;
     AD_Data=tlc549_qudong();
     volt=(float)AD_Data*5.0/256.0;                                   //特别要注意volt要是float型。
} */

//*************分离百,十,个位*************************
void display(uchar temp)
{
   uchar bai,shi,ge;
   bai=temp/100;
   shi=temp/10%10;
   ge=temp%10;
  
   P2=0x04;
   P0=table_d[bai];
   delay(4);

   P2=0x02;
   //b=d/10%10;        
   P0=table[shi];
   delay(4);

   P2=0x01;
   //c=d%10;
   P0=table[ge];
   delay(4);
}

void main()
{
  init();
  P2=0X00;
  while(1)
  {
    if(flag_uart==1)
        {
            flag_uart=0;
            ES=0;
                TI=1;
                switch(flag_on)
                {
                   case 0:     puts("Turn on AD!\n");
                                           TR0=1;
                                           break;
                   case 1:     printf("Turn off AD!\n");
                                           TR0=0;       
                                           break;
                  case 2:      puts("error!\n");
                                       break;
                 }
               
                while(!TI);
                TI=0;
                ES=1;
          }       
       
        if(flag_time==1)
                {
                   flag_time=0;
                   temp=tlc549_qudong();
                   volt=(float)temp*5.0/256.0;
                  // date_conversation();
                   ES=0;
                   TI=1;
                   printf("the volage is %fV\n",volt) ;
                   while(!TI);
                   TI=0;
                   ES=1;
                 }
                 
                 display(temp);
               
        }
         
  
  
  
}
  
  
void timer() interrupt 1
{
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  t0_num++;
  if(t0_num==20)
  {
           t0_num=0;
         flag_time=1;
  
  
}
   
}
void ser() interrupt 4
{
  uchar a;
  RI=0;
  a=SBUF;
  flag_uart=1;
  if(a==1)           flag_on=0;
  else if(a==2)      flag_on=1;
  else                             flag_on=2;
  
   
}
不知道为什么么,接受缓冲区不停的接受数据,好像进入了死循环。
不过发什么什么数  就只出现 error! 然后继续现在电压。


真确的应该是:发送 01    接受区出现:Turn  on  ad,  the volage is ````.
              发送 02    接受区出现:Turn  on  off. 显示上次的电压值。
              发送其他的数字。。接受区出现: 只出现error!

最新回复

上位机是你电脑上串口接收和发送的客户端  详情 回复 发表于 2010-3-27 21:42
点赞 关注

回复
举报

62

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
和上位机的协议不清楚。
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用楼主 kangyonghui 的回复:
#include
#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit clock=P1^1; // 时钟信号(数据输入)
sbit date_out=P3^2; // 数据输出
sbit cs=P1^0; // 片选信号
f……
什么是上位机呢?
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

4
 
你设的是用timer1做为波特率产生器,但你好像没有设置波特率,再说了做为波特率用的计时器是不能开中断的.所以你这个串口设置是混乱的,接收不到正确的数据.如果被我言中,记得给分哦,谢谢!
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

5
 
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

6
 
上位机是你电脑上串口接收和发送的客户端
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表