- 博客(25)
- 收藏
- 关注
原创 第二十课 单片机定时/计数器实验
我们的硬件中是这样连线的:324组成的振荡器连到定时/计数器1的外部管脚T1上面,我们就利用这个来做一个计数实验,要将计数的值显示出来,当然最好用数码管了,可我们还没讲到这一部份,为了避免把问题复杂化,我们用P1口的8个LED来显示计到的数据。本程序的功能很简单,按一次按钮1(接在12管脚上的)就引发一次中断0,取反一次P1。0,因此理论上按一下灯亮,按一下灯灭,但在实际做实验时,可能会发觉有时不“灵”,按了它没反应,但在大部份时候是对的,这是怎么回事呢?定时/计数器1作计数用,模式1,0不用全置0。
2025-04-15 15:02:59
475
原创 第十九课 单片机定时器、中断试验
对了我们用两个计数器,一个在它计到20时,取反P10,并清零,就如上面所示,另一个计到40取反P11,然后清0,不就行了吗?这里采用了软件计数器的概念,思路是这样的,先用定时/计数器0做一个50毫秒的定时器,定时是间到了以后并不是立即取反P10,而是将软件计数器中的值加1,如果软件计数器计到了20,就取反P10,并清掉软件计数器中的值,不然直接返回,这样,就变成了20次定时中断才取反一次P10,因此定时时间就延长了成了20*50即1000毫秒了。灯在闪烁了,这可是用定时器做的,不再是主程序的循环了。
2025-04-15 15:01:58
385
原创 第十八课 单片机的中断系统
有关单片机中断系统的概念:什么是中断,我们从一个生活中的例程引入。你正在家中看书,突然电话铃响了,你放下书本,去接电话,和来电话的人交谈,然后放下电话,回来继续看你的书。这就是生活中的“中断”的现象,就是正常的工作过程被外部的事件打断了。仔细研究一下生活中的中断,对于我们学习单片机的中断也很有好处。第一、什么可经引起中断,生活中很多事件能引起中断:有人按了门铃了,电话铃响了,你的闹钟闹响了,你烧的水开了….等等诸如此类的事件,我们把能引起中断的称之为中断源,单片机中也有一些能引起中断的事件,8031中一共有
2025-04-15 15:01:07
1122
原创 第十七课 单片机定时器/计数器的方式控制字
是的,在工作方式2,只有低8位参与计数,而高8位不参与计数,用作预置数的存放,这样计数范围就小多了,当然做任可事总有代价的,关键是看值不值,如果我根本不需要计那么多数,那么就能用这种方式。GATE=0,分析一下逻辑,GATE非后是1,进入或门,或门总是输出1,和或门的另一个输入端INT1无关,在这种情况下,开关的打开、合上只取决于TR1,只要TR1是1,开关就合上,计数脉冲得以畅通无阻,而如果TR1等于0则开关打开,计数脉冲无法通过,因此定时/计数是否工作,只取决于TR1。那么TR0、TR1又是什么呢?
2025-04-15 15:00:10
765
原创 C语言指针
本文系本站原创,欢迎转载! 转载请注明出处:克服C语言指针学习障碍-优快云博客++++++++++++++++++++++++++++++++++++++++++ 好多同学都说:“老师,我看到指针就晕!”,说实话,见过晕血的,见过晕车的,晕指针的到是第一次听说! 我们先来分析一下晕车的原理,再来对比一下为什么晕指针。 晕车,是因为耳朵里的一个器官对外界的振动太敏感,导致身体调节功能紊乱,系统不能正常工作,轻则,晕点,中则,吐点,重则,“重启”(倒地)。时间长了,知道自己晕车,于是,
2025-04-15 00:03:05
883
原创 c语言实用经典100题
【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 2.程序源代码: main() { int i,j,k; printf("\n"); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++)
2025-04-14 21:54:36
778
原创 第十六课 单片机定时器和计数器
行业中有很巧妙的办法,用一个周长是1米的轮子,将电缆绕在上面一周,由线带轮转,这样轮转一周不就是线长1米嘛,所以只要记下轮转了多少圈,就能知道走过的线有多长了。一个闹钟,我将它定时在1个小时后闹响,换言之,也能说是秒针走了(3600)次,所以时间就转化为秒针走的次数的,也就是计数的次数了,可见,计数的次数和时间之间的确十分相关。8031中的计数器除了能作为计数之用外,还能用作时钟,时钟的用途当然很大,如打铃器,电视机定时关机,空调定时开关等等,那么计数器是如何作为定时器来用的呢?<单片机定时器记数器结构>
2025-04-14 21:22:36
803
原创 第十五课 单片机位操作指令
一开始,将0FFH送入P3口,这样,P3的所有引线都处于高电平,然后执行L1,如果P3.2是高电平(键没有按下),则次序执行JNB P3.3,L3语句,同样,如果P3.3是高电平(键没有按下),则次序执行LJMP L1语句。这样就不停地检测P3.2、P3.3,如果有一次P3.2上的按钮按下去了,则转移到L2,执行MOV P1,#00H,使灯全亮,然后又转去L1,再次循环,直到检测到P3.3为0,则转L3,执行MOV P1,#0FFH,例灯全灭,再转去L1,如此循环不已。例:MOV P1.0,CY;
2025-04-14 21:21:40
401
原创 第十四课 单片机条件转移指令
如果(A)不等于10H,则转到L1处继续执行,在L1处,再次进行判断,如果(A)>10H,则CY=1,将次序执行,即执行MOV R1,#0AAH指令,而如果(A)<10H,则将转移到L2处指行,即执行MOV R1,#0FFH指令。上面的程序中有一条单片机指令我们还没学过,即JC,这条指令的原型是JC rel,作用和上面的JZ类似,但是它是判CY是0,还是1进行转移,如果CY=1,则转移到JC后面的标号处执行,如果CY=0则次序执行(执行它的下面一条指令)。把A中的值和10H中的值比较(注意和上题的区别)
2025-04-14 21:20:39
918
原创 我理解的逻辑地址、线性地址、物料地址和虚拟地址
根据线性地址前十位,在数组中,找到对应的索引项,因为引入了二级管理模式,页目录中的项,不再是页的地址,而是一个页表的地址。跟逻辑地址类似,它也是一个不真实的地址,如果逻辑地址是对应的硬件平台段式管理转换前地址的话,那么线性地址则对应了硬件页式内存的转换前地址。下,逻辑地址与线性地址总是一致(是一致,不是有些人说的相同)的,即逻辑地址的偏移量字段的值与线性地址的值总是相同的。要求两次转换,这样虽说是兼容了,但是却是很冗余,呵呵,没办法,硬件要求这样做了,软件就只能照办,怎么着也得形式主义一样。
2025-04-11 17:59:47
747
原创 第十三课 单片机逻辑与或异或指令
下面我们来看这段程序的执行过程:第一句MOV DPTR,#TAB执行完了之后,DPTR中的值就是TAB,第二句是MOV A,R0,我们假设R0是由按钮处理程序获得的键值,比如按下A键,R0中的值是0,按下B键,R0中的值是1,以此类推,现在我们假设按下的是B键,则执行完第二条指令后,A中的值就是1。我们的要求是:当按下功能键A……看图2,前面的程序读入的是按钮的值,如按下'A'键后获得的键值是0,按下'B'键后获得的值是'1'等等,然后根据不一样的值进行跳转,如键值为0就转到S1执行,为1就转到S2执行。
2025-04-11 17:54:18
703
原创 第十二课 单片机逻辑运算指令
此时A中的值是80H,所以送出去的也就是80H,因此P1口的值是80H,也就是10000000B,通过前面的分析,我们应当知道,此时P1。继续看,RL A,RL A是将A中的值进行左移,算一下,移之后的结果是什么?注意,如果是这样的:(A)=39,后面没H,执行SWAP A之后,可不是(A)=93。要将它化成二进制再算:39化为二进制是10111,也就是0001,0111高4位是0001,低4位是0111,交换后是01110001,也就是71H,即113。SWAP A,是将A中的值的高、低4位进行交换。
2025-04-11 17:52:58
614
原创 第十一课 单片机算术运算指令
则执行过程是:将SP中的值(现在是61H)作为地址,取61H单元中的数值(现在是20),送到B中,所以执行完本条指令后B中的值是20,然后将SP减1,因此本条指令执行完后,SP的值变为60H,然后执行POP ACC,将SP中的值(60H)作为地址,从该地址中取数(现在是100),并送到ACC中,所以执行完本条指令后,ACC中的值是100。设R0中的值为2,送入A中,而DPTR中的值则为TABLE,则最终确定的ROM单元的地址就是TABLE+2,也就是到这个单元中去取数,取到的是4,显然它正是2的平方。
2025-04-11 13:26:57
330
原创 第十课 单片机数据传送类指令
则执行过程是:将SP中的值(现在是61H)作为地址,取61H单元中的数值(现在是20),送到B中,所以执行完本条指令后B中的值是20,然后将SP减1,因此本条指令执行完后,SP的值变为60H,然后执行POP ACC,将SP中的值(60H)作为地址,从该地址中取数(现在是100),并送到ACC中,所以执行完本条指令后,ACC中的值是100。设R0中的值为2,送入A中,而DPTR中的值则为TABLE,则最终确定的ROM单元的地址就是TABLE+2,也就是到这个单元中去取数,取到的是4,显然它正是2的平方。
2025-04-11 13:25:45
468
原创 第九课 单片机数据传递和指令传递
8051是一种8位机,这是唯一的一条16位立即数传递指令,其功能是将一个16位的立即数送入DPTR中去。例:MOV DPTR,#1234H,则执行完了之后DPH中的值为12H,DPL中的值为34H。反之,如果我们分别向DPH,DPL送数,则结果也一样。如有下面两条指令:MOV DPH,#35H,MOV DPL,#12H。注意此时不会看到原来的窗口,为看到原来的窗口,请用ALT+4或ALT+5等来切换。说明:用括号括起来代表内容,如(23H)则代表内部RAM23H单元中的值,(A)则代表累加器A单元中的值。
2025-04-11 13:24:49
624
原创 第八课 单片机寻址方式和指令系统
为什么要加以区别呢?就我们目前掌握的办法而言,要从30H单元取数,就用MOV A,30H,那么下一个数呢?第四句,没学过,就是把R0中的值加1,因此执行完后,R0中的值就是31H,第五句,学过,将R7中的值减1,看是否等于0,不等于0,则转到标号LOOP处继续执行,因此,执行完这句后,将转去执行MOV A,@R0这句话,此时相当于执行了MOV A,31H(因为此时的R0中的值已是31H了),如此,直到R7中的值逐次相减等于0,也就是循环20次为止,就实现了我们的要求:从30H单元开始将20个数据送入A中。
2025-04-10 19:12:48
375
原创 51单片机可以实现PID算法吗?
51单片机不管发展了多少年,依然是学习单片机的黄金跳板。有人说51单片机属于远古时代的,不值得学习,但是你深入内层,手动优化代码,打好坚实基础,依旧可以做出惊艳的项目。不需要复杂的数学模型,但对实时计算能力有一定要求。掌握它,你就能在更复杂的平台上游刃有余。这些功能,用项目验证你的想法,这才是工程师应有的态度。你骑自行车时,发现车往左歪了,你会立刻往右调整车把。让你从底层理解计算机如何工作,如何用代码控制硬件。算法不是某个单片机的专属,而是一种思想。它的价值不仅在于能用,更在于易学。用查表法代替复杂计算。
2025-04-10 17:16:44
325
原创 第七课 单片机特殊功能寄存器
堆栈介绍:日常生活中,我们都注意到过这样的现象,家里洗的碗,一只一只摞起来,最晚放上去的放在最上面,而最早放上去的则放在最下面,在取的时候正好相反,先从最上面取,这种现象我们用一句话来概括:“先进后出,后进先出”。下图中我们能看出,在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。:这个我们已经知道,是四个并行输入/输出口的寄存器。
2025-04-10 17:04:26
1222
原创 第六课 单片机的并行结构
第二条指令是MOV A,P3,其中 MOV已经知道,是送数的意思,这条指令的意思就是将P3口的数送到A中去,我们能把A当成是一个中间单元(看图3),第三句话是将A中的数又送到P1口去,第四句话是循环,就是持续地重复这个过程,这我们已见过。我们在存储器一节中学过,存储器中是能存放电荷的,我们不妨也加一个小的存储器的单元,并在它的前面加一个开关,要让这一位输出时,就把开关打开,信号就进入存储器的单元,然后马上关闭开关,这样这一位的状态就被保存下来,直到下一次命令让它把开关再打开为止。它们能不能都让灯亮呢?
2025-04-10 16:47:05
765
原创 第五课 单片机延时原理
这是另一条指令,我们来看一下这条指令后面跟着的两个东西,一个是R6,一个是D2,R6我们当然已知是什么了,查一下D2是什么。D2在本行的前面,我们已学过,这称之为标号。DJNZ指令的执行过程是这样的,它将其后面的第一个参数中的值减1,然后看一下,这个值是否等于0,如果等于0,就往下执行,如果不等于0,就转移,转到什么地方去呢?这种复位电路的工作原理是:通电时,电容两端相当于是短路,于是RST管脚上为高电平,然后电源通过电阻对电容充电,RST端电压慢慢下降,降到一定程序,即为低电平,单片机开始正常工作。
2025-04-07 21:54:19
703
原创 第四课 第一个单片机程序
指令的形式是LCALL,这条指令称为调用子程序指令,看一下指令后面跟的是什么,DELAY,找一下DELAY,在第六条指令的前面,显然,这也是一个标号。在执行第二条指令后,将转去执行第6条指令,而在执行完6,7,8,9条指令后将遇到第10条令:RET,执行该条指令后,程序将回来执行第三条指令,即将P10清零,使灯亮,然后又是第四条指令,执行第四条指令就是转去执行第6,7,8,9,10条指令,然后回来执行第5条指令,第5条指令就是让程序回到第1条开始执行,如此周而复始,灯就在持续地亮、灭了。
2025-04-07 21:39:54
925
原创 单片机存储器介绍
单片机内部存储结构分析 我们来思考一个问题,当我们在编程器中把一条指令写进单片要内部,然后取下单片机,单片机就可以执行这条指令,那么这条指令一定保存在单片机的某个地方,并且这个地方在单片机掉电后依然可以保持这条指令不会丢失,这是个什么地方呢?这个地方就是单片机内部的只读存储器即ROM(READ ONLY MEMORY)。为什么称它为只读存储器呢?刚才我们不是明明把两个数字写进去了吗?原来在89C51中的ROM是一种电可擦除的ROM,称为FLASH ROM,刚才我们是用的编程器,在特殊的条件下由
2025-04-07 21:36:15
818
原创 单片机介绍
MCS51是指由美国INTEL公司(对了,就是大名鼎鼎的INTEL)生产的一系列单片机的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS51系列单片机,而8031是前些年在我国最流行的单片机,所以很多场合会看到8031的名称。另外这种芯片的生产量很大,技术也很成熟,51系列的单片机已经做了十几年,所以价格就低了。
2025-04-07 15:33:19
280
原创 汇编语言与8051
用汇编,才是学习“单片机”的正确姿势。只有用汇编语言去编写程序,才能真正体会和理解80C51的输入输出口如何通过键盘鼠标将人类的命令传送给单片机,又如何通过显示器将计算机内部的东西显示出来,这样才能实现人类和计算机的交流。
2025-04-07 15:10:10
251
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅