一、老师给的练习题目,基于 LPC2131 的一个小系统,带 6 个发光二极管。
源程序如下:
#include "config.h"
#define LEDSET (0xFF<<18)
void PortInit(void)
{
PINSEL2=PINSEL2&(~0x08);//
IO1DIR=LEDSET;
IO1CLR=LEDSET;
}
void DelayNS (uint32 dly)
{
uint32 i;
for ( ; dly>0; dly--)
for (i=0; i<50000; i++);
}
void LED(void)
{
uint32 led,index;
while(1)
{
led=0x01<<18;
for(index=0;index<6;index++)
{
IO1CLR=LEDSET;
IO1SET=led;
led<<=1;
DelayNS(20);
}
}
}
int main(void)
{
PortInit();
while(1)
{
LED();
}
}
PROTEUS7.12 上构建的电路图如下(图 1):
配置 P1.18~P1.23 作为 GPIO 方式是输出,高电平 5V。
运行结果:运行后六个发光二极管从左到右依次点亮。
图 1
二、基础设计中在 PROTEUS7.12 上构建基于 LPC2131 的最小系统,带 2 个发光二极管。
基于提供的 UC/OS-II 操作系统进行应用程序编写的程序如下:
#include "config.h"
#define TASK_STK_SIZE 512
OS_STK StartTaskStk[TASK_STK_SIZE];
OS_STK Led1TaskStk[TASK_STK_SIZE];
OS_STK Led2TaskStk[TASK_STK_SIZE];
void StartTask(void *data);
void Led1Task(void *data);
void Led2Task(void *data);
#define LEDSET (0xFF<<18)
INT32U LED1=0x01<<18;
INT32U LED2=0x01<<19;
int main()
{OSInit();
OSTaskCreate(StartTask,(void *)0,&StartTaskStk[TASK_STK_SIZE-1],0);
OSStart();
return 0;
}
void PortInit(void)
{
PINSEL2=PINSEL2&(~0x08);
IO1DIR=LEDSET;
IO1CLR=LEDSET;
}
void DelayNS (INT32U dly)
{
INT32U i;
for ( ; dly>0; dly--)
for (i=0; i<1000; i++);
}
void StartTask(void *pdata)
{
pdata=pdata;
TargetInit();
PortInit();
OSTaskCreate(Led1Task,(void *)0,&Led1TaskStk[TASK_STK_SIZE-1],1);
OSTaskCreate(Led2Task,(void *)0,&Led2TaskStk[TASK_STK_SIZE-1],2);
OSTimeDlyHMSM(0,0,3,0);
}
void Led1Task(void *pdata)
{
pdata=pdata;
for(;;)
{
IO1CLR=LEDSET;
IO1SET=LED1;
//DelayNS(200);
//IO1SET=~LED1;
OSTimeDlyHMSM(0,0,1,0);
}
}
void Led2Task(void *pdata)
{
pdata=pdata;
for(;;)
{
IO1CLR=LEDSET;
IO1SET=LED2;
//DelayNS(200);
//IO1SET=~LED2;
OSTimeDlyHMSM(0,0,2,0);
}
}
在 PROTEUS7.12 上构建的电路图如下(图 2):
用 P1 组脚作输出,配置 P1.18 和 P1.19 作为 GPIO 方式是输出。
实验结果:点击运行后,D1 先亮,明亮时间间隔是 1S,D2 接着亮,明亮间隔是 2S。
图 2
ADS1.2 代码配置示例:
ADS1.2 的调试说明
ADS 进行仿真前需要要进行配置,ALT+F7 调出配置界面
Post-linker 中选择 ARM fromELF
Language settings 中全部设置为 ARM7TDMI
设置程序入口地址