1、但是,仅通过写IOxSET 或IOxCLR 寄存器是不可能使一个GPIO 口同时输出包含0 和1 的二进制数。 图1五、程序代码#includeincludes.hint main(void) PINSEL0 = PINSEL0 & (3ul6); PINSEL2 = PINSEL2 & (13ul3);14); IO0DIR = IO0DIR | (1ul3); IO1DIR = IO0DIR | (1ul24);25);7); IO0CLR = (1ul IO0SET = (1ul while(1) 第二阶段 UART的使用1、掌握LPC21XX系列处理器UART的使用方法2、掌握串口调试
2、助手的使用使用串口调试助手控制LED的亮和灭,当收到0时,熄灭LED,否则点亮四、LPC21XX的UART的使用LPC21XX的UART使用的主要步骤如图2所示。其中前四步叫做初始化UART,一般放在一个初始化函数中完成。 图2void Delay(unsigned int t) unsigned int i; while(t-) i=3000;while(i-); void InitUART0(void) PINSEL0 = (PINSEL0 & 0xfffffff0)| (0x010) | (0x012); U0LCR = 0x80; U0DLM = 0; U0DLL = 180; U0L
3、CR = 0x03;unsigned char UART0_RcvByte(void) unsigned char rcv_data; while(U0LSR & 0x01) = 0); rcv_data = U0RBR; return(rcv_data); InitUART0(); rcv_data = UART0_RcvByte()-0; if(rcv_data=0) IO0SET =1ul3;IO0SET =1ul7;IO1SET =1ul24;25; elseIO0CLR =1ulIO1CLR =1ul 第三阶段 中断系统的使用1、理解LPC21XX系列处理器的中断系统2、掌握中断的概
4、念和LPC21XX中断系统的程序编写方法使用中断的方法接收UART发送过来的数据,然后再控制LED的亮和灭,当收到0时,熄灭LED,否则点亮。PC端使用的是串口调试助手。四、中断的使用中断使用流程步骤如图3所示。图3 #include unsigned int Getsome;void InitUART0(void) U0IER = U0IER & 0xfe | 0x01;void InitVIC(void) VICIntSelect = VICIntSelect & (1ul VICVectCntl2 = 0x20 | 0x06; VICVectAddr2 = (unsigned int)U
5、ART0_RcvByte; VICIntEnable = 10x06;void _irq UART0_RcvByte(void) unsigned char IIR; IIR = U0IIR; if(IIR&0x01)=0) IIR = IIR & 0x0e; if(IIR=0x04)|(IIR=0x0c) while(U0LSR & 0x01) Getsome = U0RBR; if(Getsome=) IO1SET = 1ul IO0SET = 1ulIO1SET = 1ulIO0SET = 1ul else IO1CLR = 1ulIO0CLR = 1ulIO1CLR = 1ul VIC
6、VectAddr = 0; LongDelay = 1;6) & (7ul3) | (1ul PINSEL1 = PINSEL1 & (24ul16) & (25ul18); IO1DIR = IO1DIR | (1ul24) | (1ul InitVIC(); while(1); 第四阶段 定时器的使用1、理解LPC21XX系列处理器的定时器2、掌握LPC21XX系列处理器的定时器的结构1、使用查询的模式,用定时器控制LED实现1S周期的闪亮2、使用中断的模式,用定时器控制LED实现0.5S周期的闪亮普通PC 、嵌入式系统实验板四、定时器的使用查询模式的定时器使用流程如图4所示,中断模式的定
7、时器使用流程如图5所示。 图4图5查询模式: T0PR = 13823; T0TCR = 11; IO0CLR = 1ul IO1CLR = 1ul0; while(T0TC1000); IO0SET = 1ul IO1SET = 1ul中断的模式:unsigned char LEDState;void InitTimer0(void) T0MCR = 16 | 1 T0MR2 = 500; T0TCR = 1void _irq Timer0Match(void) if(T0IR & 0x04) T0IR = 0x04; if(LEDState=0) IO0CLR = 1ul LEDState
8、 = !LEDState;else LEDState = 0; VICIntSelect = 0x0; VICVectCntl0 = 0x20 | 0x04; VICVectAddr0 = (unsigned int)Timer0Match; VICIntEnable = 1ul4; MEMMAP = 0x2; LEDState = 0; InitTimer0(); 第五阶段 LED亮度的PC控制1、掌握程序联合调试的能力2、掌握定时器产生PMW信号的方法3、掌握中断系统的复杂使用对LED亮度分成10级显示,当接收到字符“0”时,亮度为最低,即熄灭,接收到字符“1”时,显示为1级亮度,当接收到
9、“9”时,亮度最大。各级亮度自行定义,能区分即可。四、程序流程图等待中断 图6五、程序代码 Key.h unsigned char ir = T0IR; if(ir&0x02) T0IR = 1 unsigned char keyin; T0PR = 1382; T0MR1 = 1000; T0MCR = 1ul0 | 1ul1 | 1ul T0TCR = 1ul4); VICVectCntl6 = 0x20 | 0x04; VICVectAddr6 = (unsigned int)Timer0Match; Key_Init(); keyin = Key(); switch(keyin) ca
10、se 1:T0MR1=875; break; case 2:T0MR1=750; case 3:T0MR1=625; case 4:T0MR1=500; case 5:T0MR1=375; case 6:T0MR1=250; case 7:T0MR1=125; case 8:T0MR1=0; default:break;第六阶段 LED亮度的自动控制2、掌握LPC21XX系列AD的使用3、掌握闭环系统的控制方法使用一个光敏电阻做光传感器,当外界光亮度发生变化时,LED的亮度能随之发生相应的变化,以保持足够的对比度。光越强,LED亮度越高,光越低,LED越暗。等待定时器中断图7五、程序说明该实训是通过光敏电阻来调节LED灯的亮度的,PLC通光敏电阻的电压的变化值来采集变化的数据的,当PLC得到电压的变化数据之后,通过判断数据的变化范围,来设置产生PWM的中断匹配值或通过一条对应公式直接改变产生PWM的中断匹配值。这里更改匹配值的中断函数与之前做过的类似。实训心得在这次的实训中也遇到很多的困难,常常会因为这些那些小小的编程错误而使得程序无法照常运行,但是通过回忆以前做过的实验,并与其他同学交流,最终可以说还是解决了问题。不过,正是因为这些困难的存在,让我发现了自己哪方面存在的知识比较薄弱,这利于以后有针对性地进行补充知识。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1