arm实验c语言代码 .pdf
《arm实验c语言代码 .pdf》由会员分享,可在线阅读,更多相关《arm实验c语言代码 .pdf(41页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、2.8_C 语言程序实验#define uint8 unsigned char#define uint32 unsigned int#define N 100 uint32 sum;/使用加法运算来计算1+2+3+.+(N-1)+N的值。(N0)void Main(void)uint32 i;sum=0;for(i=0;i0;dly-)for(i=0;i5000;i+);/*名称:main()*功能:控制蜂鸣器蜂鸣。*/int main(void)PINSEL0=0 x00000000;/设置管脚连接GPIO IO0DIR=BEEPCON;/设置 I/O 为输出while(1)IO0SET=B
2、EEPCON;/BEEPCON=1 DelayNS(15);IO0CLR=BEEPCON;/BEEPCON=0 DelayNS(15);return(0);2.11_GPIO 输出控制实验2/*文 件 名:main.c*功能:LED 显示控制。*通过 GPIO 直接控制8 个 LED 产生流水灯效果*说明:将跳线JP23全部短接,JP15跳线全部断开。*这个警告可忽略,C2892E:signed constant overflow*/#include config.h 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 41 页 -#define LED1 116/P2.16#def
3、ine LED2 117/P2.17#define LED3 118/P2.18#define LED4 119/P2.19#define LED5 120/P2.20#define LED6 121/P2.21#define LED7 122/P2.22#define LED8 10;dly-)for(i=0;i5000;i+);/*名称:main()*功能:根据表DISP_TAB 来控制 LED 显示。*/int main(void)uint8 i;/*PINSEL2 使用启动代码的默认配置,切勿任意配置PINSEL2,否则总线会受到干扰*/IO2DIR=LEDCON;/配置 LED 控制
4、 I/O 方向while(1)for(i=0;i8;i+)IO2CLR=DISP_TABi;/输出 LED 显示数据DelayNS(10);/延时名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 41 页 -IO2SET=0 xffffffff;return(0);2.12_GPIO 输入实验*文 件 名:main.c*功能:读取 I/O 引脚值,并输出控制蜂鸣器。*使用 I/O 口输入方式对P0.20 口进行扫描,对蜂鸣器控制。*说明:将跳线器JP9、JP22短接,JP20断开。按下KEY1 观察 BUZZER 效果。*/#include config.h#define BEEP
5、CON 17/P0.7 引脚控制B1,低电平蜂鸣#define KEY 120/定义按键/*名称:main()*功能:读取 P0.20 口的值,并输出控制蜂鸣器B1。*/int main(void)uint32 i;PINSEL0=0 x00000000;/设置管脚连接GPIO IO0DIR=BEEPCON;/设置 B1 控制口为输出,其它I/O 为输入while(1)if(IO0PIN&KEY)!=0)IO0SET=BEEPCON;else IO0CLR=BEEPCON;for(i=0;i1000;i+);return(0);2.13_存储器重映射实验/*文 件 名:main.c 名师资料总
6、结-精品资料欢迎下载-名师精心整理-第 4 页,共 41 页 -*功能:将存储器重映射到片内RAM(0 x40000000 0 x4000003F),然后更改*0 x400000000 x4000003F 的内容。*说明:观察 0 x00000000 0 x0000003F 地址上的数据有何变化*/#include config.h#define VECTOR_RAM(unsigned char*)0 x40000000)/*名称:main()*功能:存储器重映射。*/int main(void)uint8 i;uint8*addr;MEMMAP=0 x02;/中断向量从静态RAM 重映射(用
7、户 RAM 模式)addr=VECTOR_RAM;for(i=0;i64;i+)/用 0 x55 填充 0 x400000000 x4000003F *addr=0 x55;addr+;addr=VECTOR_RAM;for(i=0;i64;i+)/用 0 xAA 填充 0 x400000000 x4000003F *addr=0 xAA;addr+;MEMMAP=0 x00;/中断向量从Boot Block 重映射(Boot 装载程序模式)while(1);return(0);2.14_外部中断实验1/*文 件 名:main.c*功能:使用外部中断3 进行 B1 的控制,每当有一次中断时,即
8、取反B1 控制口,*使用非向量中断方式。*说明:将跳线器JP9、JP22短接,JP20断开。按下KEY1 观察 BUZZER 效果。名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 41 页 -*/#include config.h#define BEEPCON 17/P0.7 引脚控制B1,低电平蜂鸣,17 等价于0 x80/*名称:IRQ_Eint3()*功能:外部中断EINT3 服务函数,取反B1 控制口。*入口参数:无*出口参数:无*/void _irq IRQ_Eint3(void)uint32 i;i=IO0SET;/读取当前B1 控制值if(i&BEEPCON)=0)
9、/控制 B1 输出取反 IO0SET=BEEPCON;else IO0CLR=BEEPCON;/*等待外部中断信号恢复为高电平(若信号保持为低电平,中断标志会一直置位)*/while(EXTINT&13)!=0)EXTINT=13;/清除 EINT3 中断标志,13 等价于0 x08 VICVectAddr=0;/向量中断结束/*名称:main()*功能:初始化外部中断3(EINT3)为非向量中断,并设置为电平触发模式,然后等待外部中断。*说明:在 STARTUP.S 文件中使能IRQ 中断(清零 CPSR 中的 I 位)。*/int main(void)IRQEnable();/开 IRQ
10、中断名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 41 页 -PINSEL1=38;/设置管脚连接,P0.20设置为 EINT3 IO0DIR=BEEPCON;/设置 B1 控制口为输出,其它I/O 为输入/*打开 EINT3 中断(使用非向量IRQ)*/VICIntSelect=0 x00000000;/设置所有中断分配为IRQ 中断VICDefVectAddr=(int)IRQ_Eint3;/设置中断服务程序地址EXTMODE=0 x00;/设置 EINT3 中断为电平触发模式EXTINT=13;/清除 EINT3 中断标志VICIntEnable=117;/使能 EINT
11、3 中断,EINT3 在 Bit17 上while(1);/等待中断return(0);2.15_外部存储器接口实验1/*文 件 名:main.c*功能:对 SST39VF160 进行全片擦除,然后写两字节数据到芯片0 地址,再读出来校验,*若校验通过则蜂鸣器响一声,否则不断地蜂鸣报警。*说明:无。*/#include config.h#define BEEPCON 17/P0.7 引脚控制B1,低电平蜂鸣#define FLASH_ADDR 0 x80000000/FLASH 的起始地址(分配为 Bank1 块)/*转换地址。将要发送给SST39VF160 的地址值进行转换,以便于LPC22
12、10 输出。*/*由于 SST39VF160 的 A0 是与 LPC2210 的 A1 相连,所以addr 要左移 1 位。*/#define GetAddr(addr)(volatile uint16*)(FLASH_ADDR|(addr0;dly-)for(i=0;i5000;i+);名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 41 页 -/*名称:WordProgram()*功能:半字(16 位)数据编程。*入口参数:Addr 编程地址(SST39VF160 内部地址)*Data 编程数据*出口参数:返回TRUE 表示操作成功,返回FALSE 表示操作失败*/uint8
13、 WordProgram(uint32 Addr,uint16 Data)volatile uint16*ip;uint16 temp1,temp2;ip=GetAddr(0 x5555);/转换地址0 x5555 ip0=0 xaaaa;/第一个写周期,地址0 x5555,数据 0 xAA ip=GetAddr(0 x2aaa);ip0=0 x5555;/第二个写周期,地址0 x2aaa,数据 0 x55 ip=GetAddr(0 x5555);ip0=0 xa0a0;/第三个写周期,地址0 x5555,数据 0 xA0 ip=(volatile uint16*)(FLASH_ADDR|(A
14、ddr&0 x1FFFFF);*ip=Data;/第四个写周期,地址Addr,数据 Data while(1)/等待操作完成(若编程操作没有完成,每次读操作DQ6 会跳变)temp1=*ip;temp2=*ip;if(temp1=temp2)if(temp1!=Data)return(FALSE);else return(TRUE);return(TRUE);/*名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 41 页 -*名称:ChipErase()*功能:芯片全片擦除。*入口参数:无*出口参数:返回TRUE 表示操作成功,返回FALSE 表示操作失败*/uint8 ChipE
15、rase(void)volatile uint16*ip;uint16 temp1,temp2;ip=GetAddr(0 x5555);ip0=0 xaaaa;/第一个写周期,地址0 x5555,数据 0 xAA ip=GetAddr(0 x2aaa);ip0=0 x5555;/第二个写周期,地址0 x2aaa,数据 0 x55 ip=GetAddr(0 x5555);ip0=0 x8080;/第三个写周期,地址0 x5555,数据 0 x80 ip=GetAddr(0 x5555);ip0=0 xaaaa;/第四个写周期,地址0 x5555,数据 0 xAA ip=GetAddr(0 x2a
16、aa);ip0=0 x5555;/第五个写周期,地址0 x2aaa,数据 0 x55 ip=GetAddr(0 x5555);ip0=0 x1010;/第六个写周期,地址0 x5555,数据 0 x10 while(1)/等待操作完成(若擦除操作没有完成,每次读操作DQ6 会跳变)temp1=*ip;temp2=*ip;if(temp1=temp2)if(temp1!=0 xffff)return(FALSE);else return(TRUE);return(TRUE);/*名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 41 页 -*名称:main()*功能:SST39VF1
17、60 擦除、编程操作。*/int main(void)uint8 i;uint8 err=0;volatile uint16*addr;PINSEL0=0 x00000000;/设置管脚连接GPIO IO0DIR=BEEPCON;/设置 I/O 为输出ChipErase();/FLASH 全片擦除/校验是否真正擦除。若发现有非0 xFFFF 的存储单元,设置err=1 addr=(volatile uint16*)FLASH_ADDR+0;for(i=0;i100;i+)if(0 xFFFF!=(*addr)err=1;addr+;WordProgram(0 x0,0 x55AA);/向 FL
18、ASH 的 0 地址写入0 x55AA addr=(volatile uint16*)FLASH_ADDR+0;if(0 x55AA!=(*addr)err=1;/读出校验,若数据错误则设置err=1 if(0=err)IO0CLR=BEEPCON;/BEEPCON=0 DelayNS(20);IO0SET=BEEPCON;/BEEPCON=1 DelayNS(20);else while(1)IO0CLR=BEEPCON;/BEEPCON=0 DelayNS(10);IO0SET=BEEPCON;/BEEPCON=1 DelayNS(10);名师资料总结-精品资料欢迎下载-名师精心整理-第
19、10 页,共 41 页 -while(1);return(0);2.16_定时器实验1/*文 件 名:main.c*功能:使用定时器0 实现 1 秒定时,控制蜂鸣器蜂鸣。(查询方式)*说明:JP22 跳线短接,JP20 跳线断开。*/#include config.h#define BEEPCON 10;dly-)for(i=0;i5000;i+);名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 41 页 -/*名称:UART0_Ini()*功能:初始化串口0。设置为 8 位数据位,1 位停止位,无奇偶校验,波特率为 115200*入口参数:无*出口参数:无*/void UAR
20、T0_Init(void)uint16 Fdiv;U0LCR=0 x83;/DLAB=1,可设置波特率Fdiv=(Fpclk/16)/UART_BPS;/设置波特率U0DLM=Fdiv/256;U0DLL=Fdiv%256;U0LCR=0 x03;/*名称:UART0_SendByte()*功能:向串口发送字节数据,并等待发送完毕。*入口参数:data 要发送的数据*出口参数:无*/void UART0_SendByte(uint8 data)U0THR=data;/发送数据while(U0LSR&0 x40)=0);/等待数据发送完毕/*名称:UART0_SendStr()*功能:向串口发送
21、一字符串*入口参数:srt 要发送的字符串的指针*出口参数:无*/void UART0_SendStr(uint8 const*str)while(1)if(*str=0)break;UART0_SendByte(*str+);/发送数据 名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 41 页 -/*名称:main()*功能:向串口UART0 发送字符串 Hello World!*/int main(void)PINSEL0=0 x00000005;/设置 I/O 连接到 UART0 UART0_Init();while(1)UART0_SendStr(SEND_STRING
22、);DelayNS(10);return(0);2.18_I2C 接口实验1/*文 件 名:main.c*功能:使用硬件I2C 对 E2PROM 进行操作,利用中断方式操作。*说明:将跳线器JP22 短接,JP20 断开。*/#include config.h#define CAT1025 0 xA0/定义器件地址#define BEEPCON 1400000)fi2c=400000;PINSEL0=(PINSEL0&0 xFFFFFF0F)|0 x50;/设置 I2C 控制口有效I2SCLH=(Fpclk/fi2c+1)/2;/设置 I2C 时钟为 fi2c I2SCLL=(Fpclk/fi
23、2c)/2;I2CONCLR=0 x2C;I2CONSET=0 x40;/使能主 I2C 名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 41 页 -/*设置 I2C 中断允许*/VICIntSelect=0 x00000000;/设置所有通道为IRQ 中断VICVectCntl0=0 x29;/I2C 通道分配到IRQ slot 0,即优先级最高VICVectAddr0=(int)IRQ_I2C;/设置 I2C 中断向量地址VICIntEnable=0 x0200;/使能 I2C 中断/*名称:DelayNS()*功能:长软件延时*入口参数:dly 延时参数,值越大,延时越久
24、*出口参数:无*/void DelayNS(uint32 dly)uint32 i;for(;dly0;dly-)for(i=0;i50000;i+);/*名称:WrEepromErr()*功能:读写 EEPRM 出错蜂鸣报警。*入口参数:无*出口参数:无*/void WrEepromErr(void)while(1)IO0SET=BEEPCON;DelayNS(2);IO0CLR=BEEPCON;DelayNS(2);/*名称:main()*功能:向 E2PROM 写入 10 字节数据,然后读出判断是否正确写入。名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 41 页 -*说
25、明:在 CONFIG.H 文件中包含I2CINT.H。*/int main(void)uint8 i;uint8 data_buf30;IRQEnable();PINSEL0=0 x00000000;PINSEL1=0 x00000000;IO0DIR=BEEPCON;IO0SET=BEEPCON;I2C_Init(30000);/I2C 初始化for(i=0;i10;i+)data_bufi=i+0;ISendStr(CAT1025,0 x00,data_buf,10);/在 0 x00 地址处写入10 字节数据DelayNS(1);/等待写周期结束for(i=0;i10;i+)data_b
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- arm实验c语言代码 2022 arm 实验 语言 代码
限制150内