嵌入式系统实训报告Word下载.docx
《嵌入式系统实训报告Word下载.docx》由会员分享,可在线阅读,更多相关《嵌入式系统实训报告Word下载.docx(18页珍藏版)》请在冰豆网上搜索。
但是,仅通过写IOxSET或IOxCLR寄存器是不可能使一个GPIO口同时输出包含0和1的二进制数。
图1
五、程序代码
#include"
includes.h"
intmain(void)
{
PINSEL0=PINSEL0&
(~(3ul<
<
6));
PINSEL2=PINSEL2&
(~(13ul<
3));
14));
IO0DIR=IO0DIR|(1ul<
3);
IO1DIR=IO0DIR|(1ul<
24);
25);
7);
IO0CLR=(1ul<
IO0SET=(1ul<
while
(1)
{
}
}
第二阶段UART的使用
1、掌握LPC21XX系列处理器UART的使用方法
2、掌握串口调试助手的使用
使用串口调试助手控制LED的亮和灭,当收到0时,熄灭LED,否则点亮
四、LPC21XX的UART的使用
LPC21XX的UART使用的主要步骤如图2所示。
其中前四步叫做初始化UART,一般放在一个初始化函数中完成。
图2
voidDelay(unsignedintt)
unsignedinti;
while(t--)
{
i=3000;
while(i--);
}
voidInitUART0(void)
{
PINSEL0=(PINSEL0&
0xfffffff0)|(0x01<
0)|(0x01<
2);
U0LCR=0x80;
U0DLM=0;
U0DLL=180;
U0LCR=0x03;
unsignedcharUART0_RcvByte(void)
unsignedcharrcv_data;
while((U0LSR&
0x01)==0);
rcv_data=U0RBR;
return(rcv_data);
InitUART0();
rcv_data=UART0_RcvByte()-'
0'
;
if(rcv_data==0)
{
IO0SET=1ul<
3;
IO0SET=1ul<
7;
IO1SET=1ul<
24;
25;
}
else
IO0CLR=1ul<
IO1CLR=1ul<
}
第三阶段中断系统的使用
1、理解LPC21XX系列处理器的中断系统
2、掌握中断的概念和LPC21XX中断系统的程序编写方法
使用中断的方法接收UART发送过来的数据,然后再控制LED的亮和灭,当收到0时,熄灭LED,否则点亮。
PC端使用的是串口调试助手。
四、中断的使用
中断使用流程步骤如图3所示。
图3
#include"
unsignedintGetsome;
voidInitUART0(void)
U0IER=U0IER&
0xfe|0x01;
voidInitVIC(void)
VICIntSelect=VICIntSelect&
(~(1ul<
VICVectCntl2=0x20|0x06;
VICVectAddr2=(unsignedint)UART0_RcvByte;
VICIntEnable=1<
0x06;
void__irqUART0_RcvByte(void)
unsignedcharIIR;
IIR=U0IIR;
if((IIR&
0x01)==0)
IIR=IIR&
0x0e;
if((IIR==0x04)||(IIR==0x0c))
{
while(U0LSR&
0x01)
{
Getsome=U0RBR;
if(Getsome=='
)
{
IO1SET=1ul<
IO0SET=1ul<
IO1SET=1ul<
IO0SET=1ul<
}
else
IO1CLR=1ul<
IO0CLR=1ul<
IO1CLR=1ul<
}
}
VICVectAddr=0;
LongDelay=1;
6))&
(~(7ul<
3)|(1ul<
PINSEL1=PINSEL1&
(~(24ul<
16))&
(~(25ul<
18));
IO1DIR=IO1DIR|(1ul<
24)|(1ul<
InitVIC();
while
(1);
第四阶段定时器的使用
1、理解LPC21XX系列处理器的定时器
2、掌握LPC21XX系列处理器的定时器的结构
1、使用查询的模式,用定时器控制LED实现1S周期的闪亮
2、使用中断的模式,用定时器控制LED实现0.5S周期的闪亮
普通PC、嵌入式系统实验板
四、定时器的使用
查询模式的定时器使用流程如图4所示,中断模式的定时器使用流程如图5所示。
图4
图5
查询模式:
T0PR=13823;
T0TCR=1<
1;
IO0CLR=1ul<
IO1CLR=1ul<
0;
while(T0TC<
1000);
IO0SET=1ul<
IO1SET=1ul<
中断的模式:
unsignedcharLEDState;
voidInitTimer0(void)
T0MCR=1<
6|1<
T0MR2=500;
T0TCR=1<
void__irqTimer0Match(void)
if(T0IR&
0x04)
T0IR=0x04;
if(LEDState==0)
IO0CLR=1ul<
LEDState=!
LEDState;
else
LEDState=0;
VICIntSelect=0x0;
VICVectCntl0=0x20|0x04;
VICVectAddr0=(unsignedint)Timer0Match;
VICIntEnable=1ul<
4;
MEMMAP=0x2;
LEDState=0;
InitTimer0();
第五阶段LED亮度的PC控制
1、掌握程序联合调试的能力
2、掌握定时器产生PMW信号的方法
3、掌握中断系统的复杂使用
对LED亮度分成10级显示,当接收到字符“0”时,亮度为最低,即熄灭,接收到字符“1”时,显示为1级亮度,当接收到“9”时,亮度最大。
各级亮度自行定义,能区分即可。
四、程序流程图
等待中断
图6
五、程序代码
Key.h"
unsignedcharir=T0IR;
if(ir&
0x02)
T0IR=1<
unsignedcharkeyin;
T0PR=1382;
T0MR1=1000;
T0MCR=1ul<
0|1ul<
1|1ul<
T0TCR=1ul<
4));
VICVectCntl6=0x20|0x04;
VICVectAddr6=(unsignedint)Timer0Match;
Key_Init();
keyin=Key();
switch(keyin)
case1:
T0MR1=875;
break;
case2:
T0MR1=750;
case3:
T0MR1=625;
case4:
T0MR1=500;
case5:
T0MR1=375;
case6:
T0MR1=250;
case7:
T0MR1=125;
case8:
T0MR1=0;
default:
break;
第六阶段LED亮度的自动控制
2、掌握LPC21XX系列AD的使用
3、掌握闭环系统的控制方法
使用一个光敏电阻做光传感器,当外界光亮度发生变化时,LED的亮度能随之发生相应的变化,以保持足够的对比度。
光越强,LED亮度越高,光越低,LED越暗。
等待定时器中断
图7
五、程序说明
该实训是通过光敏电阻来调节LED灯的亮度的,PLC通光敏电阻的电压的变化值来采集变化的数据的,当PLC得到电压的变化数据之后,通过判断数据的变化范围,来设置产生PWM的中断匹配值或通过一条对应公式直接改变产生PWM的中断匹配值。
这里更改匹配值的中断函数与之前做过的类似。
实训心得
在这次的实训中也遇到很多的困难,常常会因为这些那些小小的编程错误而使得程序无法照常运行,但是通过回忆以前做过的实验,并与其他同学交流,最终可以说还是解决了问题。
不过,正是因为这些困难的存在,让我发现了自己哪方面存在的知识比较薄弱,这利于以后有针对性地进行补充知识。