⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart6_test.c

📁 NEC 78K0 KX2系列 UART-PC 通讯
💻 C
字号:

#pragma sfr
#pragma di
#pragma ei
#pragma ioreg                           	/* Enables use of peripheral I/O register */
#pragma asm
#pragma NOP


void UART6_Initialize(void);
void UART6_SendByte(char data);
void delay(char count);


void main( void )
{
    unsigned char i;
	WDTE = 0x1A;	/*	stop watchdogtimer */

    UART6_Initialize(); /**/
    while(1)
    {
        for(i=0;i<200;i++)
        {
            UART6_SendByte(i);
            delay(50);
        }

    }
}
void delay(char count)
{
    unsigned int i,j;
    for(i=0;i<count;i++)
    {
        for(j=0;j<500;j++)
        {

        }
    }

}
/********************************************************
serial port UATR6 initialize

The basic procedure of setting an operation in the UART mode is as follows.
<1> Set the CKSR6 register
<2> Set the BRGC6 register
<3> Set bits 0 to 4 (ISRM6, SL6, CL6, PS60, PS61) of the ASIM6 register
<4> Set bits 0 and 1 (TXDLV6, DIR6) of the ASICL6 register
<5> Set bit 7 (POWER6) of the ASIM6 register to 1.
<6> Set bit 6 (TXE6) of the ASIM6 register to 1. 仛 Transmission is enabled.
    Set bit 5 (RXE6) of the ASIM6 register to 1. 仛 Reception is enabled.
<7> Write data to transmit buffer register 6 (TXB6). 仛 Data transmission is started.
Caution Take relationship with the other party of communication when setting the port mode register
and port register.
********************************************************/
void UART6_Initialize(void)
{
    PM0 = 0x00;	/*port 0 as output mode */
	PM6 = 0x00;	/*port 6 as output mode */
	PM12 = 0x00;/*port 12 as output mode */

    PM1.1 = 0; /*P11 as output mode */
	PM1.3 = 0; /*P13/TxD6 as output mode */
    PM1.4 = 1; /*P14/RxD6 as i input mode */

    PU1.4 =1; /*pull up connect*/
    P1.3 = 1;


	P0 = 0x03;
	P6 = 0x03;
	P12 = 0x07;
	P1 = 0xff;

    IF0L &= 0x7f; /*clear INTSRE6: UART6 receive error interrupt flag*/
    IF0H &= 0xfc; /*clear INTSR6 and INTST6: UART6 receive and send completed interrupt flag*/

    ASIM6 = 0x00;/*ready for config UART6 registeres*/

    /*=======step1====baud rate config==================
    system clock is 8MHz, combine CKSR6 and BRGC6, set the baud rate as 9600
    8000000/32/2/13= 9600
    CKSR6: UART6 clock select register
    */
    CKSR6 = 0x05;  /*UART6 clock frequence is external HW clock*/

    /*=======step2======================================
    BRGC6: baud rate control register
    */
    BRGC6 = 13;


    /*====================================*/

    /*=======step3=============================*/
    /*
    ASIM6 :UART6 operate mode register
    bit7 POWER6: enable/disable interal clock operate, 0 disable,1 enable
    bit6 TXE6: enable/disable send, 0 disable,1 enable
    bit5 TXE6: enable/disable receive, 0 disable,1 enable
    bit4,3 PS61 PS60: send/receive verify set
            00 don't verify
            01 zero verify
            10 odd verify
            11 even veiry
    bit2 CL6 send/receive data wide,0 7bit data,1 8bit data
    bit1 SL6 stop bit number of send data, 0 1bit stop bit,1 2bit stop bit
    bit0 ISRM6: enable/disable reveive completed interrupt when receive error
            0 generate INTSRE6 interrupt, don't generate INTSR6 interrupt
            1 generate INTSR6 interrupt,don't generate INTSRE6 interrupt
    */
    ASIM6 |= 0x15;/*config bit4~0 of ASIM6*/

 /*========step4=======================================*/
 /*
    ASICL6: UATR6 control register
    bit7 SBRF6: SBF receive state flag,if is normal receiving,set 1, read only
    bit6 SBRT6: SBF receive spring, 1 spring
    bit5 SBTTT: SBF send spring, 1 spring
    bit4~2 SBL62~SBL60: SBF send output wide
        101 SBF output wide is 13 bit
        110 SBF output wide is 14 bit
        111 SBF output wide is 15 bit
        000 SBF output wide is 16 bit
        001 SBF output wide is 17 bit
        010 SBF output wide is 18 bit
        011 SBF output wide is 19 bit
        100 SBF output wide is 20 bit

        bit7~2 SBF used in LIN communication

    bit1 DIR6: first send bit config, 0 first send bit is MSB,1 first send bit is LSB
    bit0 TXDLV6: enable/disable TxD6 reverse output, 0 normal output,1 output reversed
 */
    ASICL6.1 = 1;
    ASICL6.0 = 0;

/*
    ASIM6 :UART6 operate mode register
    bit7 POWER6: enable/disable interal clock operate, 0 disable,1 enable
    bit6 TXE6: enable/disable send, 0 disable,1 enable
    bit5 TXE6: enable/disable receive, 0 disable,1 enable
*/
/*========step5=======================================*/
    ASIM6.7 = 1;
    NOP();
    NOP();
/*========step6=======================================*/
    ASIM6.6 = 1;
    NOP();
    NOP();
    ASIM6.5 = 1;
    NOP();
    NOP();

/*========current ready for send and receive data=================*/
    MK0L &= 0x7f;	/*enable INTSRE6 interrupt serve */
    MK0H &= 0xfc;  /*enable INTSR6 and INTST6 interrupt serve */
    EI();			/*enable interrupt  */


}

void UART6_SendByte(char data)
{
    unsigned char x;
    x = ASIF6;
    while( (x&0x02) == 0x02)
    {
    }
    TXB6 = data;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -