高分悬赏:LPC1114实现ADC转换的详细教程及程序,详解

高分悬赏:LPC1114实现ADC转换的详细教程及程序,详解,第1张

#define ADCFrequency 1000000 / 转换时钟1MHz /

void ADCInit( void )//初始化

{

LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 16); / 允许I/O配置模块的时钟 /

LPC_IOCON->PIO1_10 &= ~0xBF; / 配置PIO1_10为模拟输入模式 /

LPC_IOCON->PIO1_10 |= 0x01; / PIO1_10模拟输入通道6 /

LPC_IOCON->PIO1_11 &= ~0xBF; / 配置PIO1_1 为模拟输入模式 /

LPC_IOCON->PIO1_11 |= 0x01; / PIO1_1 模拟输入通道7 /

LPC_SYSCON->PDRUNCFG &= ~(0x01 << 4); / ADC模块上电 /

LPC_SYSCON->SYSAHBCLKCTRL |= (0x01 << 13); / 使能ADC模块时钟 /

LPC_ADC->CR = ( 0x01 << 6 ) | / SEL=6,选择ADC6 /

( 0x01 << 7 ) | / SEL=7,选择ADC7 /

(( SystemFrequency / ADCFrequency - 1 ) << 8 ) | / 转换时钟1MHz /

( 1 << 16 ) | / BURST=1,使用Burst模式 /

( 0 << 17 ) | / 使用11 clocks转换 /

( 0 << 24 ) | / ADC转换停止 /

( 0 << 27 ); / 直接启动ADC转换,此位无效 /

NVIC_EnableIRQ(ADC_IRQn); / 使能ADC中断,并配置优先级 /

NVIC_SetPriority(ADC_IRQn, 2);

LPC_ADC->INTEN = (1 << 6); / 通道6 中断使能 /

LPC_ADC->INTEN = (1 << 7); / 通道7 中断使能 /

}

void ADC_IRQHandler(void)//中断过程

{

bAdcFlag = 1;

Channel_1 = ( (LPC_ADC->DR[6]) >> 6) & 0x3FF;/ Channel_1 读取通道6的值/

Channel_2 = ( (LPC_ADC->DR[7]) >> 6) & 0x3FF;/ Channel_2 读取通道7的值/

}

INT16U sTreatmentADC(INT16U wAdcChannel)//处理过程

{

if(bAdcFlag == 1){

bAdcFlag = 0; / 清零标志/

}

分类: 电脑/网络 >> 程序设计 >> 其他编程语言

问题描述:

int ask_over()

{

object me,mon;

int bonus,exp,pot,tempp,kar;

me = this_player();

kar = me->query("kar");

if (!me->query_temp("fengyaoover")) {

message_vision("平一指惊讶的对$N说道:“哦! 你再开什么玩笑,我这不是养老院。”\n",me);

return 1;

}

me->delete_temp("fengyaoover");

if (me->query_temp("fengyaow")) {

if(random(kar)>=11)

{

message_vision("平一指哼了一声,对$N说:“你是怎么搞的,乱分药,是想砸我的招牌吗?\n 看在你还努力的份上还是赏你点钱吧。”\n",me);

exp = 10 + random(20);

mon = new("/clone/money/silver");

mon->set_amount(exp);

tell_object(me,HIW"平一指给了你" + chinese_number(exp) + "两白银。 \n"NOR);

mon->move(me);

me->delete_temp("fengyaow");

return 1;

}

message_vision(" 平一指哼了一声,对$N说:你是怎么搞的,乱分药,是想砸我的招牌吗?\n",me);

return 1;

}

message_vision("平一指笑着对$N说:“小兄弟还不错嘛,可以可以,这是你应该得的。”\n",me);

exp = 10 + random(80);

pot = 10 + random(50);

bonus = (int) me->query("bat_exp");

tempp = bonus;

bonus += exp;

me->set("bat_exp", bonus);

bonus = (int) me->query("potential");

bonus += pot;

me->set("potential", bonus);

mon = new("/clone/money/silver");

mon->set_amount(exp);

mon->move(me);

me->start_busy(3);

tell_object(me,"你被奖励了:"HIR + chinese_number(exp) + NOR"点经验,"HIR+ chinese_number(pot) + NOR"点潜能和"HIW+chinese_number(exp) + NOR"两白银。 \n");

bonus=(int) me->query("potential");

return 1;

}

问一下,是不是表示如果far大于等于11的话会出现下面两行文字

平一指哼了一声,对$N说:“你是怎么搞的,乱分药,是想砸我的招牌吗?\n 看在你还努力的份上还是赏你点钱吧

如果far小于11的话 就只出现一行文字 不会出现上面的两行

平一指哼了一声,对$N说:“你是怎么搞的,乱分药,是想砸我的招牌吗?

不会出现上面的两行?

解析:

基本正确,但是注意判断条件中调用的是random(far),它返回1到far之间的一个随机值。

至于说IPC摄像头程序崩溃常见几个可能:

第一:IPC与NVR之间的协议不是太匹配。

第二:网络交换机数据交换速度跟不上,经常引起数据堵塞。

第三:线路连接不稳定,网络状态不是很好。

第一种情况:出现这种情况的原因主要是现在摄像机厂家品牌较多,尤其是旧项目改造,看似都是onvif协议,但里边也有一些小差别,好多时候不是不能用,而是让你用的不舒服而已。因此在系统建设初期了解产品性能,选择产品体系,对后期系统平稳问题有很大的关系。

一旦出现这种情况,首先把前端和终端设备找厂家升级成最新的固件程序,然后根据厂家的建议设置标准兼容协议。

第二种情况:交换机是网络高清监控系统中的核心部分。模拟时代的传输部分只有线缆,而网络时代数据传输设备是核心。先换一个高级点的交换机,做监控在机房一般一两百元的小交换机,就不要拿来用IPC的数据交换,基本达不到要求,这也就是会出现上边咱们说的那种情况,我就增加了几个摄像机怎么图像就卡顿成这样了呢?哈哈,因为一开始已经满负荷运转,而自己在考察新增项目的时候,一看交换机有富裕接口,以为插上就能用呢,哈哈,你以为的事你以为的事,有的时候这个是一个很严谨的工作。这也就是好多原来模拟时代的人说,网络监控没有模拟高清好的原因,为啥,简单不用费劲,哈哈;现在明白了吧,网络高清时代不是门槛低了,而且门槛更高了。

第三种情况:这种情况比较麻烦,因为不是靠升级程序和更换更好的交换机就能解决问题。这个需要综合考虑网络架构,是否串联的交换机较多,前端汇入交换机带宽是否可行;还有就是网络水晶头老化引起的接触不良;线缆附近是否有干扰等等问题,需要施工人员仔细的分析问题所在,逐步排查。

首先说明,在ARM中运行程序的方法其实和我们PC机差不多,程序开始是放在Flash中的,在芯片加电启动后,Flash中的程序会通过内存映射的方式加载到RAM中运行,这一步是由启动代码来完成的,对应PC机中的话,就是程序放在硬盘中,执行时把程序加载到内存中,然后在内存中运行程序。

所以在Keil中用JTAG调试实际上是要在RAM中调试。因为Flash中的程序烧写进去的,而用JTAG调试是没有办法更改Flash的,所以RAM调试和JTAG调试是一回事。

用过几天三星的S3C44B0,现在又改用了NXP的LPC2131。这两者一个使用片外的RAM,另外一个把RAM集成在了芯片内,但在利用Keil进行调试的时候,两者基本一样,所以后面以LPC2131为例说明。

首先,建立工程,选择需要的芯片,加载默认的启动代码Startups,(由于目前大多数厂家出的开发板自带的程序都是基于ADS的,而ADS下的Startups和Keil下的有区别,所以如果直接用开发板自带的启动代码的话会出现一些错误),添加你所需要的各个代码文件,然后在Target那个文件夹图标那里右击,然后在d出的菜单中,选择“option for target”,然后在d出的界面上选择“Target”选项卡然后设置你的晶振频率。如果编译没有问题的话,那么就可以直接用Keil进行软件仿真了。

第二,开始JTAG调试设置,前提是你已经连接好JTAG线,并运行相应的JTAG驱动程序如H-JTAG,首先右击Startups,然后在d出的菜单中,选择“option for startups”,进入后选择“Asm”选项卡,在下面的“Define”后面的空白处填入“RAM_MODE REMAP”。这是要设置RAM调试模式,地址重定位。

第三,在Target那个文件夹图标那里右击,然后在d出的菜单中,选择“option for target”,然后在d出的界面上选择“Target”选项卡,在“Read only area”下方选择“on-chip”,选中前面的default,然后第一个空填入0x40000000,第二个空填入0x1000,选中startup,然后在后面对应的行内选中default,第一个空填入0x40001000,第二个空填0x1000,后面的starup不要选中。(这几个数据与所选的CPU型号有关,如果是44b0的话,对应的是0x0c000000,0x2000,0x0c000000,0x2000。)

注意,这一步中,第一个数字代表你的芯片所对应的真实的RAM的起始地址,第二个数字表示你仿真时用来模拟只读区域的长度,第三个数字代表仿真时模拟RAM的长度,它的值必须大于等于第一个值加第二个值,否则会编译时提示你两个区域重合的错误。另外,第二个数字加第四个数字必须小于等于你的真实物理RAM的大小,推荐小于,因为你的RAM生产中不可能刚刚好是标称的大小。

另外补充,两个区域的大小不是固定的,可以根据需要调整,但是有时候要注意,如果你的区域设置不合适,可能会出一些问题,所以推荐第一个区域大于等于第二个区域,一般可以设为平分RAM。

第四,点击Linker选项卡,取消“Use Memory Layout From Dialog”,然后在后面的R/O base和R/W base中填入在Target选项卡中的第一个和第三个数字,必须保持对应。清空下面的Scatter File中文件名。

第五,点击Debug选项卡,选择右半部分的Use……(默认是左半部的Use Simulator),在后面的下拉菜单里选择“RDI Interface Driver”(不是带有JTAG字样的那个啊),然后点击setting,选择你的H-JTAG驱动程序所在的目录下对应的H-JTAGdll(可能你用的JTAG驱动和我的不一样,方法是一样的),然后config一下。

第六,点击确定后返回刚才的options for target界面Debug选项卡,取消RDI Interface Driver下面的“Load Application at Startup”。

第七,在你的工程对应的目录下,新建一个文本文档,输入以下内容

FUNC void Setup (void)

{

PC = 0x40000000; //这里的值填你的RAM起始地址,也就是在//Target中的第一个值,如44b0换成0x0c000000

}

Setup(); // Setup for Download

LOAD axf INCREMENTAL // Download

g,main

其中axf为你编译好后生成的文件名,根据实际情况修改

然后保存为RAMini文件。

在刚才的 Debug选项卡Load Application at Startup下面的Initialization Files里边选择你刚才的那个RAMini文件,然后点击确认保存。

第八,重新编译你的工程,点击Debug进行调试,如果进入后,PC定位在了RAM起始地址的话,则可以开始调试,否则再检查一次。

一些可能出现的问题

1:最好是先擦除你的CPU的Flash,这样加电后,芯片不会执行程序,否则会出现一点击调试,程序就开始运行了,但不出结果,而不是停留在RAM开始处,但这个问题似乎在调试44b0的时候没有发现,原因不明。

2:一点击调试,程序就开始运行,除了第一种可能以外,还有可能前面的设置有问题,重新设置一下,再者,停止Debug,断掉你的开发板电源,重新加电一次试试,这种情况常见于Debug一次后再一次Debug时候,因为JTAG连上以后,就会带电,而如果上次Debug错误,即使复位,RAM中仍然没有完全断电,第二次Debug时上次的程序还在运行,所以出问题。

3:由于LPC2131的RAM较小,8K,如果你的程序较大的话,比如你把很多的端口初始化以及接口子函数都用上了,那么就会发现,你在Debug时,开始停在RAM起始地址,点击运行后就会进入死循环,如果单步运行的话可以发现你的程序只能执行到一半。如果你换一个简单的小文件没有出现这种情况的话,那么只能是你的程序代码太大了

电动机m1启动20秒后m2启动lpc是对的。

1、按下启动按钮SB1,电机M1启动并自锁。同时M1常开触点触发时间继电器KT开始计时,20秒后,KT常开点闭合,电机M2启动,并自锁。按下停止按钮SB2,中间继电器KA得电,时间继电器KT1得电开始计时,KA常闭触点断开,关闭电机M1,时间继电器KT1计时20秒后,KT1常闭点断开,断开电机M2。是对的。

第一种方法:使用第三方软件来自动安装驱动程序(驱动精灵或者驱动人生)

优点:无脑化 *** 作,任何小白都可以使用,只需要电脑联网了,就可以自动匹配网络上可以使用的驱动程序,若你下载离线带网卡驱动版本的,在不联网的状态下也可以使用;

缺点:网络上自动匹配的驱动程序多为公版驱动,容易出现安装后出现一些意向不到的问题;

首先需要下载安装驱动精灵或者驱动人生,这里以我经常使用的驱动人生为例;百度搜索驱动人生

>02

下载完毕后会自动d出安装界面

注意:在安装的时候点击“自定义”,将“设置hao160为首页”的前面勾去除,不然驱动人生会偷偷篡改你的首页的。

>03

安装完毕后将红框标识处的勾都去除,

注意:驱动人生由要偷偷为您安装浏览器、播放器、还有壁纸了。

共2图>04

安装完毕后第一次打开,软件就会自动为您匹配您电脑上的驱动程序,有那些需要安装,有那些驱动有最新的版本可以更新,有哪些驱动需要备份;

点击立即更新就可以解决所有问题。

烧写程序有两种方式

一种是串口ISP下载 ,这个要求你下载个ISP软件

LPC2103 ISP烧写

首先flash magic只支持hex 16进制文件的下载。所以在用ADS做ARM开发的时候必须选择生成hex文件。

具体的方法如下:DeubgInFLASH Settings---->Targets

由于ARM7内核结构的特MOD,当ARM7系统上电或复位后,是通过配置引脚的状态来选择几种启动模式的。

通常根据各个公司各系列芯片的不同,大致包括片内Flash启动模式、片内RAM启动模式、外部存储器启动

模式等;另外,现在很多ARM7芯片都支持片内Boot装载程序实现在系统编程(ISP)和在应用编程(IAP),

如何在复位后进入ISP或者IAP状态,都需要通过配置引脚的状态来确定。因此,除了电源、晶振、jtag、复位构成最小系统的四部分基本单元电路外,最小系统若要正常工作,还需要根据芯片的特MOD添加启动选择电路,这个是与普通的8位单片机所不同的。

对于LPC2103或者LPC2148来说,它的Flash和Ram都内置而且不能外扩外部存储器,上电或复位后系统根据配置引脚P014口(又称ISP使能引脚)的高低电平来选择是进入ISP状态还是系统正常从Flash启动。在系统复位时,若P014口为低电平,进入ISP状态,若P014口为高电平, 正常从Flash启动。硬件上通过跳线来实现,如下图 所示。这部分电路很简单,1个上拉电阻,1个跳线,但对于整个系统是必可少的,若缺少这一部分电路,LPC2103或者LPC2148上电后将进入一个未知的状态,导致系统无法正常工作。正常工作情况下,跳线断开。

推荐参考资料

>

以上就是关于高分悬赏:LPC1114实现ADC转换的详细教程及程序,详解全部的内容,包括:高分悬赏:LPC1114实现ADC转换的详细教程及程序,详解、一段LPC的代码,求教高手、lpc摄像头程序崩溃等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9752941.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存