- 小菜G
-
* 回复内容中包含的链接未经审核,可能存在风险,暂不予完整展示!单片机P1口是有内部上拉电阻的,如果电源都正常并且单片机的程序运行也正常的话,应该是外部接口的问题。有可能地话,将引脚与外部电路断开后测一下引脚电压试试,如果正常就可以确定是外部电路的问题单片机是一门实践性很强的课程(是半软半硬的东西),所以必须是理论联系实践,我试过很多种教学法,还是觉得平凡老师创立的任务教学法的效果最好。因此本人的课程也将按找这个思路来写。 个人认为平凡单片机教程有些不足的地方,所以我也是改革的写教程了,完全按照人的认知规律来写,和平凡老师的教程在很大程度上不同。 好,下面我们开始学习了!请大家认真看! 一、什么是单片机呢? 1、和我们的计算机(电脑)差不多,大家都知道,我们的计算机(电脑)里面有 (1)CPU (2)硬盘 (3)内存 (4)主板 (5)等等。 这些东西是装在一个叫主机的里面的。好大!一个CPU大概要400块,硬盘也要500左右,内存200左右,主板500左右,这些东西加在一起大概要1600块左右。如果配上其他的,一台电脑要3000到4000左右吧。 2、但是如果把这些东西(CPU,硬盘,内存,主板)用集成块做好后,如下图所视: http://bbs.2**.com/upfiles/img/200611/20061119213818365.jpg 3、请大家想想看这个集成块值多少钱?它可是具备了计算机的功能啊。是不是很贵啊? 不,价格并不高,从几元人民币到几十元人民币,体积也不大,一般用40脚封装,当然功能多一些单片机也有引脚比较多的,如68引脚,功能少的只有10多个或20多个引脚,有的甚至只8只引脚。 4、当然,在单片机机内部,CPU,硬盘,内存,主板等等东西要改个名字了。 (1)CPU,它的名字没有改,还是叫CPU(Central Processing Unit)。它是单片机的核心部件,包括运算器和控制器。运算器既是算术逻辑单元ALU(Arithmetic logic Unit),其功能是进行算术运算和逻辑运算。控制器一般由指令寄存器、指令译码器、时序电路和控制电路组成。起作用是完成取指令、将指令译码形成各种微操作并执行指令,同时控制计算机的各个部件有条不紊地工作。 (2)“硬盘”,改了名字,叫程序存储器,也叫只读存储器。用ROM(Read only memery)表示。其作用和硬盘差不多,用来存放用户程序。特点是:掉电后不会丢失数据。 (3)“内存”,也改了名字,在单片机里叫数据存储器,也叫随机存储器。用RAM(Random Access Memery)表示。其作用是用于存放运算的中间结果,数据暂村和缓冲,标志位等。特点是:掉电后会丢失数据。 (4)“主板”,也改了名字,叫做I/O(输入输出设备)当然也包含了串行口,并行口,定时器,记时器等等。 5、以上谈到的这些东西都在哪个集成块里面。我们把集成了这些东西的集成块叫做单片机。有些外国人叫微控制单元MCU(Micro Controller Unit),也有人叫嵌入式控制器(Embedded Controller)。现在明白了什么是单片机吗? 6、我总结一下:将CPU、程序存储器、数据存储器、I/O接口电路、定时器/计数器等计算机部件集成在一块芯片上,具有独特功能的单片微型计算机称着单片机。现在总明白了什么是单片机吧! 请大家用自己的话阐述一遍什么是单片机?? 二、当我们明白了什么是单片机后,再来猜猜一般的单片机的价格吧? (1)Intel公司1980年推出的标准MCS-51内核8051现在要7到10块钱。 (2)Atmel公司的AT89c51,AT89s51,AT89c52,AT89s52一般在7块钱左右。 三、我想大家会想一个“电脑”竟然是10块钱以内?功能怎么样?有什么用啊? 我可以告诉大家,它的功能很强大,是以后电子产品的发展方向。只要具有了智能的电子产品,就少不了弹片机技术。非常有用,就业前景非常之好。那么大家一定很想学了,于是去买了本书看。 哈哈,看不懂吧,感觉好难吧?那是因为你没有掌握好学习单片机的方法。学单片机光看书是不够的,也是学不会的。学单片机是需要一些条件的了! 下一页是学习单片机需要的条件. 随着社会的发展,电子行业出现了新的技术之一单片机技术,单片机技术在各行各业都得到了广泛的应用,如果说学电子的人不学单片机技术就像我们读书不读外语一样,被人认为是老土啊。 所以我们学电子的一定要学单片机技术。那么如何学习这门技术呢?到底是难还是容易呢?这就要看你的学习方法了。 如果你闭门造车试的学习方法,肯定很难学好的。我根据我这几年的教学经验,我总结出了学单片机的相关教学方法,现在我将把我的教学过程写出来。 学单片机第一步是:建立自己的学习条件。 四、学习单片机需要什么条件? (1)一台电脑——用于编程和学习。(3000到4000块钱) (2)编程器——用于把编写好的程序写到芯片中。(100到1000快钱) (3)仿真器——主要是为了调试程序的正确性。(1000到2000块钱) (4)如果没有编程器和仿真器,也可以买个便宜的单片机实验板。如电子之城的AZ系统。也就300块钱左右。 或者是电子之城的AS系统,大概是400块钱。它集合了编程器和仿真器的所有功能。推荐买单片机实验板! (5)还要多买几块单片机芯片,如:AT89C51,AT89S51,AT89S52等等。 五、有了这些东西,如果你已经学了一点单片机知识的话,就可以做搞开发了。 下面我来谈谈单片机开发的过程,以做流水灯为例进行讲解。 (1)设计好硬件电路图 按下图把单片机的各个脚和元器件连接起来: http://bbs.2**.com/upfiles/img/200611/20061119213942329.gif (2)在电脑上用软件(如keil c51)编写程序。 ORG 0000H LJMP START ORG 0030H START:MOV A,#0FEH LOOP:MOV P1,A LCALL DELAY RL A LJMP LOOP DELAY:MOV R7,#0FFH D1:MOV R6,#0FFH D2:DJNZ R6,D2 DJNZ R7,D1 RET END
想学习单片机应该首先学会这些东东:1>IAP(In Application Program)在应用编程 ISP(In System Program)在系统编程根本区别: IAP: 动态的,CPU CORE已经运行,自己从外面读数据,完成写入自身FLASH IAP: 静态的,实质上是由外部实现串行编程写入待.<2>答:具备在应用中编程IAP功能的单片机,其程序存储器必须是可以重复烧写编程的版本(比如FLASH)。可以用于具备远程遥控软件版本升级或者参数修改的产品项目之中(比如远程抄表、用户端电话计费等系统的远程费率参数和算法程序修改);也可以应用于具备自编程功能(免用微机和烧写器)的单片机学习机、单片机单板机、实验板、演示板、教学模块等各种学习和实验工具之中。对于处在同一个存储器空间的FLASH程序存储器,不能同时扮演“被烧写存储器”和“取指令存储器”的双重角色。为了解决这个矛盾,不同厂家的单片机采用了不同的解决方案,比如: ① 可以将FLASH程序存储器分成地址有映射关系的两个区,分别由各自的电荷泵提供烧写电压。当烧写一个区时,该区的电荷泵工作,同时执行存放在另一个区的指令。例如,SST(Silicon Storage Technology)公司利用他的SuperFlash技术研制的FlashFlex51单片机系列,各个型号片内分别带有20KB、36KB或68KB可多次编程的程序存储器。该存储器又分为主存储区和次存储区。各个型号的主存储区分别为16KB、32KB或64KB,次存储区则统一为4KB。 ② 可以将单片机的程序存储器地址空间分为ROM区和FLASH区,ROM区在出厂之前就已经固化有烧写专用程序,FLASH区作用户程序存放区,这样一来,即使在烧写FLASH的同时,也不会影响对于ROM中程序的执行。MOTOROLA公司推出的MC68HC908系列单片机中采用的就是这种解决方案。 ③ PIC16F87X系列单片机中,采用了不同的解决方案。FLASH程序存储器并不分区,在对其进行烧写并且电源自动切换到电荷泵供电时,CPU自动停顿而等待。在一个单元烧写操作完毕,FLASH工作电压自动切换到正常值时,CPU才继续执行FLASH中的烧写专用程序或用户程序。 ④ 在数据存储器RAM和程序存储器FLASH两种存储器统一编址的单片机中,还可以采用的另一种方案是,在准备修改FLASH区中的用户程序之前,先把烧写专用程序拷贝到RAM区,然后跳转到RAM区去执行该程序,实现对FLASH程序存储器的烧写操作。在烧写完成之后再跳回到FLASH存储器执行正常的用户程序。微芯公司新近推出的高性能PIC18C601/801单片机采用的就是这种解决方案。MOTOROLA公司推出的MC68HC908系列单片机的某些型号,也可以采用这种解决方案。SST89C54/58(简称89C54/58)是美国SST公司推出的多用途51系列单片机,片内集成了20 kB/36 kB的SuperFlashE"PROM程序存储器,分为BLOCK0(16kB/32kB)和BLOCKl(4kB)两块。其中,BLOCKl可以映射(Mapping)到64kB存储空间的最高端或最低端,而且,对于程序计数器来说可以是不可见的,
不知道是否能帮助你,希望你给予采纳
- wpBeta
-
楼上的这种人简直就是人渣。
蹭分的那种,鄙视。
- 可乐
-
说实话,你真的比较菜,没用过单片机吧,用用你就知道了,一般定时不会用死循环数指令的方式来定时的,是用单片机的定时器来定时的;如果你非要数指令来定时,那你要知道你C语言反汇编之后的数数循环体里面的总的指令周期,然后看你的单片机CPU时钟是多少,每种单片机的CPU从晶振的分频是不一样的;
- 瑞瑞爱吃桃
-
这个函数有问题
1.uchar 是unsigned char
最大值为255,而i=2000 执行结果是 i=0xD0 (keil仿真)
2.通过keil的仿真,测试实际延时为400us左右
所以不要这样延时
可以用如下的方法近似延时1ms
void d1ms(void)
{
uchar a,b;
for(a=23;a>0;a--)
{
for(b=20;b>0;b--)
{
}
}
}
后面一个问题不清楚哈。。。。。。
- 黑桃云
-
如果想简单的话,不需要用单片机,直接一个语音芯片就可以搞定了,具体你可以先看看ISD系列的可录语音芯片,就是比较贵。如果是固定的引擎声,你问问卖语音芯片的厂家,应该有掩膜ROM的版本卖,会很便宜,你把芯片的触发端接在油门控制上,利用高低电平就可以了。如果纯用单片机实现比较麻烦,不是很实际。