3470|4

64

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

C8051F系列单片机串口应用问题 [复制链接]

近日学习C8051F340系列单片机的应用,遇到一段串口发送接收程序,有一个地方看不懂,即:在串口发送和接收前,要置P3口的状态,使用交叉开关后的串口Rx和Tx不是都在P1口中吗,关P3口什么事啊?请高手指点,我进行了调试,不对P3口置位还真不行,程序如下:
#include "c8051f340.h"
#include "intrins.h"

#define NOP _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

//sbit ssa = P4^0;

//-----------------------------------------------------------------------------
//    函数原型:
//    功    能:
//-----------------------------------------------------------------------------
void Mcu_Init(void)
{
        //PCA0及看门狗
        PCA0CN = 0x00;//禁止看门狗定时器
        PCA0MD = 0x80;//待机时PCA停止,系统时钟的12分频

        //交叉开关及I/O口
        XBR0 = 0x01;//
        XBR1 = 0x40;//禁止弱上拉,使能交叉开关,CEX0--P0.0测转速
        XBR2 = 0x00;//

        P0MDIN = 0x3f;//P0.7,P0.6 模拟输入
        P0SKIP = 0xc0;//P0.7,P0.6 XTAL1,XTAL2跳过
        P0MDOUT = 0x10;
}


//-----------------------------------------------------------------------------
//    函数原型:
//    功    能:
//-----------------------------------------------------------------------------
void UART0_Init (void)
{
        SCON0 |= 0x10;                                                            
        CKCON = 0x02;//系统时钟24576000  T1时钟=24576000/48=512000
        TH1 = 0xe6;//波特率为9600
        TL1 = 0xe6;                        
        TMOD = 0x20;                     
        TR1 = 1;                           
        TI0 = 1;                           
}

//-----------------------------------------------------------------------------
//    函数原型: void Sysclk_Init (void);
//    功    能: 系统工作时钟初始化
//-----------------------------------------------------------------------------
void Sysclk_Init (void)
{
        unsigned char i;
        OSCXCN = 0x67;//晶体振荡方式,11.0592MHz
        for(i=0; i<250; i++);//延时
        while (!(OSCXCN & 0x80));//等待晶体振荡稳定
        CLKSEL = 0x01;//系统时钟切换至外部振荡器
        OSCICN = 0x00;//关闭内部振荡器
}


//-----------------------------------------------------------------------------
//    函数原型: void Delay_Us(unsigned char us);
//    功    能: 延时*us
//-----------------------------------------------------------------------------
void Delay_Us(unsigned char us)
{
        while(--us)
        {
                NOP;
        }
}


//-----------------------------------------------------------------------------
//    函数原型: void Delay_Ms(unsigned char ms);
//    功    能: 延时*ms
//-----------------------------------------------------------------------------
void Delay_CharMs(unsigned char ms)
{
        while(--ms)
        {
                Delay_Us(250);
                Delay_Us(250);
                Delay_Us(250);
                Delay_Us(250);
        }
}


//发送
/*
//-----------------------------------------------------------------------------
//    函数原型:
//    功    能:
//-----------------------------------------------------------------------------
void Main(void)
{
        unsigned char send;
        Mcu_Init();
        Sysclk_Init();
        Delay_CharMs(200);

        send = 48;

        UART0_Init();
        P3 = 0;

        while(1)
        {
                SBUF0 = send;

                while(TI0==0);
                TI0=0;

                send++;
                if(send>122)
                {
                        send = 48;
                }
                Delay_CharMs(50);
        }
}
*/

/*
//接收
//-----------------------------------------------------------------------------
//    函数原型:
//    功    能:
//-----------------------------------------------------------------------------
void Main(void)
{
        unsigned char send[20];
        unsigned char i = 0;

        Mcu_Init();
        Sysclk_Init();
        Delay_CharMs(200);

        UART0_Init();
        REN0 = 1;
        P3 = 0xff;

        while(1)
        {
                while(RI0==0);

                send = SBUF0;

                i++;
                if(i>19)
                {
                        i = 0;
                }

                RI0=0;

                Delay_CharMs(50);
        }
}
*/

最新回复

P3口本身与串口无关,不过可能用的外部RS232芯片是带使能脚的(EN or nEN),而P3是控制该芯片的使能脚的,所以不配置P3口,RS232芯片就不工作,当然就无法接收到数据了。只是猜测,因为你用的什么板子不知道,电路也不知道。  详情 回复 发表于 2008-7-20 21:31
点赞 关注

回复
举报

63

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
帮你顶
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

和p3口无关系,f340我还没机会用过

西安杨工单片机博客

http://c8051fmcu.blog.sohu.com

 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

4
 
我也想和应该和P3口无关,但我仿真调试时,注释掉P3相关的语句就发不出去,RI0总是0,不知道为什么?
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

5
 
P3口本身与串口无关,不过可能用的外部RS232芯片是带使能脚的(EN or nEN),而P3是控制该芯片的使能脚的,所以不配置P3口,RS232芯片就不工作,当然就无法接收到数据了。只是猜测,因为你用的什么板子不知道,电路也不知道。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表