搜索
bottom↓
回复: 0

串口调试发送数据不对

[复制链接]

出0入0汤圆

发表于 2011-9-9 22:33:55 | 显示全部楼层 |阅读模式
/*=====================================================
Name:                                UART6
Write by:               
Date:                               
MCU:                                  NEC78F9224
FSYS:                                8MHz
Fxp:                                8MHZ
IDE:                                PM+
Original version:        V00
Revised version:       
======================================================*/

#pragma interrupt INTSR6 Uart6_Irq_Rec
#pragma interrupt INTST6 Uart6_Irq_Trans

#pragma section @@CNST OPT AT 80H        //option byte setting
const char OPT=0B10011100;        //1,DEFOSTS1,DEFOSTS0,1,RMCE,OSCSEL1,OSCSEL0,LIOCP;       
                                        //bit4,bit7                must be '1'
                                        //bit6,bit5                for external crystal
                                        //bit3:                        0-->i/o port, 1-->reset port                                                                                       
                                        //bit2,bit1:        10-->internal 8MHZ
                                          //Fcpu=8MHZ;(set by PCC=00H,PPCC=00H);
                                        //Fxp=8MHZ;Tcpu=1/8MHZ;        (set by PPCC=00H);               
                                        //bit0:         0-->WDT control by software. (if LSRSTOP==1.)  
                                        //!!!                 must be connected Rx to VCC for sets P34 as IO.


/*===========================================
function:                UART6 transmit data
input:                        single byte data
specification:        no
============================================*/
void Uart6_Init_Trans(void)
{
        //0. set I/O P43 as output mode for Txd6;
        P4.3=1; PM4.3=0;         //first set P4.3
       
        //1. set CKSR6 register of UART6 clock;
        CKSR6=0X04;                //Fxclk6=Fxp/16=8M/16=500KHZ(Fx=Fxp=8MHZ);
       
        //2. set BRGC6 register of UART6 band;
        BRGC6=0X1A;                //26  //band=Fxclk6/2*26=500k/52=9615 bps;
       
        //3. set ASIM6 4-0 bit(PS61,PS60,CL6,SL6,ISRM6);
        //ISRM6=1;                //no INTSRE6 interrupt when receive error;
                                        //allowance INTSR6 interrupt when receive error;
                                        //but need check the data in interrupt routine.
        //SL6=0;                //one stop bit;
        //CL6=1;                //data length=8 bits;
        //PS61=1;PS60=1; //even check;
        //ASIM6.0=1;
        //ASIM6.1=0;
        //ASIM6.2=1;
        //ASIM6.3=0;
        //ASIM6.4=0;
        ASIM6 =0b00011101;
       
        //4. set ASICL6 1-0 bit(DIR6,TXDLV6);
        //TXDLV6=0;                //normally output with no inverse;
        //DIR6=1;                //MSB be sended first;
        ASICL6 =0b00000010;
       
        //5. set ASIM6 7 bit(POWER6=1);
        POWER6=1;                //allowance operating for UART6;
                                        //TXD6 pin output '1' level;
       
        //6. set ASIM6 6 bit(TXE6=1);
        NOP();
        TXE6=1;        //allowance send mode;
       
        //7. if using interrupt,must set below;
        //STMK6=0;STIF6=0; //prohibit interrupt
       
}

unsigned char Uart6_Trans(unsigned char tdata)
{        unsigned char i;
       
        //start transmit data;
        NOP();
        i=ASIF6 & 0x02;                //TXBF6 must be =0 before send next data;
        if(i==0x00)                 //judge the TXBF6==0;
        {       
                TXB6=tdata;
                return 1; //send successed
        }
        else
                return 0; //send failure
       
}



/**************************************************************************
function:                 Sys_Init()
specification:        no
***************************************************************************/
__callt void Sys_Init(void)
{
        PCC=0x00;  //Fsys=8Mhz;        Fxp=8Mhz;
        PPCC=0x00;
       
        DI();

        Uart6_Init_Trans();       

        EI();
       
}

__interrupt void Uart6_Irq_Trans(void)
{        STIF6=0;
        NOP();
        TXB6=101;//trans_data;        //writing "data";
       
}

  
/********************************** main *************************************/
//////////////////////////////////////////////////////////////////////////////
void main(void)
{        unsigned int temp_buf=0;
        unsigned int x=0;
        unsigned char y=0;       
       
                       
        Sys_Init();  //initialize MCU;                         
                 
        while(1)
        {                       
                for(x=0;x<10;x++)
                {       
                         y=Uart6_Trans(101);
                }
                               
        }
       
}  

问题:设置感觉没有问题,发送的数据为什么一直不对?
       内部晶振难道不能做串口时钟吗?是不是不准?
      如果我用中断来发送,电脑串口接收反而没有任何反应了?(STMK6=0;STIF6=0;)
请高手指点下。
先谢了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-3 01:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表