实验八 串行口发送数据和串行口数据接收实验
[实验目的]
1.掌握标准16c550系列串行口寄存器的作用和功能以及设置方法。 2.掌握使用串行口收发格式化的数据方法。 [实验仪器]
1.Proteus仿真的LPC2000系列的ARM处理器
2.软件:PC机操作系统Win98、Win2000或WinXP,Keil for ARM(MDK)集成开发环境
[实验原理]
Lpc2000系列的ARM芯片内部含有1个简单的3线串口和一个标准的modem调制解调器串口。通过外接电平转换芯片可以实现和rs232接口设备的互联。 [实验内容]
使用UART0向串口发送字符串“Hello ARM!”,并且根据串口输入的数据为‘A’或者是‘B’字符实现点亮或者关闭LED发光管。 [预备知识]
参照上课用的ppt的UART一节或者参考教材UART一章。 [实验步骤] 按照下图设计硬件,使符合本次实验的需要.(电源设置参考实验一)
使用proteus设计如下串口电路。 设定电路的电源为3.3V。
用到的器件有:
。
虚拟串口终端按下图查找
虚拟串口终端设置见下图
1 2
注:在虚拟终端上点击右键,弹出1,选择 Edit Properties弹出2. LPC2138的主时钟频率设置为12M
创建一个keil项目uart.uv2,并且将Starup.s添加到项目中。新建一个文本文件并另存为uart.c并且添加到项目中。设定Startup.s的属性如下:
在uart.c文件中包含lpc21xx.h头文件,并添加main函数框架。 #include
#define Fpclk 12000000///4 时钟频率 #define UART_BAUD 9600 波特率 char const str[] =\void Uart0_Init()
{ unsigned int tmp; PINSEL0 &=~(0xf); PINSEL0 |= 0x5; //设置uart U0LCR = (0x3<<0|0x0<<2|0<<3|0<<6|1<<7); //控制uart tmp = Fpclk/16/UART_BAUD; U0DLM = tmp/256; //uart除数锁存低位寄存器 U0DLL = tmp%6; // uart除数锁存高位寄存器 U0LCR = 0x3; }
void UartSendChar(unsigned char x) { U0THR = x; while((U0LSR&(1<<5))== 0); }
void Uart_SendString(const char * s) {
while((*s)!='\\0'){ UartSendChar(*s++); } }
char GetCh() { char ch; while((U0LSR&(1<<0))==0); ch = U0RBR; return ch;
}
void LED_Init()
{ PINSEL1= 0x0; IODIR0 = 0x1<<16; }
void led_on(unsigned char on) { if(on == 0) IOCLR0 = 1<<16; else IOSET0 = 1<<16; }
int main() { char c; char s[100]; LED_Init(); Uart0_Init();
Uart_SendString(str); while(1){
c = GetCh(); if(c=='A') led_on(1); else if(c=='B') led_on(0); }
return 0; }
分析代码中各个语句的含义。了解此类设计的编程思想。 [思考题与数据分析]
1. 修改代码,使串口能够格式化输出数值到虚拟终端。
2. 将led的开关控制设置为字符串控制,当输入字符串“ON”时候led点亮;输入字符串
“OFF”led熄灭。
3. 修改代码,使实现在串口终端中输入的字符能够显示。 4. 设置串口中断输入方式点亮led。

