打印
[国产单片机]

#define unsigned char usendnumber;

[复制链接]
2563|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
贺信|  楼主 | 2009-8-21 11:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg51.h>
#include"DelayTime.h"
#include"Led.h"
#include"Buzzer.h"
#include"LowPower.h"
#include"UART.h"
#define unsigned char usendnumber;
//******************主函数********************
unsigned char uSendData;

main()
{

Uart_initial();   
usendnumber = 0x00;
while(1)
{

  if(usendnumber<2)
  {
   uSendData = 0x27;
   Uart_send(uSendData);
   DelayTimeNms(50);
  }
   
}

}

#include<reg52.h>
#define uchar unsigned char
//***************串口程序****************************//
sfr  AUXR = 0x8e;
sfr  BRT  = 0x9c;
#define RELOAD_COUNT  0xFD   //11.0592MHz,12T,SMOD=0,9600bps

void Uart_initial()
{
SCON    =   0x50;           //0101,0000  方式1:8位可变波特率
PCON    =   0X00;   //设置SMOD=0 波特率不加倍
TMOD    =   0x21;           //0011,0001 设置定时器1为8位自动重装计数器
TH1     =   RELOAD_COUNT;   //设置定时器1自动重装数
TL1     =   RELOAD_COUNT;
TR1     =   1;              //开定时器1
  AUXR = 0X00;  //不允许独立波特率发生器运行,用定时器1做波特率发生器
ES = 1;             //允许串口中断
EA = 1;             //开总中断
}

//*********************串口发送***************

uchar usendnumber = 0x00;   //控制发送值的次数

void Uart_send (unsigned char uData)
{
//EA   = 0;
ES   = 0;             //关串口中断
TI   = 0;             //清零串口发送完成中断请求标志
//SBUF = Sendword;   
SBUF = uData;    //发送值
while(TI==0)    //等待发送
{
  ;
}

usendnumber++;
TI   = 0;             //清零串口发送完成中断请求标志  
ES   = 1;         //允许串口中断
}

相关帖子

沙发
贺信|  楼主 | 2009-8-21 11:16 | 只看该作者
开始能正常发送数据,但一直在发,我想控制发送的次数就加了 if(usendnumber<2) 这句判断
可现在就不能发送了也不能生成目标文件了!!我估计是#define unsigned char usendnumber;这些设置有问题!
  我第一次写,求高手指教!!!谢谢了!!

使用特权

评论回复
板凳
中航_夏工| | 2009-8-21 11:59 | 只看该作者
等待高人,你在编译的时候软件出错提示是什么?

使用特权

评论回复
地板
贺信|  楼主 | 2009-8-21 12:04 | 只看该作者
编译没出错
就是不能生成目标文件
即Target not created

使用特权

评论回复
5
su_mj000| | 2009-8-21 12:56 | 只看该作者

   #define unsigned char usendnumber;

最后那个分号';'去掉。

使用特权

评论回复
6
贺信|  楼主 | 2009-8-21 13:16 | 只看该作者
谢谢5楼,这是个错!!可改过之后编译就出现在
unsigned char uSendData;这句前出现missing' ; 'before' char '

使用特权

评论回复
7
yczhang| | 2009-8-21 14:23 | 只看该作者
你标题的语法就是错的吧,应该是将#define unsigned char usendnumber;前面的#define 去掉

使用特权

评论回复
8
yczhang| | 2009-8-21 14:24 | 只看该作者
而不是删除后面的分号

使用特权

评论回复
9
McuPlayer| | 2009-8-21 14:30 | 只看该作者
建议用typedef来做类型定义,这样C语言编译器会帮你做类型检查
而define的宏只是一个替换

使用特权

评论回复
10
贺信|  楼主 | 2009-8-21 14:35 | 只看该作者
#include<reg51.h>
#include"DelayTime.h"
#include"Led.h"
#include"Buzzer.h"
#include"LowPower.h"
#include"UART.h"


//******************主函数********************

unsigned char usendnumber;
unsigned char uSendData;



main()
{
   /*
        LowPower_warn();        //低电压检测
        Led_ON();               //灯控制程序
    DelayTimeNms(200);
        Led_OFF();
        Buzzer_B();            //蜂鸣器叫
        uBeepN = 4;            //响2下
        StarLowPower_warn();   //上电检测电压
*/

        Uart_initial();          
        usendnumber = 0x00;
        while(1)
        {

       
                if(usendnumber<2)
                {
                        uSendData = 0x27;
                        Uart_send(uSendData);
                        DelayTimeNms(50);
                }
                if(bReceiveFlag)
                {
                        Uart_send (uReceiveData);
                        bReceiveFlag = 0;
                }
               
        }       
       
主函数改成这样后编译是没错,可链接是就是不能生成目标文件
即Target not created
这个程序开始没加 if(usendnumber<2)这个控制发送次数的时候是一直在串口发送能正常工作,我不知道加了后就错在什么地方,做菜鸟真难!!!

使用特权

评论回复
11
贺信|  楼主 | 2009-8-21 16:54 | 只看该作者
好难受!!!
  我终于查出问题来了!!!!
uchar usendnumber = 0x00;   //控制发送值的次数
就是这句错了!!!应该改为外部变量!!!
即加 extern 后就能按我的编程工作了!!
   谢谢大家!!!
菜鸟真的不容易!!今天为这个郁闷了一天!!

使用特权

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

本版积分规则

66

主题

305

帖子

0

粉丝