📄 uart6_test.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 + -