CH432收发成功2/*波特率4800*/#includesbit P20 = P2^0;sbit P21 = P2^1;sbit P22 = P2^2;sbit P23 = P2^4;sbitbeep=P2^3;#defineCH432_SPI_SCS P20 /*假定CH432的SCS引脚*/#defineCH432_SPI_SDI P21 /*假定CH432的SDI引脚*/#defineCH432_SPI_SDO P22 /*假定CH432的SDO引脚*/#defineCH432_SPI_SCK P23 /*假定CH432的SCK引脚*/#defineCH432_THR_PORT 0x00#defineCH432_DLL_PORT 0x00#defineCH432_DLM_PORT 0x01#defineCH432_IER_PORT 0x01#defineCH432_IIR_PORT 0x02#defineCH432_FCR_PORT 0x02#defineCH432_LCR_PORT 0x03#defineCH432_MCR_PORT 0x04#defineCH432_LSR_PORT 0x05#defineCH432_MSR_PORT 0x06#defineCH432_SCR_PORT 0x07#defineBIT_LCR_DLAB 0x80#defineBIT_FCR_FIFOEN 0x01#defineBIT_LCR_WORDSZ1 0x02#defineBIT_LCR_WORDSZ0 0x01#defineBIT_LSR_THRE 0x20#defineBIT_IER_IEMODEM 0x08#defineBIT_IER_IELINES 0x04#defineBIT_IER_IETHRE 0x02#defineBIT_IER_IERECV 0x01#defineBIT_MCR_OUT2 0x08#defineBIT_MCR_RTS 0x02#defineBIT_MCR_DTR 0x01#defineBIT_LSR_TEMT 0x40#defineCH432_LCR1_PORT 0x0B#defineCH432_DLL1_PORT 0x08#defineCH432_DLM1_PORT 0x09#defineCH432_FCR1_PORT 0x0a#defineCH432_THR1_PORT 0x08#defineCH432_LSR1_PORT 0x0d#defineBIT_LSR_BREAKINT 0x10#defineBIT_LSR_FRAMEERR 0x08#defineBIT_LSR_PARERR 0x04#defineBIT_LSR_OVERR 0x02#defineBIT_LSR_DATARDY 0x01#defineCH432_RBR_PORT 0x00#defineCH432_RBR1_PORT 0x08#defineSpi432Stop() {CH432_SPI_SCS=1;} /*SPI结束*/#defineFpclk 1843200 /*定义内部时钟频率 */#defineCH432_BPS 4800 /*定义CH432串口0通讯波特率*/#defineCH432_BPS1 4800 /*定义CH432串口0通讯波特率*/unsignedintSpi432InByte(void) /*SPI输入8个位数据*/{unsignedinti,d;d=0;/*如果SPI的SDO和SDI合用一个I/O引脚,那么必须在此设置该I/O方向为输入*//*CH432_SPI_SCK=1; */for(i=0;i<8;i++){CH432_SPI_SCK=0; /*CH432在时钟下降沿输出*/d<<=1;if(CH432_SPI_SDO)d++;CH432_SPI_SCK=1;}return(d); }voidSpi432OutByte(unsignedint d) /*SPI输出8个位数据*/{unsignedint i;for(i=0;i<8;i++){CH432_SPI_SCK=0;if(d&0x80)CH432_SPI_SDI=1;elseCH432_SPI_SDI=0;d<<=1; /*数据位是高位在前*/CH432_SPI_SCK=1; /*CH432在时钟上升沿采样输入*/}}voidSpi432Start(unsignedintaddr) /*SPI开始*/{/*对于双向I/O引脚模拟SPI接口,那么必须确保已经设置SPI_SCS,SPI_SCK,SPI_SDI为输出方向,SPI_SDO为输入方向*/CH432_SPI_SCS=0; /*SPI片选有效*/Spi432OutByte(addr); }unsignedintReadCH432Data(unsignedintmAddr) /*从指定寄存器读取数据*/{unsignedintd;Spi432Start((mAddr<<2)&0xFD); /*位5-2为当前操作地址,位1为0读操作*/d=Spi432InByte();CH432_SPI_SCS=1;return(d);}voidWriteCH432Data(unsignedintmAddr,unsignedintmData) /*向指定寄存器写入数据*/{Spi432Start((mAddr<<2)|0x02); /*位5-2为当前操作地址,位1为1写操作*/Spi432OutByte(mData);CH432_SPI_SCS=1;}/*************************************************************************************************//******************************************************/voidtransmit(unsignedintnum){SBUF=num;while(!TI);TI=0;}voidinit(){TMOD=0x20;PCON=0x00;TH1=0xfa;TL1=0xfa;TR1=1;//REN=1;SM0=0;SM1=1;}voiddelay(unsignedintk){unsignedi;while(k!=0){for(i=0;i<1150;i++);k--;}}/********************************************************/voidInitCH432(void) /*初始化CH432*/{unsignedintdiv;unsignedintDLL,DLM;/**************************************************************************设置CH432串口0的寄存器**************************************************************************/div=(Fpclk>>4)/CH432_BPS;DLM=div>>8;DLL=div&0xff;WriteCH432Data(CH432_LCR_PORT,BIT_LCR_DLAB); /*设置DLAB为1*/WriteCH432Data(CH432_DLL_PORT,DLL); /*设置波特率*/WriteCH432Data(CH432_DLM_PORT,DLM);WriteCH432Data(CH432_FCR_PORT,BIT_FCR_FIFOEN); /*设置FIFO模式*/WriteCH432Data(CH432_LCR_PORT,BIT_LCR_WORDSZ1|BIT_LCR_WORDSZ0); /*字长8位,1位停止位、无校验*/WriteCH432Data(CH432_IER_PORT,BIT_IER_IEMODEM|BIT_IER_IELINES|BIT_IER_IETHRE|BIT_IER_IERECV); /*使能中断*/WriteCH432Data(CH432_MCR_PORT,BIT_MCR_OUT2|BIT_MCR_RTS|BIT_MCR_DTR); /*允许中断输出,DTR,RTS为1*//**************************************************************************设置CH432串口1的寄存器**************************************************************************/div=(Fpclk>>4)/CH432_BPS1;DLM=div>>8;DLL=div&0xff;WriteCH432Data(CH432_LCR1_PORT,BIT_LCR_DLAB); /*设置DLAB为1*/WriteCH432Data(CH432_DLL1_PORT,DLL); /*设置波特率*/WriteCH432Data(CH432_DLM1_PORT,DLM);WriteCH432Data(CH432_FCR1_PORT,BIT_FCR_FIFOEN); /*设置FIFO模式*/WriteCH432Data(CH432_LCR1_PORT,BIT_LCR_WORDSZ1|BIT_LCR_WORDSZ0); /*字长8位,1位停止位、无校验*//*WriteCH432Data(CH432_IER1_PORT,BIT_IER_IEMODEM|BIT_IER_IELINES|BIT_IER_IETHRE|BIT_IER_IERECV); /*使能中断*//*WriteCH432Data(CH432_MCR1_PORT,BIT_MCR_OUT2|BIT_MCR_RTS|BIT_MCR_DTR); /*允许中断输出,DTR,RTS为1*/}/***********************************************************************************/voidCH432_PORT_INIT() /*由于使用通用I/O模拟SPI读写时序,所以进行初始化*/{CH432_SPI_SCS=1;CH432_SPI_SCK=1;}/*************************************************************************************/unsignedintUART1_RcvByte(){unsignedintRcvdat;//unsignedintaa;if(!(ReadCH432Data(CH432_LSR1_PORT)&(BIT_LSR_BREAKINT|BIT_LSR_FRAMEERR|BIT_LSR_PARERR|BIT_LSR_OVERR))) /* b1-b4无错误*/{while((ReadCH432Data(CH432_LSR1_PORT)&BIT_LSR_DATARDY)==0); /*等待数据准备好*//* {aa=ReadCH432Data(CH432_LSR_PORT)&BIT_LSR_DATARDY;transmit(aa);}transmit(0xff); */Rcvdat=ReadCH432Data(CH432_RBR1_PORT); /*从接收缓冲寄存器读出数据*/return(Rcvdat);}elseReadCH432Data(CH432_RBR1_PORT); /*有错误清除*/}/*****************************************************************************************/voidUART1_SendByte(unsignedintdat) /*CH432串口0发送一字节子程序*/{while(!((ReadCH432Data(CH432_LSR1_PORT)&BIT_LSR_THRE)==0x20)); /*等待数据发送完毕*/WriteCH432Data(CH432_THR1_PORT,dat);/*while((ReadCH432Data(CH432_LSR_PORT)&BIT_LSR_TEMT)==0x00); */}/***************************************************************************************/voidmain(){unsignedintaa;init();CH432_PORT_INIT();InitCH432();while(1){aa=UART1_RcvByte();P1=aa; UART1_SendByte(aa);UART1_SendByte(0xaa);}}
本文档为【CH432 收发成功2】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。