susuyu 发表于 2010-11-5 09:48:29

c8051f020单片机与pc机之间的串口通信

大家帮我看看这个程序哪儿有问题,谢谢了
#include<c8051f020.h>
unsigned char flag,a;
void main()
{

        TMOD=0x20;//设置定时器1为工作方式2
        TH1=0xfa;//晶振22.1184MHz,波特率9600
        TL1=0xfa;
        TR1=1;
        SCON0=0x50;//串口工作方式1
        EA=1;
        ES0=1;
        while(1)
                {
                if(flag==1)
                  {
                        ES0=0;
                        flag=0;
                        SBUF0=a;
                        while(!TI0);       
                        TI0=0;
                        ES0=1;
                   }
                }
}

void ser() interrupt 4
{
        RI0=0;
        a=SBUF0;
        flag=1;
}
在串口调试助手里面发送一个数据之后接收区没有反应,不知道是什么问题。。

amazing030 发表于 2010-11-5 13:37:38

XBR0 = 0x04;

amazing030 发表于 2010-11-5 13:38:42

再禁用看门狗
楼主还是多看看C8051的资料吧,和普通的8051不是一样的

susuyu 发表于 2010-11-5 15:26:28

回复【2楼】amazing030
-----------------------------------------------------------------------

谢谢哦,看来得慢慢看了。。。

yufan 发表于 2010-11-5 19:17:37

楼上说的没错

cpp12003 发表于 2010-11-5 19:58:19

1、未配置交叉开关指定到IO口上;
2、未选择外部时钟22.1184MHz;
3、未禁止看门狗;

/////////////////////////////////////
//Generated Initialization File//
/////////////////////////////////////

#include "C8051F020.h"

// Peripheral specific initialization functions,
// Called from the Init_Device() function
void Reset_Sources_Init()
{
    WDTCN   = 0xDE;
    WDTCN   = 0xAD;
}

void Timer_Init()
{
    CKCON   = 0x10;
    TCON      = 0x40;
    TMOD      = 0x20;
    TH1       = 0xB8;
}

void UART_Init()
{
    SCON0   = 0x50;
}

void Port_IO_Init()
{
    // P0.0-TX0 (UART0), Open-Drain, Digital
    // P0.1-RX0 (UART0), Open-Drain, Digital
    // P0.2-Unassigned,Open-Drain, Digital
    // P0.3-Unassigned,Open-Drain, Digital
    // P0.4-Unassigned,Open-Drain, Digital
    // P0.5-Unassigned,Open-Drain, Digital
    // P0.6-Unassigned,Open-Drain, Digital
    // P0.7-Unassigned,Open-Drain, Digital

    // P1.0-Unassigned,Open-Drain, Digital
    // P1.1-Unassigned,Open-Drain, Digital
    // P1.2-Unassigned,Open-Drain, Digital
    // P1.3-Unassigned,Open-Drain, Digital
    // P1.4-Unassigned,Open-Drain, Digital
    // P1.5-Unassigned,Open-Drain, Digital
    // P1.6-Unassigned,Open-Drain, Digital
    // P1.7-Unassigned,Open-Drain, Digital

    // P2.0-Unassigned,Open-Drain, Digital
    // P2.1-Unassigned,Open-Drain, Digital
    // P2.2-Unassigned,Open-Drain, Digital
    // P2.3-Unassigned,Open-Drain, Digital
    // P2.4-Unassigned,Open-Drain, Digital
    // P2.5-Unassigned,Open-Drain, Digital
    // P2.6-Unassigned,Open-Drain, Digital
    // P2.7-Unassigned,Open-Drain, Digital

    // P3.0-Unassigned,Open-Drain, Digital
    // P3.1-Unassigned,Open-Drain, Digital
    // P3.2-Unassigned,Open-Drain, Digital
    // P3.3-Unassigned,Open-Drain, Digital
    // P3.4-Unassigned,Open-Drain, Digital
    // P3.5-Unassigned,Open-Drain, Digital
    // P3.6-Unassigned,Open-Drain, Digital
    // P3.7-Unassigned,Open-Drain, Digital

    XBR0      = 0x04;
    XBR2      = 0x40;
}

void Oscillator_Init()
{
    OSCICN    = 0x0C;
}

void Interrupts_Init()
{
    IE      = 0x90;
}

// Initialization function for device,
// Call Init_Device() from your main program
void Init_Device(void)
{
    Reset_Sources_Init();
    Timer_Init();
    UART_Init();
    Port_IO_Init();
    Oscillator_Init();
    Interrupts_Init();
}

anning 发表于 2010-11-5 20:15:36

楼上说的对,你这是完全把C8051当普通51使啊。新手的话,可以学楼上配置向导生成程序框架。

susuyu 发表于 2010-11-6 11:54:59

回复【5楼】cpp12003
1、未配置交叉开关指定到io口上;
2、未选择外部时钟22.1184mhz;
3、未禁止看门狗;
/////////////////////////////////////
//generated initialization file//
/////////////////////////////////////
#include "c8051f020.h"
// peripheral specific initialization functions,
// called from the init_device() function
void reset_sources_init()
{
    wdtcn   = 0xde;
    wdtcn   = 0xad;
}
void timer_init()
{
    ckcon    ......
-----------------------------------------------------------------------

多谢了,我菜鸟级别,还没入门。。

susuyu 发表于 2010-11-6 11:56:43

回复【5楼】cpp12003
1、未配置交叉开关指定到io口上;
2、未选择外部时钟22.1184mhz;
3、未禁止看门狗;
/////////////////////////////////////
//generated initialization file//
/////////////////////////////////////
#include "c8051f020.h"
// peripheral specific initialization functions,
// called from the init_device() function
void reset_sources_init()
{
    wdtcn   = 0xde;
    wdtcn   = 0xad;
}
void timer_init()
{
    ckcon    ......
-----------------------------------------------------------------------

可以留个联系方式否,QQ也行,有问题也可以请教下你。谢谢哦

cpp12003 发表于 2010-11-8 20:07:24

qq:103507640

steve_work 发表于 2011-11-12 23:06:19

mark

陈远鹏 发表于 2013-8-2 21:16:38

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

xiefy21 发表于 2013-8-14 19:59:08

mark……
顶一个…

qwerwe 发表于 2013-9-17 12:57:37

mark……
页: [1]
查看完整版本: c8051f020单片机与pc机之间的串口通信