找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5449|回复: 0
收起左侧

一个串口调试的问题,板凳~~

[复制链接]
ID:14235 发表于 2009-6-14 12:15 | 显示全部楼层 |阅读模式

版主和各位大虾来帮我解决下:

我想实现的功能是:再PC机端输入任意一个数n(0-99之间),然后通过串口往下传,当单片机接收到这个N以后,做运算m=n*2,并把m再通过串口上传至PC机端。(本来想的很简单直接*2,不过PC端到单片机端的数据存在着“字符”ASCII码和数值之间的转换,使得问题变的有点麻烦...)望版主和各位大侠赐教!(程序是基于KEILC写的、硬件是基于C51单片机的、串口调试的PC端是用串口调试助手的,所以数值每次只能一个一个上下串...)

程序附上,问题应该不少,望斑竹或大虾帮帮忙,谢谢!

 

 

#include <REG52.H>                          
#include <stdio.h>
#include <string.h>

unsigned char flag=0;
  
                
/*主程序*/
void main (void)
{


    SCON  = 0x50;          /* SCON: 模式 1, 8-bit UART, 使能接收         */
    TMOD |= 0x20;               /* TMOD: timer 1, mode 2, 8-bit reload        */
    TH1   = 0xFD;               /* TH1:  reload value for 9600 baud @ 11.0592MHz   */
    TR1   = 1;                  /* TR1:  timer 1 run                          */
    EA    = 1;                  /*打开总中断*/
    ES    = 1;                  /*打开串口中断*/

while (1)                       /*主循环不做任何动作*/
    {
    }
}


void timer0_int(void) interrupt 1  //定时器定时5ms
{
     TH0=0xee;
     TL0=0x00;
     while(TF0!=1);
      {flag=1;                   //设置标志位,当标志位为1时表示数据已经接收完毕,否者标志位为初始值0
       TF0=0;}
}

 

void UART_SER (void) interrupt 4 //串行中断服务程序
{
    unsigned char a,b;          //定义临时变量
   //unsigned char Temp;
   int i;
   unsigned char SendTemp[3]="";
   unsigned char SendNumb;


 if(RI)                        //判断是接收中断产生
  {
    RI=0;                      //标志位清零

    timer0_int();            //这里出错了,错误提示不能调用一个中断功能

    if(flag==1)              //当标志位==1时,表示数据接收完毕
    { SendTemp[0]=SBUF;      //此时把SBUF内的值放入SendTemp[0]
      SendNumb=1;}
     else                    //当标志位==0时,表示数据没有接收完
     {SendTemp[SendNumb]=SBUF;//此时把SBUF内的值放入SendTemp[1]
      SendNumb++;}


      a=(SendTemp[0]-48)+(SendTemp[1]-48)*10;  //把2个数进行ASCII码到数值的转换,并组成由PC输入的实际的数值,赋予a
    b=a*2;                                   //令b=2倍a
      SendTemp[0]=a%10+48;                     //拆解数值b,并转喊道ASCII码形式,准备上传至PC端
      SendTemp[1]=a/10+48;
   for(i=0;i<3;i++)
    {
     SBUF=SendTemp;
 
        if(TI)                        //如果是发送标志位,清零
        TI=0;
    }
   }

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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