本帖最后由 dj狂人 于 2015-1-12 17:20 编辑
当然和UART有关的寄存器不止这几个,但是实现简单的串口工功能用到这几个就够了,接下来我们编程实现串口的初始化以及发送/接收数据。
Void SysClkInit(void); Void Send_StringChar(unsignedchar * dat); int main(void) { unsigned char i=0; unsigned char receive[10]; SysClkInit();/*配置系统时钟,系统时钟默认为5.22MHz,这里配置成41.78MHz,SysClkInit()函数相关声明前面有讲。*/ GP1CON = 0x11;/* 将P1.0和P1.1分别配置为rx和tx引脚。ADUC702X 系列单片机有两个 UART 串口,分别是P1.0(SIN) & P1.1(SOUT), P0.7(SIN)& P2.0(SOUT)。*/ COMCON0 = 0x080; // 将DLAB置位寻址COMDIV0和COMDIV1 COMDIV0= 0x088 ; COMDIV1= 0x000; // 配置DIV0和 DIV1,这里是设置波特率为9600 COMCON0= 0x003; // 将DLAB 清零,方便后面寻址COMTX或COMRX while(i<5)//接收够五个单字节字符的数据后退出循环 { while(!(0x01==(COMSTA0 & 0x01))); //等待接收数据 receive[i++] = COMRX; } Send_StringChar(receive); //打印接收到的信息 Send_StringChar("\n"); //打印换行符 Send_StringChar("Hello EEWorld World\n"); //打印"HelloEEWorld World\n"
While(1); } Void Send_StringChar(unsignedchar * dat) { While(*dat != ‘\0’) { while(!(0x020==(COMSTA0 & 0x020))); COMTX = *dat++; } } VoidSysClkInit(void) { PLLKEY1=0xAA; PLLCON=0x21; //PLL配置,选择内部32KHz振荡器以及默认设置 PLLKEY2=0x55; POWKEY1=0x01; POWCON=0x00; //配置CPU时钟,选择Active模式,不分频41.78MHz POWKEY2=0xF4; } 这样我们便实现了简单的使用串口进行数据的接收/发送。好,撸完收工
|