嵌入实验
实验一 VDD3.3XTAL162XTAL261P0.0/TxD0/PWM119P0.1/RxD0/PWM3/EINT021P0.2/SCL0/CAP0.022P0.3/SDA0/MAT0..0/EINT126P0.4/SCK0/CAP0.1/AD0.627P0.5/MISO0/MAT0.1/AD0.729P0.6/MOSI0/CAP0.2/AD1.030P0.7/SSEL0/PWM2/EINT231P0.8/TxD1/PWM4/AD1.133P0.9/RxD1/PWM6/EINT334P0.10/RTS1/CAP1.0/AD1.235P0.11/CTS1/CAP1.1/SCL137P0.12/DSR1/MAT1.0/AD1.338P0.13/DTR1/MAT1.1/AD1.439P0.14/DCD1/EINT1/SDA141P0.15/RI1/EINT2/AD1.545P0.16/EINT0/MAT0.2/CAP0.246P0.17/CAP1.2/SCK1/MAT1.247P0.18/CAP1.3/MISO1/MAT1.353P0.19/MAT1.2/MOSI1/CAP1.254P0.20/MAT1.3/SSEL1/EINT355P0.21/PWM5/AD1.6/CAP1.31P0.22/AD1.7/CAP0.0/MAT0.02P0.2358P0.25/AD0.4/AOUT9P0.27/AD0.0/CAP0.1/MAT0.111P0.28/AD0.1/CAP0.2/MAT0.213P0.29/AD0.2/CAP0.3/MAT0.314P0.30/AD0.3/EINT3/CAP0.015V323RST57VREF63VSS6VSSA59P1.16/TRACEPKT016P1.17/TRACEPKT112P1.18/TRACEPKT28P1.19/TRACEPKT34P1.20/TRACESYNC48P1.21/PIPESTAT044P1.22/PIPESTAT140P1.23/PIPESTAT236P1.24/TRACECLK32P1.25/EXTIN028P1.26/RTCK24P1.27/TDO64P1.28/TDI60P1.29/TCK56P1.30/TMS52P1.31/TRST20V343V351VSS18VSS25VSS42VSS50RTXC13RTXC25V3A7VBAT49P0.3117P0.26/AD0.510U1LPC2138R1220R2220R3220R4220D1D2D3D4v3.3R5220R6220D5D6 int main(void){ TargetResetInit();PINSEL0 = 0x0000;PINSEL1 = 0x0000;IO0DIR = 0xfffff;//方向控制 IO1DIR = 0xfffff;
for(int i=0;i<100;i++){ if(i%2==0){ IO0SET =0x14924;//输出置位(灯灭)DelayNS(600);//延迟 } else { IO0CLR =0x14924;//输出清零(灯亮)DelayNS(600);//延迟 } } } 实验二
VDD3.3XTAL162XTAL261P0.0/TxD0/PWM119P0.1/RxD0/PWM3/EINT021P0.2/SCL0/CAP0.022P0.3/SDA0/MAT0..0/EINT126P0.4/SCK0/CAP0.1/AD0.627P0.5/MISO0/MAT0.1/AD0.729P0.6/MOSI0/CAP0.2/AD1.030P0.7/SSEL0/PWM2/EINT231P0.8/TxD1/PWM4/AD1.133P0.9/RxD1/PWM6/EINT334P0.10/RTS1/CAP1.0/AD1.235P0.11/CTS1/CAP1.1/SCL137P0.12/DSR1/MAT1.0/AD1.338P0.13/DTR1/MAT1.1/AD1.439P0.14/DCD1/EINT1/SDA141P0.15/RI1/EINT2/AD1.545P0.16/EINT0/MAT0.2/CAP0.246P0.17/CAP1.2/SCK1/MAT1.247P0.18/CAP1.3/MISO1/MAT1.353P0.19/MAT1.2/MOSI1/CAP1.254P0.20/MAT1.3/SSEL1/EINT355P0.21/PWM5/AD1.6/CAP1.31P0.22/AD1.7/CAP0.0/MAT0.02P0.2358P0.25/AD0.4/AOUT9P0.27/AD0.0/CAP0.1/MAT0.111P0.28/AD0.1/CAP0.2/MAT0.213P0.29/AD0.2/CAP0.3/MAT0.314P0.30/AD0.3/EINT3/CAP0.015V323RST57VREF63VSS6VSSA59P1.16/TRACEPKT016P1.17/TRACEPKT112P1.18/TRACEPKT28P1.19/TRACEPKT34P1.20/TRACESYNC48P1.21/PIPESTAT044P1.22/PIPESTAT140P1.23/PIPESTAT236P1.24/TRACECLK32P1.25/EXTIN028P1.26/RTCK24P1.27/TDO64P1.28/TDI60P1.29/TCK56P1.30/TMS52P1.31/TRST20V343V351VSS18VSS25VSS42VSS50RTXC13RTXC25V3A7VBAT49P0.3117P0.26/AD0.510U1LPC2138R847D8LED-GREENKEY1R1610kVDD3.3 /****************************************************************************-ETNT3_KEY.C ****************************************************************************/ #include "..SRCConfig.h" #include "Target.h" #include
#define LED1(1<<0)#define BEEP(1<<0)/* ********************************************************************************************************* ** 函数名称:IRQ_Timer0()** 函数功能:Timer0 中断服务函数,取反 LED1 控制口。
** 入口参数:无 ** 出口参数:无 ********************************************************************************************************* */ void IRQ_Timer0(void){ uint32 i;i = IO0SET;// 读取当前 LED1 控制值 if((i & LED1)== 0)// 控制 LED1 输出 { IO0SET = LED1;} else { IO0CLR = LED1;} while((T0IR & 0x01)!=0)// 等待外部中断信号恢复为高电平{ T0IR = 0x01;// 清除 EINT0 中断标志 } VICVectAddr = 0x00;// 清除中断逻辑,以便 VIC 可以响应更高优先级 IRQ中断 } /* ********************************************************************************************************* ** 函数名称:IRQ_Eint0()** 函数功能:外部中断 EINT0 服务函数,取反 BEEP,允许中断嵌套。
** 入口参数:无 ** 出口参数:无 ********************************************************************************************************* */ void IRQ_Eint2(void)
{ uint32 i;i = IO0SET;// 读取当前 BEEP 控制值 if((i & BEEP)== 0)// 控制 BEEP 输出 { IO0SET = BEEP;} else { IO0CLR = BEEP;} while((EXTINT & 0x08)!= 0)// 等待外部中断信号恢复为高电平 { EXTINT = 0x04;// 清除 EINT0 中断标志 } VICVectAddr = 0x00;} /* ********************************************************************************************************* ** 函数名称:main()** 函数功能:初始化定时器 0,设置定时器 0 中断和外部中断 0。
** 使用说明:开机按住 ********************************************************************************************************* */ int main(void){ TargetResetInit();// 定时器设置为 0 PINSEL0 = 0x80000000;IO0DIR = 0x00000001;IO0SET = 0x00000001;//IO0CLR = BEEP;// T0TC = 0;// T0PR = 0;// 时钟不分频 //T0MCR = 0x03;// 设置 T0MR0 匹配后复位 T0TC,并产生中断标志 //T0MR0 = Fpclk/10;// 0.1 秒定时 //T0TCR = 0x01;// 启动定时器 // while(1);
__enable_irq();// 使能 IRQ 中断 /* 打开 Timer0、EINT0 中断(设置向量控制器,即使用向量 IRQ)*/ VICIntSelect = 0x00000000;// 设置所有中断分配为 IRQ 中断 //VICVectCntl0 = 0x20 | 4;// 分配 Timer0 中断到向量中断 0 //VICVectAddr0 =(uint32)IRQ_Timer0;// 设置中断服务程序地址 VICVectCntl0 = 0x20 | 16;// 分配 EINT0 中断到向量中断 1 VICVectAddr0 =(uint32)IRQ_Eint2;// 设置中断服务程序地址 //T0IR = 0x01;// 清除 Timer0 EXTINT = 0x04;// 清除 EINT0 中断标志 EXTMODE = 0X04;EXTPOLAR = 0X04;// VICIntEnable =(1 << 4);VICIntEnable =(1 << 16);// 使能 Timer0、EINT0 中断 // VICIntEnable =(1 << 4)|(1 << 14);// 使能 Timer0、EINT0 中断 while(1);// 等待中断 } 上课例子 /****************************************************************************-ETNT3_KEY.C ****************************************************************************/ #include "..SRCConfig.h" #include "Target.h" #include
** 入口参数:无 ** 出口参数:无 ********************************************************************************************************* */
void IRQ_Timer0(void){ uint32 i;i = IO0SET;// 读取当前 LED1 控制值 if((i & LED1)== 0)// 控制 LED1 输出 { IO0SET = LED1;} else { IO0CLR = LED1;} while((T0IR & 0x01)!=0)// 等待外部中断信号恢复为高电平{ T0IR = 0x01;// 清除 EINT0 中断标志 } VICVectAddr = 0x00;// 清除中断逻辑,以便 VIC 可以响应更高优先级 IRQ中断 } /* ********************************************************************************************************* ** 函数名称:IRQ_Eint0()** 函数功能:外部中断 EINT0 服务函数,取反 BEEP,允许中断嵌套。
** 入口参数:无 ** 出口参数:无 ********************************************************************************************************* */ void IRQ_Eint3(void){ uint32 i;i = IO0SET;// 读取当前 BEEP 控制值 if((i & BEEP)== 0)// 控制 BEEP 输出 { IO0SET = BEEP;} else { IO0CLR = BEEP;}
while((EXTINT & 0x08)!= 0)// 等待外部中断信号恢复为高电平 { EXTINT = 0x08;// 清除 EINT0 中断标志 } VICVectAddr = 0x00;} /* ********************************************************************************************************* ** 函数名称:main()** 函数功能:初始化定时器 0,设置定时器 0 中断和外部中断 0。
** 使用说明:开机按住 ********************************************************************************************************* */ int main(void){ // 定时器设置为 0 PINSEL0 = 0x00000000;PINSEL1 =0x00000300;IO0DIR = 1<<7;__enable_irq();// 使能 IRQ 中断 VICIntSelect = 0x00000000;// 设置所有中断分配为 IRQ 中断 VICVectCntl0 = 0x20 | 17;// 分配 EINT0 中断到向量中断 1 VICVectAddr0 =(uint32)IRQ_Eint3;// 设置中断服务程序地址 EXTINT = 0x08;// 清除 EINT0 中断标志 VICIntEnable =(1 << 17);// 使能 Timer0、EINT0 中断 while(1);// 等待中断 } 实验三、试验三 定时器试验 目的:1,掌握定时器 T0/T1 的原理与用法 2,掌握芯片管脚功能的用法 内容:利用定时器原理来定时,定时器设定为每秒钟发出一个中断,每个中断来控制 led 灯的亮或息。
电路图如下:
VDD3.3XTAL162XTAL261P0.0/TxD0/PWM119P0.1/RxD0/PWM3/EINT021P0.2/SCL0/CAP0.022P0.3/SDA0/MAT0..0/EINT126P0.4/SCK0/CAP0.1/AD0.627P0.5/MISO0/MAT0.1/AD0.729P0.6/MOSI0/CAP0.2/AD1.030P0.7/SSEL0/PWM2/EINT231P0.8/TxD1/PWM4/AD1.133P0.9/RxD1/PWM6/EINT334P0.10/RTS1/CAP1.0/AD1.235P0.11/CTS1/CAP1.1/SCL137P0.12/DSR1/MAT1.0/AD1.338P0.13/DTR1/MAT1.1/AD1.439P0.14/DCD1/EINT1/SDA141P0.15/RI1/EINT2/AD1.545P0.16/EINT0/MAT0.2/CAP0.246P0.17/CAP1.2/SCK1/MAT1.247P0.18/CAP1.3/MISO1/MAT1.353P0.19/MAT1.2/MOSI1/CAP1.254P0.20/MAT1.3/SSEL1/EINT355P0.21/PWM5/AD1.6/CAP1.31P0.22/AD1.7/CAP0.0/MAT0.02P0.2358P0.25/AD0.4/AOUT9P0.27/AD0.0/CAP0.1/MAT0.111P0.28/AD0.1/CAP0.2/MAT0.213P0.29/AD0.2/CAP0.3/MAT0.314P0.30/AD0.3/EINT3/CAP0.015V323RST57VREF63VSS6VSSA59P1.16/TRACEPKT016P1.17/TRACEPKT112P1.18/TRACEPKT28P1.19/TRACEPKT34P1.20/TRACESYNC48P1.21/PIPESTAT044P1.22/PIPESTAT140P1.23/PIPESTAT236P1.24/TRACECLK32P1.25/EXTIN028P1.26/RTCK24P1.27/TDO64P1.28/TDI60P1.29/TCK56P1.30/TMS52P1.31/TRST20V343V351VSS18VSS25VSS42VSS50RTXC13RTXC25V3A7VBAT49P0.3117P0.26/AD0.510U1LPC2138R847D8LED-GREEN /****************************************************************************-ETNT3_KEY.C ****************************************************************************/ #include "Config.h" #include "Target.h" #include
** 入口参数:无 ** 出口参数:无 *******************************************************************************
************************** */ void IRQ_Timer0(void){ uint32 i;i = IO0SET;// 读取当前 LED1 控制值 if((i & LED1)== 0)// 控制 LED1 输出 { IO0SET = LED1;} else { IO0CLR = LED1;} while((T0IR & 0x01)!=0)// 等待外部中断信号恢复为高电平{ T0IR = 0x01;// 清除 EINT0 中断标志 } VICVectAddr = 0x00;// 清除中断逻辑,以便 VIC 可以响应更高优先级 IRQ中断 } /********************************************************************************************************* ** 函数名称:main()** 函数功能:初始化定时器 0,设置定时器 0 中断和外部中断 0。
** 使用说明:开机按住 ********************************************************************************************************* */ int main(void){ PINSEL0 = 0x00000000;IO0DIR = 0xfffff;IO0CLR = 0xfffff;T0TC = 0;T0PR = 0;// 时钟不分频 T0MCR = 0x03;// 设置 T0MR0 匹配后复位 T0TC,并产生中断标志 T0MR0 = 2000000;// 0.1 秒定时 T0TCR = 0x01;// 启动定时器 __enable_irq();// 使能 IRQ 中断
/* 打开 Timer0、EINT0 中断(设置向量控制器,即使用向量 IRQ)*/ VICVectCntl0 = 0x20 | 4;// 分配 Timer0 中断到向量中断 0 VICVectAddr0 =(uint32)IRQ_Timer0;// 设置中断服务程序地址 VICIntEnable =(1 << 4);while(1);// 等待中断 } 实验四 #include "config.h" #define LEDCON 0x000000fc /**************************************************************************** * 名 称:WdtFeed()* 功 能:看门狗喂狗操作。
* 入口参数:无 * 出口参数:无 ****************************************************************************/ void WdtFeed(void)//喂狗 { WDFEED = 0xAA;WDFEED = 0x55;} /**************************************************************************** * 名 称:DelayNS()* 功 能:长软件延时,具有喂狗功能。
* 入口参数:dly 延时参数,值越大,延时越久 * 出口参数:无 ****************************************************************************/ void DelayNS(uint32 dly)//延迟 {
uint32 i;for(;dly>0;dly--){ for(i=0;i<1000;i++)WdtFeed();} } /****************************************************************************-main.c ****************************************************************************/ int main(void){ uint8 i;IO0DIR = LEDCON;WDTC = 11059200;//看门狗定时器常数寄存器 // 设置 WDTC,喂狗重装值 WDMOD = 0x03;//看门狗模式寄存器 // 复位并启动 WDT WdtFeed();//喂狗 // 进行喂狗操作 for(i=0;i<8;i++){ IO0SET = 0XFC;switch(i){ case 1: IO0SET = 0x0000004;DelayNS(100);IO0CLR = 0x00000004;DelayNS(100);break;
case 2: IO0SET = 0x00000008;DelayNS(100);IO0CLR = 0x00000008;DelayNS(100);break;case 3: IO0SET = 0x00000010;DelayNS(100);IO0CLR = 0x00000010;DelayNS(100);break;case 4: IO0SET = 0x00000020;DelayNS(100);IO0CLR = 0x00000020;DelayNS(100);break;case 5: IO0SET = 0x00000040;DelayNS(100);IO0CLR = 0x00000040;DelayNS(100);break;case 6: IO0SET = 0x00000080;DelayNS(100);IO0CLR = 0x00000080;DelayNS(100);break;}
} IO0SET = 0x000000fc;IO0CLR = 0x000000fc;while(1);VDD3.3XTAL162XTAL261P0.0/TxD0/PWM119P0.1/RxD0/PWM3/EINT021P0.2/SCL0/CAP0.022P0.3/SDA0/MAT0..0/EINT126P0.4/SCK0/CAP0.1/AD0.627P0.5/MISO0/MAT0.1/AD0.729P0.6/MOSI0/CAP0.2/AD1.030P0.7/SSEL0/PWM2/EINT231P0.8/TxD1/PWM4/AD1.133P0.9/RxD1/PWM6/EINT334P0.10/RTS1/CAP1.0/AD1.235P0.11/CTS1/CAP1.1/SCL137P0.12/DSR1/MAT1.0/AD1.338P0.13/DTR1/MAT1.1/AD1.439P0.14/DCD1/EINT1/SDA141P0.15/RI1/EINT2/AD1.545P0.16/EINT0/MAT0.2/CAP0.246P0.17/CAP1.2/SCK1/MAT1.247P0.18/CAP1.3/MISO1/MAT1.353P0.19/MAT1.2/MOSI1/CAP1.254P0.20/MAT1.3/SSEL1/EINT355P0.21/PWM5/AD1.6/CAP1.31P0.22/AD1.7/CAP0.0/MAT0.02P0.2358P0.25/AD0.4/AOUT9P0.27/AD0.0/CAP0.1/MAT0.111P0.28/AD0.1/CAP0.2/MAT0.213P0.29/AD0.2/CAP0.3/MAT0.314P0.30/AD0.3/EINT3/CAP0.015V323RST57VREF63VSS6VSSA59P1.16/TRACEPKT016P1.17/TRACEPKT112P1.18/TRACEPKT28P1.19/TRACEPKT34P1.20/TRACESYNC48P1.21/PIPESTAT044P1.22/PIPESTAT140P1.23/PIPESTAT236P1.24/TRACECLK32P1.25/EXTIN028P1.26/RTCK24P1.27/TDO64P1.28/TDI60P1.29/TCK56P1.30/TMS52P1.31/TRST20V343V351VSS18VSS25VSS42VSS50RTXC13RTXC25V3A7VBAT49P0.3117P0.26/AD0.510U1LPC2138R3220R4220R5220R6220R7220R8220D3D4D5D6D7D8v3.3 } VDD3.3XTAL162XTAL261P0.0/TxD0/PWM119P0.1/RxD0/PWM3/EINT021P0.2/SCL0/CAP0.022P0.3/SDA0/MAT0..0/EINT126P0.4/SCK0/CAP0.1/AD0.627P0.5/MISO0/MAT0.1/AD0.729P0.6/MOSI0/CAP0.2/AD1.030P0.7/SSEL0/PWM2/EINT231P0.8/TxD1/PWM4/AD1.133P0.9/RxD1/PWM6/EINT334P0.10/RTS1/CAP1.0/AD1.235P0.11/CTS1/CAP1.1/SCL137P0.12/DSR1/MAT1.0/AD1.338P0.13/DTR1/MAT1.1/AD1.439P0.14/DCD1/EINT1/SDA141P0.15/RI1/EINT2/AD1.545P0.16/EINT0/MAT0.2/CAP0.246P0.17/CAP1.2/SCK1/MAT1.247P0.18/CAP1.3/MISO1/MAT1.353P0.19/MAT1.2/MOSI1/CAP1.254P0.20/MAT1.3/SSEL1/EINT355P0.21/PWM5/AD1.6/CAP1.31P0.22/AD1.7/CAP0.0/MAT0.02P0.2358P0.25/AD0.4/AOUT9P0.27/AD0.0/CAP0.1/MAT0.111P0.28/AD0.1/CAP0.2/MAT0.213P0.29/AD0.2/CAP0.3/MAT0.314P0.30/AD0.3/EINT3/CAP0.015V323RST57VREF63VSS6VSSA59P1.16/TRACEPKT016P1.17/TRACEPKT112P1.18/TRACEPKT28P1.19/TRACEPKT34P1.20/TRACESYNC48P1.21/PIPESTAT044P1.22/PIPESTAT140P1.23/PIPESTAT236P1.24/TRACECLK32P1.25/EXTIN028P1.26/RTCK24P1.27/TDO64P1.28/TDI60P1.29/TCK56P1.30/TMS52P1.31/TRST20V343V351VSS18VSS25VSS42VSS50RTXC13RTXC25V3A7VBAT49P0.3117P0.26/AD0.510U1LPC2138R3220R4220R5220R6220R7220R8220D3D4D5D6D7D8v3.3 VDD3.3XTAL162XTAL261P0.0/TxD0/PWM119P0.1/RxD0/PWM3/EINT021P0.2/SCL0/CAP0.022P0.3/SDA0/MAT0..0/EINT126P0.4/SCK0/CAP0.1/AD0.627P0.5/MISO0/MAT0.1/AD0.729P0.6/MOSI0/CAP0.2/AD1.030P0.7/SSEL0/PWM2/EINT231P0.8/TxD1/PWM4/AD1.133P0.9/RxD1/PWM6/EINT334P0.10/RTS1/CAP1.0/AD1.235P0.11/CTS1/CAP1.1/SCL137P0.12/DSR1/MAT1.0/AD1.338P0.13/DTR1/MAT1.1/AD1.439P0.14/DCD1/EINT1/SDA141P0.15/RI1/EINT2/AD1.545P0.16/EINT0/MAT0.2/CAP0.246P0.17/CAP1.2/SCK1/MAT1.247P0.18/CAP1.3/MISO1/MAT1.353P0.19/MAT1.2/MOSI1/CAP1.254P0.20/MAT1.3/SSEL1/EINT355P0.21/PWM5/AD1.6/CAP1.31P0.22/AD1.7/CAP0.0/MAT0.02P0.2358P0.25/AD0.4/AOUT9P0.27/AD0.0/CAP0.1/MAT0.111P0.28/AD0.1/CAP0.2/MAT0.213P0.29/AD0.2/CAP0.3/MAT0.314P0.30/AD0.3/EINT3/CAP0.015V323RST57VREF63VSS6VSSA59P1.16/TRACEPKT016P1.17/TRACEPKT112P1.18/TRACEPKT28P1.19/TRACEPKT34P1.20/TRACESYNC48P1.21/PIPESTAT044P1.22/PIPESTAT140P1.23/PIPESTAT236P1.24/TRACECLK32P1.25/EXTIN028P1.26/RTCK24P1.27/TDO64P1.28/TDI60P1.29/TCK56P1.30/TMS52P1.31/TRST20V343V351VSS18VSS25VSS42VSS50RTXC13RTXC25V3A7VBAT49P0.3117P0.26/AD0.510U1LPC2138R3220R4220R5220R6220R7220R8220D3D4D5D6D7D8v3.3
