英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

 找回密码
 立即注册
搜索
电子烟方案单片机单片机开发深圳单片机开发
单片机方案国产单片机8位单片机电子烟方案开发
查看: 5768|回复: 0
打印 上一主题 下一主题

[求助]USART接收数据问题。。。??

[复制链接]
跳转到指定楼层
1#
发表于 2012-8-20 16:33:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用“串口调试助手”调试的时候,单片机发送数据,“串口调试助手”能接受数据;
但是“串口调试助手”发送数据时,单片机接收不到数据。。。???

include <pic.h>
//预定义
#define uch unsigned char
//显示用码表
const uch shu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,0xff};
//变量
int data,temp1,temp2,temp3,temp;
uch flag,keylock;
uch point,buffer[3];      
//初始化
void init()
{
       TRISB=0;
       PORTB=0;
       TRISC=0;
       PORTC=0;
       keylock=1;//初始化键盘按键标志位,用于锁定按键
      
       //USART部件初始化
       SPBRG=0x19;//设置波特率为9600bps
       TXSTA=0x04;//选择异步高速8位数据传输模式;
       RCSTA=0x90;//允许串行端口工作

       TRISC=0x80;//设置为高阻态,防止干扰
       TXEN=1;//发送允许
       CREN=1;//接收允许
       PEIE=1; //开放外设中断
       RCIE=1; //开放串行口中断
  
       ei();    //开放总中断
    GIE=1;


}
//显示需要的延时
void delay()
{
       int i;
       for(i=0;i<1000;i++);     
}

//发送子程序
void send_usart()
{
       uch i;
       for(i=0;i<3;i++)//每次发3个数据
       {
              if(i==0)TXREG=(data/100)+0x30;//求得百位
              if(i==1)TXREG=data%100/10+0x30; //求得十位
              if(i==2)TXREG=data%10+0x30; //求得个位

              while(1)
              {
                     if(TXIF==1)break;//等待发送完成
              }
       }
}

//中断接收子程序
void interrupt receive(void)
{
       if(point<3)//是否已经接收到3个数据
       buffer[point++]=RCREG-48;//没有,继续接收
       else point=0;//是,指针复位
       data=buffer[0]*100+buffer[1]*10+buffer[2];//组合成三位数
  
}

//数码管显示
void display(int dis_data)
{
       int dis_data_ge,dis_data_shi,dis_data_bai;
       dis_data_ge =dis_data%10;//个位
       dis_data_shi=dis_data%100/10;//十位
       dis_data_bai=dis_data/100;    //百位
       if(dis_data==0)//若数据为0,只显示1位
       {
              dis_data_ge=0;
              dis_data_shi=10;
              dis_data_bai=10;
       }
       if(dis_data<10)//若数据小于10,则十位与百位关闭显示
       {
              dis_data_shi=10;
              dis_data_bai=10;
       }
       if(dis_data<100)//若数据小于100,则只显示两位
       {
              dis_data_bai=10;
       }

       RC0=0;
       RC1=0;
       RC2=1;
       PORTB=shu[dis_data_ge];//个位送显
       delay();

       RC0=0;
       RC2=0;
       RC1=1;
       PORTB=shu[dis_data_shi];//十位送显
       delay();

       RC1=0;
       RC2=0;
       RC0=1;
       PORTB=shu[dis_data_bai];//百位送显
       delay();  
}

//键盘(线反转法)
void presskey()
{
       uch line,column,key;
       TRISD=0x07;
       PORTD=0xf0;
       column=PORTD & 0x07;//取列码

       TRISD=0xf0;
       PORTD=0x0f;
       line=PORTD&0xf0;//取行码
       key=line|column;//合成键值

       if(key==0)keylock=0;//保证每次只按一次键
       if(keylock==0)
       {
              if(key!=0)keylock=1;
              switch(key)//查找键值
              {
                     case 0x11:temp=3;flag++;break;
                     case 0x12:temp=2;flag++;break;
                     case 0x14:temp=1;flag++;break;
                     case 0x21:temp=4;flag++;break;
                     case 0x22:temp=5;flag++;break;
                     case 0x24:temp=6;flag++;break;
                     case 0x41:temp=9;flag++;break;
                     case 0x42:temp=8;flag++;break;
                     case 0x44:temp=7;flag++;break;
                     case 0x82:temp=0;flag++;break;
                     case 0x81:flag=4;send_usart();break;//发送
                     case 0x84:flag=0;data=0;break;//清零键
              }
       }
       if(flag==1)//第一次按键
       {
              if(temp==0)flag=0;//若按0,则忽略
              temp1=temp;
              data=temp1;
       }
       if(flag==2)//第二次按键
       {
              temp2=temp;
              data=temp1*10+temp2;//原来的个位变成十位
       }
       if(flag==3)//第三次按键
       {
              temp3=temp;
              data=temp1*100+temp2*10+temp3;//原来的十位变成百位
              flag=4;//屏蔽按键
       }   
}

//主程序
main()
{
       init();
       while(1)
       {
   
              presskey();
              display(data);
       }
}


单片机是PIC16F877
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|公司首页|Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 ( 粤ICP备09008620号 )

GMT+8, 2024-4-20 07:39 , Processed in 0.053290 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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