您现在所在的是:

单片机论坛

回帖:15个,阅读:1511 [上一页] [1] [2] [下一页]
1717
云伴风回转
文章数:334
年度积分:50
历史总积分:1717
注册时间:2009/3/10
发站内信
发表于:2011/4/14 14:52:46
#0楼
我有一块开发板,我想用上面的4个按键,每按一个,串口调试软件里都应该接收到一个数字,可是弄完啥反映也没有,下面有提示,但不太明白,哪位大侠帮忙看看~!

#include<reg52.h>

typedef unsigned char uint8;
typedef unsigned int uint16;

sbit KeyIn1=P2^4;
sbit KeyIn2=P2^5;
sbit KeyIn3=P2^6;
sbit KeyIn4=P2^7;
sbit KeyOut1=P2^3;
sbit KeyOut2=P2^2;
sbit KeyOut3=P2^1;
sbit KeyOut4=P2^0;

uint8 num=0;

void UART_init(void)      //通讯初始化//
{
  SCON=0x50;
  TMOD=0x20;
  TH1=0xFD;
  TL1=0XFD;
  TR1=1;
 
}

void UART_send_byte(uint8 dat)     //发送 子程序//
{
  SBUF=dat;
  while(!TI);
  TI=0;
}

main()    //主程序//
{
 KeyOut1=0;

 UART_init();

 while(1);
 {
  if (KeyIn1==0|KeyIn2==0|KeyIn3==0|KeyIn4==0)
 
  {

     UART_send_byte(num++);

}
 }
}


下面提示为:#include<reg52.h>

WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?—uart_send_byte?INT0

这个发送子程序有什么错误呢??
切记~~!勿浮躁~~!
3641
yueliang150
文章数:389
年度积分:50
历史总积分:3641
注册时间:2003/4/24
发站内信
发表于:2011/4/14 21:20:07
#1楼
多了符号
附件
单片机、ARM产品开发设计;
小设备、夹具、治具控制器设计开发;数码管、点阵LED电子看板开发;
1717
云伴风回转
文章数:334
年度积分:50
历史总积分:1717
注册时间:2009/3/10
发站内信
发表于:2011/4/15 8:19:10
#2楼
哈哈哈,你说的非常对,谢谢楼上的兄弟啊~!一个小小的分号,整个程序都断了~!
切记~~!勿浮躁~~!
3641
yueliang150
文章数:389
年度积分:50
历史总积分:3641
注册时间:2003/4/24
发站内信
发表于:2011/4/15 8:52:41
#3楼
#include<reg52.h>
typedef unsigned char uint8;
typedef unsigned int uint16;

sbit KeyIn1=P2^4;
sbit KeyIn2=P2^5;
sbit KeyIn3=P2^6;
sbit KeyIn4=P2^7;

sbit KeyOut1=P2^3;
sbit KeyOut2=P2^2;
sbit KeyOut3=P2^1;
sbit KeyOut4=P2^0;

uint8 num=0;
//***********************************************************************
void UART_init(void)      //通讯初始化//
{
TMOD=0x20;
SCON=0x50;  
TH1=256-22118400L/9600/(12*32);//????
TL1=TH1;
TR1=1;
ES=1;  
}
//发送子程序*************************************************************
void UART_send_byte(uint8 dat)  
{
  SBUF=dat;
  while(!TI);
  TI=0;
}
//主程序******************************************************************
void main(void)  
{


bit M0,M1,M2,M3;

KeyOut1=0;
M0=0;M1=0;M2=0;M3=0;
  UART_init();
  while(1)
{
  //按键1,发送1;
if (KeyIn1==0 && M0==0){UART_send_byte(0x01);M0=1;}
if (KeyIn1==1 && M0==1){M0=0;}

//按键2,发送2;
if (KeyIn2==0 && M1==0){UART_send_byte(0x02);M1=1;}
if (KeyIn2==1 && M1==1){M1=0;}

//按键3,发送3;
if (KeyIn3==0 && M2==0){UART_send_byte(0x03);M2=1;}
if (KeyIn3==1 && M2==1){M2=0;}

//按键4,发送4;
if (KeyIn4==0 && M3==0){UART_send_byte(0x04);M3=1;}
if (KeyIn4==1 && M3==1){M3=0;}

//显示
KeyOut1= ~M0;
KeyOut2= ~M1;
KeyOut3= ~M2;
KeyOut4= ~M3;
  }
}
单片机、ARM产品开发设计;
小设备、夹具、治具控制器设计开发;数码管、点阵LED电子看板开发;
1717
云伴风回转
文章数:334
年度积分:50
历史总积分:1717
注册时间:2009/3/10
发站内信
发表于:2011/4/15 16:35:11
#4楼
#include<reg52.h>
typedef unsigned char uint8;
typedef unsigned int uint16;

sbit ENLED=P1^4;
sbit ADDR0=P1^0;
sbit ADDR1=P1^1;
sbit ADDR2=P1^2;
sbit ADDR3=P1^3;



void UART_init(void)
{
  SCON=0x50;
  TMOD=0x20;
  TH1=0xFD;
  TL1=0xFD;

  TR1=1;
  ES=1;
  EA=1;
}

main()
{
 
 ENLED=0;
 ADDR0=0;ADDR1=0;ADDR2=0;ADDR3=1;

 UART_init();
 while(1);

}

void interrupt_uart() interrupt 4
{
  if(TI)
  {
    TI=0;
REN=1;
  }

  if(RI)
  {
    RI=0;
P0=SBUF;
REN=0;

  }



}


再帮我看看这个呢,串口调试助手上手动放送,显示在数码管上的程序~!
一启动,数码管就显示了乱码~!3Q,大师~!
切记~~!勿浮躁~~!
3641
yueliang150
文章数:389
年度积分:50
历史总积分:3641
注册时间:2003/4/24
发站内信
发表于:2011/4/15 18:30:48
#5楼
#include<reg52.h>
typedef unsigned char uint8;
typedef unsigned int uint16;

 

sbit ENLED=P1^4;
sbit ADDR0=P1^0;
sbit ADDR1=P1^1;
sbit ADDR2=P1^2;
sbit ADDR3=P1^3;


unsigned char code tab[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,};
uint8 LED_uart;
//*9600.N.8.1**********************************************************************
void UART_init(void)      //通讯初始化//
{
TMOD=0x20;
SCON=0x50;  
TH1=256-11059200/9600/(12*32);//????
TL1=TH1;
TR1=1;
ES=1;
EA=1;  
}

//********************************************
void main(void)
{
 ENLED=0;
 ADDR0=0;ADDR1=0;ADDR2=0;ADDR3=1;
 UART_init();
 while(1)
  {
if(LED_uart<0x0A) //如果接收的数据大于10,数码管不显示;
{
P0=tab[LED_uart];
}
}

}
//串口中断
void interrupt_uart() interrupt 4
{
 if(RI)                                  
  {
RI=0;                                
LED_uart=SBUF; //接收数据放到LED_uart中          
}
if(TI) TI=0;                                  
}



单片机、ARM产品开发设计;
小设备、夹具、治具控制器设计开发;数码管、点阵LED电子看板开发;
1717
云伴风回转
文章数:334
年度积分:50
历史总积分:1717
注册时间:2009/3/10
发站内信
发表于:2011/4/16 8:54:11
#6楼
照你的方式,调试了一下,还是不对~!
切记~~!勿浮躁~~!
3641
yueliang150
文章数:389
年度积分:50
历史总积分:3641
注册时间:2003/4/24
发站内信
发表于:2011/4/17 17:29:57
#7楼
上面的串口接收数据程序是没有问题的,你的P0口接的是数码管,串口发送数据,数码管有变化,说明段码不对,把tab[]中的段码更换就可以了;
单片机、ARM产品开发设计;
小设备、夹具、治具控制器设计开发;数码管、点阵LED电子看板开发;
1717
云伴风回转
文章数:334
年度积分:50
历史总积分:1717
注册时间:2009/3/10
发站内信
发表于:2011/4/18 9:52:39
#8楼
没觉得你TAB里有哪里不对啊,不就是数码管显示出的1、2、3……9吗?
切记~~!勿浮躁~~!
3641
yueliang150
文章数:389
年度积分:50
历史总积分:3641
注册时间:2003/4/24
发站内信
发表于:2011/4/18 10:32:43
#9楼
串口发送16进值01,数码管显示什么?

附件
[此贴子已经被作者于2011/4/18 10:36:35编辑过]
单片机、ARM产品开发设计;
小设备、夹具、治具控制器设计开发;数码管、点阵LED电子看板开发;

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

62.4004