打印
[国产单片机]

STC单片机的请进帮帮看看我这程序

[复制链接]
2111|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
贺信|  楼主 | 2009-8-20 08:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STC单片机的请进帮帮看看我这程序

#include<reg52.h>
#define uchar unsigned char
//***************串口程序****************************//
sfr  AUXR = 0x8e;
sfr  BRT  = 0x9c;
#define RELOAD_COUNT  0xFD   //11.0592MHz,12T,SMOD=0,9600bps
//uchar Sendword;       //发送的字符
void Uart_initial()
{
SCON    =   0x50;           //0101,0000  方式1:8位可变波特率
//TMOD    =   0x21;           //0011,0001 设置顶时器1为8位自动重装计数器
//TH1     =   RELOAD_COUNT;   //设置定时器1自动重装数
//TL1     =   RELOAD_COUNT;
//TR1     =   1;              //开定时器1
BRT  = RELOAD_COUNT;
AUXR = 0x10;       //T0x12,T1x12,UART_M0x6,BRTR,S2SMOD,BRTx12,EXTRAM,S1BRS
      //详见STC12XX PDF AUXR设置介绍P49页
                        // BRTR = 1, S1BRS = 1,
ES = 1;             //允许串口中断
EA = 1;             //开总中断
}
void Uart_send (unsigned char uSendData)
{
//EA   = 0;
ES   = 0;             //关串口中断
TI   = 0;             //清零串口发送完成中断请求标志
//SBUF = Sendword;   //发送值
SBUF = uSendData;
while(TI==0)    //等待发送
{
  ;
}
TI   = 0;             //清零串口发送完成中断请求标志
ES   = 1;         //允许串口中断
//EA   = 1;
}


//******************主函数********************
unsigned char uSendData;
main()
{
   
Uart_initial();   
while(1)
{
  uSendData = 0x11;
  Uart_send(uSendData);
  DelayTimeNms(500);
}

}

相关帖子

沙发
贺信|  楼主 | 2009-8-20 08:36 | 只看该作者
我调试的时候老是在下面这一句就不会往下走了,老是在这,也就是发射没有成功,不知道为什么????
while(TI==0)    //等待发送
{
  ;
}

使用特权

评论回复
板凳
chaqing| | 2009-8-20 10:04 | 只看该作者
你要设定断点,然后全速运行

使用特权

评论回复
地板
贺信|  楼主 | 2009-8-20 11:51 | 只看该作者
#include<reg52.h>
#define uchar unsigned char

//***************串口程序****************************//

sfr  AUXR = 0x8e;
sfr         BRT  =        0x9c;
#define RELOAD_COUNT  0xFD   //11.0592MHz,12T,SMOD=0,9600bps

//uchar Sendword;       //发送的字符

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

        //BRT  =        RELOAD_COUNT;

//        AUXR =        0x11;       //T0x12,T1x12,UART_M0x6,BRTR,S2SMOD,BRTx12,EXTRAM,S1BRS
                                                //详见STC12XX PDF AUXR设置介绍P49页       
                        // BRTR = 1, S1BRS = 1.此模式选择独立波特率发生器工作

        AUXR = 0X00;                //不允许独立波特率发生器运行,用定时器1做波特率发生器
        ES = 1;             //允许串口中断
        EA = 1;             //开总中断

}

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

使用特权

评论回复
5
贺信|  楼主 | 2009-8-20 11:54 | 只看该作者
我该用定时器1后能发送,但是还是老是在发送,
while(TI==0)                  //等待发送
调试时到这一句就不往下走了
不知道那里出错了???

使用特权

评论回复
6
McuPlayer| | 2009-8-20 14:33 | 只看该作者
没发送出去,当然不走了

使用特权

评论回复
7
yczhang| | 2009-8-20 14:54 | 只看该作者
调试时接硬件了吗,不接的话,到那一句肯定是不走啊

使用特权

评论回复
8
贺信|  楼主 | 2009-8-20 14:56 | 只看该作者
打开了串口调试助手  ,一直在发呀!!
硬件也接连了呀,就是和硬件在一起调试的

不知道这程序设计有没问题呀??

使用特权

评论回复
9
贺信|  楼主 | 2009-8-20 15:18 | 只看该作者
我改了主程序的延时时间  他发送的时间在串口上也延时了
  可调试的是后还是在那里不往下走!!!为什么呢??
单片机是打开上电的呀!!

使用特权

评论回复
10
贺信|  楼主 | 2009-8-20 16:07 | 只看该作者
问题好像有眉目了,谢谢7楼提醒

使用特权

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

本版积分规则

66

主题

305

帖子

0

粉丝