dongdaxing 发表于 2008-8-29 16:32:26

菜鸟第六贴 串口收发

/*
*******************************************************************************
**        daxinganling@hotmail.com
**Filename :        Receive And Send Uart6 in interrupt mode
**Abstract :        This file implements main function.
**APIlib :        NEC78K0SKX1+.lib V1.70
**
**Device :        uPD78F9234
**
**Compiler :        NEC/CC78K0
**
*******************************************************************************
*/
#pragma        interrupt        INTSR6        MD_INTSR6
#pragma        interrupt        INTST6        MD_INTST6

#include "macrodriver.h"
#include "system.h"


/*
*******************************************************************************
**MacroDefine
*******************************************************************************
*/
/*
**---------------------------------------------------------------------------
**
**Abstract:
**        This function implements main function.
**
**Parameters:
**        None
**
**Returns:
**        None
**
**---------------------------------------------------------------------------
*/

extern void hdwinit(void);

bit rx_flag;
bit sd_flag;

unsigned char TEMP;

void UART6_Init( void )
{
        ASIM6 = 1;                                        /* ENABLE INTERNAL CLOCK OPERATION*/

        SetIORBit(P4, 0x08);                /* port setting in transmit/receive mode */
        ClrIORBit(PM4, 0x08);
        SetIORBit(PM4, 0x10);
       
        SetIORBit(ASIM6, 0x04);                /* data length 8 bits */
        SetIORBit(ASIM6, 0x10);                /* odd bits */
        ClrIORBit(ASIM6, 0x02);                /* stop length 1 bit */
       
        SetIORBit(ASICL6, 0x02);        /* LSB-first transfer */

        CKSR6 = 0x1;                    /* baudrate selection 9600*/
        BRGC6 = 0xd0;

        ClrIORBit(IF1, 0x60);
        ClrIORBit(MK1, 0x60);                /* UART6 transmit/receive end interrupt enable */
        SetIORBit(ASIM6, 0x80);
        SetIORBit(ASIM6, 0x60);                /* UART6 transmit/receive mode */
}

bit SENDCHAR(UCHAR TEMP)
{
   sd_flag = 0;
   TXB6 = TEMP;
   while(!sd_flag);   
   return 1;
}


bit SENDSTRING(UCHAR *databuf, UCHAR txnum,UCHAR format)
{
        UCHAR i = 0;
        for(i=0;i<txnum;i++)
        {
                TEMP = *(databuf+i);
                SENDCHAR(TEMP);
        }
        if(format)
        {
                TEMP ='\n';
                SENDCHAR(TEMP);       
        }
        return 1;
}

__interrupt void MD_INTST6( void )
{
        sd_flag = 1;
}

__interrupt void MD_INTSR6( void )
{
        rx_flag = 1;
}

void delay(int ms)
{
        while(ms--);       
}
       
void main( void )
{
        hdwinit();
       
        UART6_Init();
       
        SENDSTRING("HELLO BOY",9,1);
       
        while(1)
        {
                while(rx_flag)
                {
                        rx_flag = 0;
                        SENDSTRING("RECEIVE DATA:",13,0);
                        SENDCHAR(RXB6);
                        SENDCHAR('\n');
                }
        }

}

串口通讯ourdev_394495.rar(文件大小:53K) (原文件名:USART.rar)

看看 呵呵

RENESAS-etouch 发表于 2008-9-1 11:36:10

dongdaxing ,谢谢你热心支持本论坛。

zghycc 发表于 2008-12-5 17:05:43

ASIM6&nbsp;=&nbsp;1;&nbsp;

这一句什么意思,一个十进制的数1是直接赋给最高位了吗?如果是,那为什么后面还有一句SetIORBit(ASIM6,&nbsp;0x80);&nbsp;,作用不是重复的吗

sophie0403 发表于 2008-12-5 20:20:16

ASIM6&nbsp;=&nbsp;1;&nbsp;&nbsp;给这个寄存器赋值为1





SetIORBit(ASIM6,&nbsp;0x80);&nbsp;&nbsp;最高位置1

zghycc 发表于 2008-12-16 20:54:53

帮忙看一下,我这个串口为什么烧到板子中就没波形了

#pragma&nbsp;nop



#include&nbsp;"macrodriver.h"

#include&nbsp;"system.h"



extern&nbsp;void&nbsp;hdwinit(void);





void&nbsp;UART6_Init(&nbsp;void&nbsp;)

{



&nbsp;&nbsp;&nbsp;&nbsp;SetIORBit(P4,&nbsp;0x08);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;port&nbsp;setting&nbsp;in&nbsp;transmit/receive&nbsp;mode&nbsp;*/

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClrIORBit(PM4,&nbsp;0x08);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetIORBit(PM4,&nbsp;0x10);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetIORBit(ASIM6,&nbsp;0x04);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;data&nbsp;length&nbsp;8&nbsp;bits&nbsp;*/

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClrIORBit(ASIM6,&nbsp;0x18);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;NO&nbsp;bits&nbsp;*/

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClrIORBit(ASIM6,&nbsp;0x02);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;stop&nbsp;length&nbsp;1&nbsp;bit&nbsp;*/

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetIORBit(ASICL6,&nbsp;0x02);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;LSB-first&nbsp;transfer&nbsp;*/

&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CKSR6&nbsp;=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;baudrate&nbsp;selection&nbsp;9615*/

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BRGC6&nbsp;=&nbsp;0xd0;



&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClrIORBit(IF1,&nbsp;0x60);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClrIORBit(MK1,&nbsp;0x60);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;UART6&nbsp;transmit/receive&nbsp;end&nbsp;interrupt&nbsp;enable&nbsp;*/

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetIORBit(ASIM6,&nbsp;0x80);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetIORBit(ASIM6,&nbsp;0x60);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;UART6&nbsp;transmit/receive&nbsp;mode&nbsp;*/

}



void&nbsp;UART_send(char&nbsp;data)&nbsp;&nbsp;&nbsp;

{&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(STIF6!=0)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STIF6=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data=(data>>7)|(data&lt;&lt;1);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TXB6=data;&nbsp;

&nbsp;}&nbsp;



void&nbsp;delay(int&nbsp;ms)

{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(ms--);

&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

void&nbsp;main(&nbsp;void&nbsp;)

{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hdwinit();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UART6_Init();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(1)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UART_send(0x55);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;}



}

系统时钟设置:

void&nbsp;Clock_Init(&nbsp;void&nbsp;)

{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClrIORBit(PPCC,&nbsp;0x03);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClrIORBit(PCC,&nbsp;0x02);

}

可选字节为0x9c

麻烦了

zghycc 发表于 2008-12-17 17:13:58

已经解决了,呵呵!!
页: [1]
查看完整版本: 菜鸟第六贴 串口收发