单片机实验代码总结
单片机实训总结(集锦10篇)
单片机实训总结(集锦10篇)单片机实训总结第1篇单片机是一门应用性和综合性很强的学科,它综合了电子技术中的模拟电路和数字电路方面的知识,特别是数字电路,因为数字电路在单片机里面的应用很多。
由于单片机涉及的知识很多,所以我们只能循序渐进的学习,逐步的积累,没有什么捷径可循。
在大二的时候,我就听学长介绍过单片机,当时感觉很神奇,从此就对单片机特别感兴趣,也感觉它特别有用。
于是经学长推荐,在大二上学期我利用学习之余在图书馆借书,学习了KILE和Proteus软件,刚开始学习的时候,对单片机没有什么认识,不知道什么是单片机,更不知道它有什么作用。
通过学习才大体知道了单片机的一些知识。
由中央处理器CPU、随机存储器RAM、只读存储器ROM、I/O接口、定时器/计数器以及串行通信接口等集成在一块芯片上,构成了一个单片微型计算机,简称为单片机。
也算给我正式学习单片机打下一个基础。
在大二下学期,我购买了一套单片机学习开发板和郭天祥主编的《新概念51单片机C语言教程》,从此正式开启我的单片机学习之路。
在刚开始学时,就完全模仿郭天祥主编的这本书再结合开发板一步一步的学,从点亮一个发光二级管,流水灯,数码管,定时器,中断,矩阵键盘,AD、DA,串口通行,I2C总线等一步一步的深入学习。
此时,我虽然能看懂程序,一些简单的程序可以自己编写,但一些比较复杂的自己编不出来。
在大二暑假,我发现了郭天祥主讲的《十天学会单片机》视屏,于是我坚持天天看视屏,然后在自己根据视屏内容结合开发板写程序,调程序,就这样学了一个暑假。
通过这个视屏,我初步了解了单片机的硬件结构,编程方法及调试方法(用KILE软件调试和用开发板调试),寄存器的使用,学会了如何看芯片资料,初步开始利用芯片时序图来编程。
可以说这个视屏对我学习单片机有巨大的帮助,更夸张的说是这个视屏将我带进了单片机的世界,让我尽情的体验单片机带给我的快乐!在大三上学期,我有幸参加了教改班的单片机课程学习。
单片机个实验代码详细
(1).初始化:启动AT89S51单片机进入ISP下载状态,若启动成功,则状态显示区就会显示如图3.2所示的文字。否则,不成功会有“初始化失败”的字样提示。
图3.2
(2).特征字:点击一下检测器件,会读出单片机的芯片的特征字,对于AT89S51单片机的特征字为:1E5106。
进入Keil C51后,屏幕如下图所示。几秒钟后出现编辑界
启动Keil C51时的屏幕
进入Keil C51后的编辑界面
简单程序的调试
学习程序设计语言、学习某种程序软件,最好的方法是直接操作实践。下面通过简单的编程、调试,引导大家学习Keil C51软件的基本使用方法和基本的调试技巧。
1)建立一个新工程
6)回到编辑界面后,单击“Target 1”前面的“+”号,然后在“Source Group1”上单击右键,弹出如下菜单
然后单击“Add File to Group ‘Source Group 1’”屏幕如下图所示
选中Test.c,然后单击“Add ”屏幕好下图所示 注意到“Source Group1”文件夹中多了一个子项“Text1.c”了吗?子项的多少与所增加的源程序的多少相同
单片机原理课程实验
实验一LED显示器指示
实验二软件延时及灯光控制实验
实验三多级外部中断实验
实验四脉冲频率的测量实验
实验五串行口扩展实验
实验六串行EEPROM的读出和写入实验
实验七8位A/D、D/A转换器的应用实验
实验八串行A/D、D/A的应用实验
实验九直流继电器的驱动及控制实验
实验十数据采集的软件抗干扰实验
(15)EEPROM
EEPROM(AT24C16),用来保存数据信息,接口序号为:串行数据线:SDA;时钟线:SCL;写保护线:WP。
单片机实训总结范文3篇
单片机实训总结范文3篇单片机实训工作总结怎么写?单片机实训课程是农业工程类专业非常重要的专业技术课,是后续专业实践课的基础,那对于单片机实训作为一名学生该如何写好总结呢?本文是小编为大家整理的单片机实训总结范文3篇_单片机实训工作总结范文,仅供参考。
单片机实训总结范文篇一:通过今次单片机实训,使我对单片机的认识有了更深刻的理解。
系统以51单片机为核心部件,利用汇编软件编程,通过键盘控制和数码管显示实现了基本时钟显示功能、时间调节功能,能实现本设计题目的基本要求和发挥部分。
由于时间有限和本身知识水平的限制,本系统还存在一些不够完善的地方,要作为实际应用还有一些具体细节问题需要解决。
例如:不能实现只用两个按键来控制时钟时间,还不能实现闹钟等扩展功能。
踉踉跄跄地忙碌了两周,我的时钟程序终于编译成功。
当看着自己的程序,自己成天相伴的系统能够健康的运行,真是莫大的幸福和欣慰。
我相信其中的酸甜苦辣最终都会化为甜美的甘泉。
但在这次实训中同时使我对汇编语言有了更深的认识。
当我第一次接触汇编语言就感觉很难,特别是今次实训要用到汇编语言,尽管困难重重,可我们还是克服了。
这次的实训使培养了我们严肃认真的做事作风,增强了我们之间的团队合作能力,使我们认识到了团队合作精神的重要性。
这次实训的经历也会使我终身受益,我感受到这次实训是要真真正正用心去做的一件事情,是真正的自己学习的过程和研究的过程,没有学习就不可能有研究的能力,没有自己的研究,就不会有所突破。
希望这次的经历能让我在以后学习中激励我继续进步。
单片机实训总结范文篇二:通过这一个学期的单片机学习,我收获了很多关于单片机的知识,并且这些知识和日常的生活息息相关。
了解了一些简单程序的录入,LED显示器、键盘、和显示器的应用和原理。
LED显示器:LED显示器是由发光二管组成显示字段的器件。
通常的8段LED显示器是由8个发光二极管组成,LED显示器分共阳极和共阴极两种。
有段选码和和位选码。
单片机实验心得体会(优秀13篇)
单片机实验心得体会(优秀13篇)(经典版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的经典范文,如合同协议、工作计划、活动方案、规章制度、心得体会、演讲致辞、观后感、读后感、作文大全、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!Moreover, our store provides various types of classic sample essays, such as contract agreements, work plans, activity plans, rules and regulations, personal experiences, speeches, reflections, reading reviews, essay summaries, and other sample essays. If you want to learn about different formats and writing methods of sample essays, please stay tuned!单片机实验心得体会(优秀13篇)心得体会是对所经历的事物的理解和领悟的一种表达方式,是对自身成长和发展的一种反思和总结。
单片机实验代码总结
单片机实验代码集合(by fangyuan)1.多字节累加程序:ORG 0000HLJMP MAINORG 0030H;将加数和被加数送到指定地址MAIN: MOV 20H,#45HMOV 21H,#74HMOV 30H,#67HMOV 31H,#28H;低位相加MOV A,21HADD A,31HDA AMOV 42H,A;高位相加MOV A,20HADDC A,30HDA AMOV 41H,ACLR AADDC A,#0MOV 40H,ASJMP $END2.数据交换实验编写程序,实现以下操作:【功能1】产生数组Hex1:0H、1H、2H、…0FH,存储到片内RAM区中,数组Hex1的首地址为30H。
【功能2】产生数组Hex2:0FH、0EH、0DH、…0H,存储到片外RAM区中,数组Hex2的首地址为3000H。
【功能3】将片内RAM数组Hex1与片外RAM数组Hex2交换内容。
代码:ORG 0000HHex1 EQU 30H ;定义内部RAM数组首地址Hex2 EQU 3000H ;定义外部RAM数组首地址LJMP MAINORG 0030HMAIN: MOV SP,#4FH ;定义栈顶地址MOV R7,#16MOV R0,#Hex1MOV DPTR,#Hex2LCALL HEX1DE ;调用内部送数据函数LCALL HEX2DE ;调用外部送数据函数LCALL XCHDE ;调用交换函数SJMP $ORG 0100H;内部送数据HEX1DE: PUSH 00HPUSH 07HMOV A,#0LOOP1: MOV @R0,AINC AINC R0DJNZ R7,LOOP1POP 07HPOP 00HRET;外部送数据HEX2DE: PUSH 07HPUSH DPLPUSH DPHMOV A,#0FHLOOP2: MOVX @DPTR,ADEC AINC DPTRDJNZ R7,LOOP2POP DPHPOP DPLPOP 07HRET;交换子程序XCHDE:LOOP3: MOVX A,@DPTRXCH A,@R0INC R0INC DPTRDJNZ R7,LOOP3RETEND3.查表实验1、《单片机原理及应用实验教程》(第2版)“第2章实验3”(P49)。
单片机实训报告范文精选5篇
单片机实训报告范文精选5篇实训报告是展示自身实训收获成长的重要报告,那么实训报告该如何写呢?小编精选了一些关于实训报告的优秀范例,一起来看看吧。
单片机课程设计心得体会在学校学习期间我有幸的参加了学校的单片机学习小组,在小组里我了解了什么是单片机,单片机有哪些用途,利用单片机可以实现哪些功能来方便人们的生活如交通灯,时钟,还有手机中,电子玩具等等,它们里面都有单片机的存在来实现某种功能。
通过在单片机小组里的学习我简单总结了几点心得和体会:第一:万事开头难,要勇敢的迈出第一步,不要总找借口说没有学习过就总推脱。
凡事都有第一步可以先可简单的来,然后可以逐步的向深层次学习。
可以从建项目开始,然后可以找一个简单的小程序先把它敲进单片机内然他运行起来,感觉一下单片机的运行,让自己了解单片机整个运行。
第二:对于知识点,学过的要掌握牢固,对于没有学的和暂时用不到的先不用学习。
比如:小灯得点亮就没有用到中断可以先不用看。
这样可以避免知识过多记不住的麻烦。
对于程序这里的知识点不能只停留在理论层次上,一定要结合着程序进行学习这样才能掌握的很牢靠,当用到哪里的知识点不记得了可以去看书,对于用不到的可以不去看。
第三:程序不要只是看别人得,一定要自己写过才是自己的。
开始不懂可以参考别人的,看看每一句代表着什么意思,能够实现什么现象。
明白之后自己再重新写一遍,你会发现看别人的能懂到自己写的时候很困难。
当你自己能写出来的时候说明你真懂了。
第四:一定要学会程序调试的方法。
有时候把程序写完了然后运行时不能实现理想的现象。
这时有人就晕了不知该怎么办,然后就去问别人。
当别人找出问题出在哪里时就会恍然大悟。
其实当遇到问题一定要自己尝试着解决,不能遇到问题就去问别人。
自己一定要掌握解决问的方法和思路。
第五:在学习初期看别人的代码,学习别人的思路这个很有用。
通过看别人的代码特别是有多年编程经验的人的程序,可以迅速提高自己的编程水平。
也可以结合着别人的手法,与自己的想法结合在一起写出更好的程序。
单片机实验报告总结
单片机实验报告总结单片机实验报告总结单片机实验心得体会单片机实验心得体会时间过得真快,不经意间,一个学期就到了尾声,进入到如火如荼的期末考试阶段。
在学习单片机这门课程之前,就早早的听各种任课老师和学长学姐们说过这门课程的重要性和学好这门课程的关键~~多做单片机实验。
这个学期,我们除了在课堂上学习理论知识,还在实验室做了7次实验。
将所学知识运用到实践中,在实践中发现问题,强化理论知识。
现在,单片机课程已经结束,即将开始考试了,需要来好好的反思和回顾总结下了。
第一次是借点亮LED灯来熟悉keil软件的使用和试验箱上器材。
第一次实验体现了一个人对新事物的接受能力和敏感度。
虽然之前做过许多种实验。
但依旧发现自己存在一个很大的问题,对已懂的东西没耐心听下去,容易开小差;在听老师讲解软件使用时,思路容易停滞,然后就跟不上老师的步骤了,结果需要别人再次指导;对软件的功能没有太大的热情去研究探索,把一个个图标点开,进去看看。
所以第一次试验相对失败。
鉴于此,我自己在宿舍下载了软件,然后去熟悉它的各个功能,使自己熟练掌握。
在做实验中,第二个问题应该是准备不充分吧。
一开始,由于没有课前准备的意识,每每都是到了实验室才开始编程,完成作业,导致每次时间都有些仓促。
后来在老师的批评下,认识到这是个很大的问题:老师提前把任务告诉我们,就是希望我们私下把程序编好。
于是我便在上机之前把程序编好,拷到U盘,这样上机时只需调试,解决出现的问题。
这样就会节约出时间和同学讨论,换种思路,换种方法,把问题给吃透。
发现、提出、分析、解决问题和实践能力是作为我们这个专业的基本素质。
三是我的依赖性很大,刚开始编程序时喜欢套用书上的语句,却对语句的理解不够。
于是当程序出现问题时,不知道如何修改,眼前的程序都是一块一块的被拼凑整合起来的,没法知道哪里错了。
但是编程是一件很严肃的事情,容不得半点错误。
于是便只能狠下决心,坚持自己编写,即使套用时,也把每条语句弄懂。
单片机学习总结与心得范文8篇
单片机学习总结与心得范文8篇第1篇示例:单片机学习总结与心得单片机作为嵌入式系统中的核心部件,是现代电子技术领域中不可或缺的部分。
在我学习单片机的过程中,我深刻感受到了它的重要性和广泛应用性。
通过不断的学习和实践,我积累了一些经验和心得,希望能与大家分享。
学习单片机需要具备一定的基础知识。
单片机是一种微型计算机,它具有微处理器、存储器和输入输出设备等基本部件。
对计算机原理、数字电路等基础知识的掌握是必不可少的。
在学习过程中,要注重理论与实践相结合,通过动手实践来加深对知识的理解和掌握。
学习单片机需要有耐心和毅力。
单片机编程是一项复杂而繁琐的工作,常常需要反复试验和调试才能达到理想的效果。
在遇到问题和困难时,不要灰心丧气,要持之以恒,不断尝试和学习。
只有通过不断地实践和积累经验,才能逐渐掌握单片机编程的技巧和方法。
学习单片机需要注重团队合作。
单片机项目通常需要多人合作完成,每个人负责不同的部分。
在团队合作中,要注重沟通和协作,共同协商解决问题,避免出现分歧和矛盾。
只有团结一致,大家才能共同完成任务,取得成功。
学习单片机要保持好奇心和求知欲。
单片机技术是一个不断发展和进步的领域,新的技术和方法不断涌现。
要保持学习的热情和积极性,不断更新知识,跟上技术的发展。
只有不断学习和探索,才能不断提高自己的技术水平和能力。
学习单片机是一个磨砺意志和提升能力的过程。
通过学习单片机,我不仅增加了对电子技术的了解和掌握,还培养了坚韧不拔的毅力和团队合作的精神。
我相信,在未来的学习和工作中,这些经验和心得将对我产生重要的影响和帮助。
第2篇示例:单片机学习总结与心得学习单片机需要扎实的基础知识。
单片机涉及到很多的电子元器件和原理,例如电路基础、数字电子技术、模拟电子技术等,对这些知识的掌握是学习单片机的前提。
在学习的过程中,要多看书、多动手实践,加强对基础知识的理解和掌握,这样才能更好地应用到实际项目中。
学习单片机需要不断实践,善于总结经验。
单片机常用代码大全
1、位码(共阴):0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f2、断码(共阳):0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x713、独立管码(共阳):0x02,0x9e,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08,0x10,0xc0,0x62,0x84,0x60,0x704、循环函数intrins_crol_字符循环左移_cror_字符循环右移_irol_整数循环左移_iror_整数循环右移_lror_长整数循环左移_lror_长整数循环右移_nop_空操作8051 NOP 指令_testbit_测试并清零位8051 JBC 指令5、中段代码interrupt 0 外部中断0interrupt 1 定时器0中断interrupt 2 外部中断1interrupt 3 定时器1中断interrupt 4 串口中断interrupt 5 定时器2中断(52里面,51没有)6、IIC总线开始信号:void IICstart(){scl=1;delay();sda=1;delay();sda=0;delay();scl=0;}结束信号void IICstop(){scl=1;delay();sda=0;delay();sda=1;}应答信号void IICyingda(){uchar j;scl=1;delay();while((sda==1)&&j<250)j++;//sda=0;//delay();scl=0;delay();}写信号(写入一8位数据)void write_byte(uchar w){uchar i,temp;temp=w;for(i=0;i<8;i++){scl=0;delay();temp=temp<<1;sda=CY;delay();scl=1;delay();}scl=0;delay();sda=0;delay();}读信号(读出一个8位数据)uchar read_byte(void){uchar i,j,k;sda=1;for(i=0;i<8;i++){scl=1;delay();j=sda;k=(k<<1)|j;scl=0;delay();}scl=0;delay();return k;}7、时钟调试键盘扫描void keyscan(){if(k1==0){delay(5);if(k1==0){while(!k1); //k1num++;}if(k1num==1){TR0=0;write_zhiling(0x80+0x40+11);write_zhiling(0x0f);}if(k1num==2){TR0=0;write_zhiling(0x80+0x40+8);}if(k1num==3){TR0=0;write_zhiling(0x80+0x40+5);}if(k1num==4){k1num=0;write_zhiling(0x0c);TR0=1;//}}if(k1num!=0){if(k2==0){delay(5);if(k2==0){while(!k2);if(k1num==1){miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;write_jingwei(7,fen);}write_jingwei(10,miao);write_jingwei(7,fen);write_zhiling(0x80+0x40+11);}write_jingwei(10,miao);write_zhiling(0x80+0x40+11);}if(k1num==2){fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;write_jingwei(4,shi);}write_jingwei(7,fen);write_jingwei(4,shi);write_zhiling(0x80+0x40+8);}write_jingwei(7,fen);write_zhiling(0x80+0x40+8);}if(k1num==3){shi++;if(shi==24){shi=0;write_jingwei(4,shi);write_zhiling(0x80+0x40+5);}write_jingwei(4,shi);write_zhiling(0x80+0x40+5);}}}}if(k1num!=0){if(k3==0){delay(5);if(k3==0){while(!k3);if(k1num==1){miao--;if(miao==-1){miao=59;fen--;if(fen==-1){fen=59;write_jingwei(7,fen);}write_jingwei(10,miao);write_jingwei(7,fen);write_zhiling(0x80+0x40+11);}write_jingwei(10,miao);write_zhiling(0x80+0x40+11); }if(k1num==2){fen--;if(fen==-1){fen=59;shi--;if(shi==-1){shi=23;write_jingwei(4,shi);}write_jingwei(7,fen);write_jingwei(4,shi);write_zhiling(0x80+0x40+8);}write_jingwei(7,fen);write_zhiling(0x80+0x40+8); }if(k1num==3){shi--;if(shi==-1){shi=23;write_jingwei(4,shi);write_zhiling(0x80+0x40+5);}write_jingwei(4,shi);write_zhiling(0x80+0x40+5);}}}}}。
单片机实训心得体会(合集11篇)
单片机实训心得体会(合集11篇)单片机实训心得体会1很多人说,学单片机最好先学汇编语言,以我的经验告诉大家,绝对没有这个必要,初学者一开始就直接用C语言为单片机编程,既省时间,学起来又容易,进步速度会很快。
在刚开始学单片机的时候,千万不要为了解单片机内部结构而浪费时间,这样只能打击你的信心,当你学会编程后,自然一步步就掌握其内部结构了。
单片机提高重在实践,想要学好单片机,软件编程必不可少。
但是熟悉硬件对于学好单片机的也是非常重要的。
如何学习好硬件,动手实践是必不可少的。
我们可以通过自己动手做一个自己的电子制作,通过完成它,以提高我的对一些芯片的了解和熟练运用它。
这样我们就可以多一些了解芯片的结构。
我相信,你完成了一个属于自己的电子制作,你的单片机水平就会有一个质的提高。
这就是我学习单片机的心得体会,希望给单片机的爱好者学好单片机有所帮助。
使用单片机就是理解单片机硬件结构,以及内部资源的应用,在汇编或C语言中学会各种功能的初始化设置,以及实现各种功能的程序编制。
第一步:数字I/O的使用。
显示输出电平,就可以学习引脚的数字I/O功能,在按下某个按钮后,某发光二极管发亮,这就是数字电路中组合逻辑的功能,虽然很简单,但是可以学习一般的单片机编程思想,例如,必须设置很多寄存器对引脚进行初始化处理,才能使引脚具备有数字输入和输出输出功能。
每使用单片机的一个功能,就要对控制该功能的寄存器进行设置,这就是单片机编程的特点,千万不要怕麻烦,所有的单片机都是这样。
第二步:定时器的使用。
学会定时器的使用,就可以用单片机实现时序电路,时序电路的功能是强大的,在工业、家用电气设备的控制中有很多应用,例如,可以用单片机实现一个具有一个按钮的楼道灯开关,该开关在按钮按下一次后,灯亮3分钟后自动灭,当按钮连续按下两次后,灯常亮不灭,当按钮按下时间超过2s,则灯灭。
数字集成电路可以实现时序电路,可编程逻辑器件(PLD)可以实现时序电路,可编程控制器(PLC)也可以实现时序电路,但是只有单片机实现起来最简单,成本最低。
单片机开发与实训演示代码
单片机开发与实训演示代码全文共四篇示例,供读者参考第一篇示例:在单片机开发和实训演示代码中,我们通常会使用一些常见的单片机开发平台,比如基于STMicroelectronics公司的STM32系列单片机的开发板。
STM32系列单片机是一种性能优越的单片机,拥有丰富的外设和强大的性能,非常适合用于各种复杂的应用场景。
在进行单片机开发和实训演示代码时,我们通常会使用一些常见的开发工具,比如Keil C51开发环境、ST-Link调试器等。
这些工具可以帮助开发者更加高效地进行单片机程序的编写和调试,提高开发效率和代码质量。
接下来,我们将介绍一些常见的单片机开发与实训演示代码例程,希望可以帮助读者更好地理解和掌握单片机开发技术。
1. LED闪烁实验LED闪烁实验是单片机开发中的一个最基础的实验,通过控制单片机的IO口来驱动LED灯实现闪烁的效果。
以下是一个基于STM32单片机的LED闪烁实验代码:```c#include "stm32f10x.h"#define LED_PIN GPIO_Pin_5#define LED_GPIO GPIOAvoid LED_Init(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = LED_PIN;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(LED_GPIO, &GPIO_InitStructure);}在这个代码中,我们首先调用了LED_Init函数来初始化LED的GPIO口,使其为输出模式。
51单片机实验代码
一、实验目的掌握汇编语言设计和调试方法,熟悉键盘操作。
二、实验内容把2000H~20FFH的内容清零。
三、实验程序框图四、实验步骤用连续或单步的方式运行程序,检查2000~20FF中执行程序前后的内容变化。
五、思考假使把2000H~20FFH中的内容改成FF,如何修改程序。
六、程序清单文件名:SW01.ASMORG 0000HLJMP SE01ORG 0640HSE01: MOV R0,#00HMOV DPTR,#2000H ;(0000H)送DPTRLOO1: CLR AMOVX @DPTR,A ;0送(DPTR)INC DPTR ;DPTR+1INC R0 ;字节数加1CJNE R0,#00H,LOO1 ;不到FF个字节再清LOOP: SJMP LOOPEND一、实验目的掌握汇编语言设计和调试方法二、实验内容把2000H的内容拆开,高位送2001H低位,低位送2002H低位,2001H、2002H高位清零,一般本程序用于把数据送显示缓冲区时用。
三、实验程序框图四、实验步骤用连续或单步方式运行程序,检查2000H~2002H中内容变化情况。
五、思考如何用断点方式调试本程序六、程序清单文件名:SW02.ASMORG 0000HLJMP SE02ORG 0660HSE02: MOV DPTR,#2000HMOVX A,@DPTRMOV B,A ;(2000)→A→BSWAP A ;交换ANL A,#0FH ;屏蔽高位INC DPTRMOVX @DPTR,A ;送2001HINC DPTRMOV A,BANL A,#0FH ;(2000)内容屏蔽高位MOVX @DPTR,A ;送2002HLOOP: JMP LOOPEND实验四数据区传送子程序一、实验目的掌握RAM中的数据操作二、实验内容把R2、R3源RAM区首地址内的R6、R7字节数据传送到R4、R5目的RAM区。
三、实验程序框图四、实验步骤在R2、R3中输入源首址(例如0000H),R4、R5中输入的目的地址(例如2000H),R6、R7中输入字节数(例如1FFFH),运行程序,检查0000H~1FFFH中内容是否和2000H~3FFFH 中内容完全一致。
单片机实验报告总汇
单片机技术及应用实验报告学院电子信息工程学院专业电子信息工程学号姓名实验一:流水灯实验一、实验目的:通过对P3口地址的操作控制8位LED流水点亮,从而认识单片机的存储器。
二、实验原理图三、参考实验程序#include<reg51.h> sfr x=0xb0;void delay(void){unsigned char i,j; for(i=0;i<250;i++) for(j=0;j<250;j++); }void main(void) {while(1){x=0xfe;delay();x=0xfd;delay(); x=0xfb; delay(); x=0xf7; delay(); x=0xef; delay(); x=0xdf; delay(); x=0xbf; delay(); x=0x7f; delay(); }}四、思考题#include<reg51.h> sfr x=0xb0;void delay(void){unsigned char i,j; for(i=0;i<250;i++) for(j=0;j<250;j++); }void main(void){while(1){x=0x7e; delay(); x=0xbc; delay(); x=0xcb; delay(); x=0xe7; delay(); x=0xe7; delay(); x=0xcb; delay(); x=0xbc; delay(); x=0x7e; delay(); }}五、实验结果图六、实验总结通过本次的实验,我了解了单片机的原理,基本会了ISIS7和keil的操作。
并且认识到这个单片机实验不仅构图连线要正确,更重要的是程序的编写编译。
只有当构图与程序都正确的时候,才能得到正确的实验结果。
实验二:中断实验一、实验目的通过对P3.2、P3.3引脚的电平控制,实现外部中断处理,从而控制输出口P1的输出效果变化。
单片机实训报告总结
单片机实训报告总结篇一:51单片机实训报告“51单片机”精简开发板的组装及调试实训报告为期一周的单片机实习已经结束了。
通过此次实训,让我们掌握了单片机基本原理的基础、单片机的编程知识以及初步掌握单片机应用系统开发实用技术,了解“51”单片机精简开发板的焊接方法。
同时培养我们理论与实践相结合的能力,提高分析问题和解决问题的能力,增强学生独立工作能力;培养了我们团结合作、共同探讨、共同前进的精神与严谨的科学作风。
此次实训主要有以下几个方面:一、实训目的1.了解“51”精简开发板的工作原理及其结构。
2.了解复杂电子产品生产制造的全过程。
3.熟练掌握电子元器件的焊接方法及技巧,训练动手能力,培养工程实践概念。
4.能运用51单片机进行简单的单片机应用系统的硬件设计。
5.掌握单片机应用系统的硬件、软件调试方法二、实验原理流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的硬件组成的单个单片机。
它的电气性能指标:输入电压:~6V,典型值为5V。
可用干电池组供电,也可用直流稳压电源供电。
如图所示:本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的硬件组成的单个单片机。
三、硬件组成1、晶振电路部分单片机系统正常工作的保证,如果振荡器不起振,系统将会不能工作;假如振荡器运行不规律,系统执行程序的时候就会出现时间上的误差,这在通信中会体现的很明显:电路将无法通信。
他是由一个晶振和两个瓷片电容组成的,x1和x2分别接单片机的x1和x2,晶振的瓷片电容是没有正负的,注意两个瓷片电容相连的那端一定要接地。
2、复位端、复位电路给单片机一个复位信号(一个一定时间的低电平)使程序从头开始执行;一般有两中复位方式:上电复位,在系统一上电时利用电容两端电压不能突变的原理给系统一个短时的低电平;手动复位,同过按钮接通低电平给系统复位,时如果手按着一直不放,系统将一直复位,不能正常。
单片机实验代码
;////////////////////////////////////////////////////////;按键功能说明;K1 键显示界面切换默认显示时间:时分秒;K2 键显示时间的时候,进行时间调整,调时按键;K3 键显示时间的时候,进行时间调整,调分按键;K4 键显示日期的时候,进行日期调整,调年按键;K5 键显示日期的时候,进行日期调整,调月按键;K6 键显示日期的时候,进行日期调整,调日按键;程序有待优化。
谢谢使用。
;MADE BY QIANZHAO;QQ: 454800714;////////////////////////////////////////////////////////SDA BIT P1.7;I2C 总线定义SCL BIT P1.6RST BIT P1.0KEY_INT BIT P3.2MTD EQU 58H ;发送数据缓冲器MRD EQU 34H ;接收数据缓冲区;定义器件地址,变ZLG7290 EQU 70H ;ZLG7290 的器件地址ACK BIT 10H ;应答标志位SLA DA TA 50H ;器件的从地址SUBA DATA 51H ;器件的子地址NUMBYTE DATA 52H ;读/写的字节数变量disp_buf EQU 60Hswich_date BIT 12HDA TALABLEBIT 13HTIMELABLE BIT 14HORG 8000HLJMP MAINORG 800BHLJMP TIMER_0ORG 8003HLJMP INT_0ORG 8300H$INCLUDE(VI2C_ASM.INC) ;包含VIIC 软件包MAIN:MOV SP,#70H;--使用T0 定时初始化--;MOV IP,#02HMOV IE,#82HMOV 20H,#12H;--使用T0 定时初始化--;CLRA;初始化赋初值时间MOV 36H,#12HMOV 35H,#30HMOV 34H,#45H;初始化赋初值日期MOV 37H,#20HMOV 38H,#05HMOV 39H,#12H;初始化赋初值MOV TMOD,#01HMOV TH0,#3CHMOV TL0,#0B0HSETB TR0;开INT0 中断SETB EX0SETB IT0SETB EA;----------------对zlg7290 的初始化操作----; CLRRSTLCALL DELAYSETB RSTLCALL DELAY;--------MAINLOOP:MOV SLA,#ZLG7290 ;指定器件地址MOV SUBA,#01H ;指定子地址MOV NUMBYTE,#02H ;发送2 字节数据LCALL IWRNBYTE ;调用写2 字节数据程序LCALL DELAYMOV R6,38HCJNE R6,#4,C1AJMP C0C1:CJNE R6,#6,C2AJMP C0C2:CJNE R6,#9,C3AJMP C0C3:CJNE R6,#11H,C4AJMP C0C4:CJNE R6,#2,C6AJMP C5C0:MOV A,37HCJNE A,#31H,WW1MOV 37H,#01HSJMP WW2C5:MOV A,37HCJNE A,#29H,WW1MOV 37H,#01HSJMP WW2C6:MOV A,37HCJNE A,#32H,WW1MOV 37H,#01HSJMP WW2WW2:MOV A,#01HADDA,38HDAAMOV 38H,ACJNEA,#13H,WW1MOV 38H,#01HMOV A,#01HADDA,39HDAAMOV 39H,ACJNEA,#99H,WW1MOV 39H,#00HWW1:SJMP JUMP;选择界面显示JUMP: JB swich_date,display_time SJMP display_dateLOOP1:JNB KEY_INT,KEY_HANDLE SJMP MAINLOOPKEY_HANDLE:;执行中断程序LJMP INT_0;要显示日期数据处理display_date:MOV A,MRD+3ANL A,#0x7fMOV MRD+3,AMOV A,MRD+4ANL A,#0x7fMOV MRD+4,A MOV A,MRD+3ANL A,#0X0FMOV disp_buf,A MOV A,MRD+3 SWAP AANL A,#0X0FMOV disp_buf+1,A MOV A,MRD+4ANL A,#0X0FADD A,#0X80MOV disp_buf+2,A MOV A,MRD+4 SWAP AANL A,#0X0FMOV disp_buf+3,A MOV A,MRD+5ANL A,#0X0FADD A,#0X80MOV disp_buf+4,A MOV A,MRD+5 SWAP AANL A,#0X0FMOV disp_buf+5,A MOV disp_buf+6,#00H MOV disp_buf+7,#02H SJMP DISPLAY;要显示时间数据处理display_time:MOV A,MRDANL A,#0x7fMOV MRD,AMOV A,MRD+1ANL A,#0x7fMOV MRD+1,A MOV A,MRD+2ANL A,#0x3fMOV MRD+2,A MOV A,MRDANL A,#0X0FMOV disp_buf,A MOV A,MRDSWAP AANL A,#0X0FMOV disp_buf+1,AMOV A,MRD+1ANL A,#0X0FMOV disp_buf+3,AMOV A,MRD+1SWAP AANL A,#0X0FMOV disp_buf+4,AMOV A,MRD+2ANL A,#0X0FMOV disp_buf+6,AMOV A,MRD+2SWAP AANL A,#0X0FMOV disp_buf+7,AMOV disp_buf+2,#1FHMOV disp_buf+5,#1FHDISPLAY:MOV R7,#0X08MOV R1,#disp_bufMOV A,#0X60DISLOOP:MOV MTD,APUSH ACCMOV 31H,R1MOV 30H,R7MOV MTD+1,@R1MOV SLA,#ZLG7290 ;指定器件地址MOV SUBA,#07H ;指定子地址MOV NUMBYTE,#02H ;发送2 字节数据LCALL IWRNBYTE ;调用读2 字节数据程序LCALL DELAYMOV R1,31HMOV R7,30HPOPACCINC R1INC ADJNZ R7,DISLOOPLJMP LOOP1;T0 中断程序开始TIMER_0:PUSHACCPUSH PSW ;保护现场MOV TH0,#3CHMOV TL0,#0B0HDJNZ 20H,RETI1MOV 20H,#12HMOV A,#01HADDA,34HDAAMOV 34H,ACJNEA,#60H,RETI1MOV 34H,#00HMOV A,#01HADDA,35HDAAMOV 35H,ACJNEA,#60H,RETI1MOV 35H,#00HMOV A,#01HADDA,36HDAAMOV 36H,ACJNEA,#24H,RETI1MOV 36H,#00HINC 37HRETI1:POP PSWPOPACCRETI;INT0 中断程序?INT_0:PUSHACCPUSH PSW ;保护现场PUSH MRDMOV SLA,#ZLG7290 ;指定器件地址MOV SUBA,#01H ;指定子地址MOV NUMBYTE,#01H ;发送2 字节数据LCALL IRDNBYTE ;调用写2 字节数据程序LCALL DELAYMOV A,MRDCJNE A,#01,SHOWDATACPLswich_dateLJMP RETI2SHOWDATA:CJNE A,#02,ADJUSTHOUR ;小时调整MOV A,#01HADD A,36HDA AMOV 36H,ACJNE A,#36,NH28MOV 36H,#0NH28:LJMP RETI2ADJUSTHOUR:CJNE A,#03,ADJUSTYEAR ;分钟调整MOV A,#01HADDA,35HDAAMOV 35H,ACJNEA,#96,NM60MOV 35H,#0NM60:LJMP RETI2ADJUSTYEAR:CJNE A,#04,ADJUSTMONTH ;年调整JB swich_date,ADJUSTMOV A,#01HADDA,39HDAAMOV 39H,ACJNEA,#255,NH26MOV 39H,#0NH26: SJMP RETI2 ADJUSTMONTH: ;月调整CJNE A,#05,ADJUSTDAYJB swich_date,ADJUSTMOV A,#01HADDA,38HDAAMOV 38H,ACJNEA,#19,NH38MOV 38H,#1NH38: SJMP RETI2 ADJUSTDAY: ;日调整CJNE A,#06,ADJUSTJB swich_date,ADJUSTMOV A,#01MOV R6,38HCJNE R6,#4,V1V1:MOV R6,38HCJNE R6,#6,V2;是不是6 月AJMP V0V2:MOV R6,38HCJNE R6,#9,V3;是不是9 月AJMP V0V3:MOV R6,38HCJNE R6,#11H,V4 ;是不是11 月AJMP V0V4:MOV R6,38HCJNE R6,#2,V6;是不是2 月AJMP V5V0:ADDA,37HDAAMOV 37H,ACJNEA,#31H,NH48MOV 37H,#1SJMP RETI2V5:ADDA,37HDAAMOV 37H,ACJNEA,#30H,NH48MOV 37H,#1SJMP RETI2V6:ADDA,37HDAAMOV 37H,ACJNEA,#32H,NH48MOV 37H,#1SJMP RETI2NH48:SJMP RETI2ADJUST:SJMP RETI2RETI2:POP MRDPOPACCRETI;ZLG7290 要求延时DELAY:MOV R7,#80HMIN:DJNZ R7,YS500 RETYS500: LCALL YS500US LJMP MINYS500US:MOV R6,#80H DJNZ R6,$RETDELAY1: MOV R7,#20H DJNZ R7,$RETEND。
单片机实训知识总结报告
摘要:单片机实训是计算机科学与技术、自动化控制等相关专业的重要实践环节。
通过对单片机系统的设计与实现,使学生对单片机的原理、编程和应用有更深入的了解。
本文总结了单片机实训过程中所涉及的知识点,包括单片机硬件结构、指令系统、编程方法、应用领域等,旨在为学生提供一份全面、实用的单片机实训知识总结。
一、单片机硬件结构1. 中央处理单元(CPU):单片机的核心部件,负责执行指令、控制程序运行。
2. 存储器:包括程序存储器(ROM)和数据存储器(RAM),用于存储程序和数据。
3. 输入/输出接口:实现单片机与外部设备之间的数据交换。
4. 定时器/计数器:用于产生定时信号、实现定时功能。
5. 外部设备:如键盘、显示器、传感器等,为单片机提供输入和输出。
二、单片机指令系统1. 数据传送指令:用于实现数据在寄存器、存储器之间的传送。
2. 算术运算指令:用于实现加、减、乘、除等算术运算。
3. 逻辑运算指令:用于实现逻辑与、或、非等运算。
4. 控制指令:用于实现程序分支、循环等控制功能。
5. 输入/输出指令:用于实现单片机与外部设备之间的数据交换。
三、单片机编程方法1. 汇编语言编程:直接对单片机的指令集进行编程,具有执行效率高、占用资源少等优点。
2. C语言编程:使用C语言进行编程,易于理解、便于维护,适用于复杂程序设计。
3. 面向对象编程:使用面向对象的方法进行编程,提高程序的可读性和可维护性。
四、单片机应用领域1. 工业控制:如电机控制、生产线自动化等。
2. 消费电子:如手机、家用电器等。
3. 医疗设备:如血压计、血糖仪等。
4. 交通工具:如汽车、火车等。
5. 家居安防:如门禁系统、监控设备等。
五、实训内容与总结1. 实训内容:(1)单片机基本硬件认识:了解单片机的结构、引脚功能等。
(2)单片机编程:使用汇编语言或C语言编写程序,实现特定功能。
(3)单片机应用系统设计:设计并实现一个完整的单片机应用系统。
(4)调试与优化:对程序进行调试,提高程序运行效率。
单片机实验报告(学期全部实验)
单片机程序设计实验报告姓名:学号:专业班级:第二节课:实验一:1357,2468位置的灯交替闪烁一实验要求1357,2468位置的灯交替闪烁。
二硬件连接图与结果三原理简述程序直接控制LED各位置的灯亮灭,时间间隔简单的用了一个延时的语句。
四程序#include<reg51.h>main (){int i;P0=0XAA; //1357四个灯亮for (i=0;i<=25000;i++); //延时程序P0=0X55; //2468四个灯亮for (i=0;i<=25000;i++); //延时程序}五所遇问题与解决方式程序比较简单,没有遇到问题。
实验二:流水灯一实验要求流水灯,一个接一个的灯亮,亮到最后一个后,全部的灯亮,然后重头开始。
二硬件连接图与结果三原理简述程序定义第一个位置的灯亮,通过一个时间间隔,运用一个循环移位程序转移到下一个灯,移位7次后全部的灯亮,最后定义整个循环。
时间间隔简单的用了一个延时的语句。
因为移位时是直接补0,发送低电平不亮,所以直接移位达到要求。
四程序//流水灯#include<reg51.h>main (){int i,j;while(1){P0=0X01; //第1个灯亮for (i=0;i<=30000;i++); //延时程序for(j=0;j<=7;j++) //移位循环程序{P0=P0<<1; //移位for (i=0;i<=30000;i++); //延时程序}P0=0xff; //全亮for (i=0;i<=30000;i++); //延时程序}}五所遇问题与解决方式程序比较简单,没有遇到问题。
实验三:跑马灯一实验要求一个接一个的灯亮,前面亮过的等依旧亮,直到最后一个灯,最后重新开始,循环。
二硬件连接图与结果三原理简述程序定义第一个位置的灯亮,通过一个时间间隔,运用一个循环移位程序转移到下一个灯,移位7次后全部的灯亮,最后定义整个循环。
哈工大单片机实验代码(张毅刚版教材)(10个)
电路图用张毅刚版教材里给的图!!!!1、流水灯#include<reg52.h>#include<intrins.h>void delay(){unsigned char i,j;for(i=0;i<255;i++)for(j=0;j<255;j++);}void main(){P2=0xfe;while(1){P2=_crol_(P2,1);delay();}}2、单个外部中断#include<reg52.h>#include<intrins.h>void delay(unsigned char delay_time){unsigned int i,j;for(i=0;i<=delay_time;i++)for(j=0;j<=100;j++);}void init_tx(){EA=1;EX0=1;IT0=0;}void main(){P1=0x00;init_tx();delay(200);while(1){P1=~P1;delay(200);}}void tx0() interrupt 0{P1=0xfe;while(!INT0){P1=_crol_(P1,1);delay(200);}P1=0xff;}3、定时器#include<reg52.h>unsigned char t=20;sbit button=P3^2;sbit yellowled=P1^0;/* 定义接口*/void main(){TMOD=0x01;/* 选择中断方式*/ EA=1;ET0=1;TH0=0x3c;TL0=0x0b;while(button==0){TR0=1;}yellowled=1;}void tx() interrupt 1{TH0=0x3c;TL0=0xb0;t--;if(t==0){yellowled=~yellowled;t=20;}}4、双机串行通信#include<reg51.h>#define uchar unsigned char#define uint unsigned int#define outk P1#define out1 P0#define out2 P2uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; uchar key,send,rec;uchar scan(void);void delay(unit);void main(void){TMOD=0X20; TH1=0XF2;/* 设置定时器T1 为方式/* 给定时器T1 赋初值 */2*/TH1=0XF2;TR1=1;/* 接通定时器T1*/SCON=0X50;/* 串行口方式1, REN=1允许接收*/ PCON=0X00;/* SMOD=0*/EA=1;ES=1;EX1=1;EX0=1;while(1){outk=0x07;out1=seg[send];out2=seg[rec];}}uchar scan(void){uchar k=10,m,n,in;delay(10);outk=0x07;if((outk&0x07)!=0x07){for(m=0;m<3;m++){outk=~(0x01<<(m+3));for(n=0;n<3;n++){in=outk;in=in>>n;if((in&0x01)==0){if((in&0x01)==0){k=n+m*3;break;}}}if(k!=10)break;}}return(k);}void delay(uint j){uchar i;for(;j>0;j--){i=250;while(--i);i=249;while(--i);}}void ext0()interrupt 0{EX0=0;key=scan();if(key!=10)send=key+1;EX0=1;}void ext1()interrupt 2{ES=0;SBUF=send;while(!TI);TI=0;ES=1;}void com()interrupt 4{RI=0;rec=SBUF;}5、单片机与PC 串行通信#include <reg51.h>void send(unsigned char dat) {SBUF=dat;while(TI==0);;TI=0;}void init_tx(){EA=1;EX0=1;}void delay(void){unsigned char m,n;for(m=0;m<250;m++)for(n=0;n<250;n++);}void main(void){init_tx();TMOD=0x20;SCON=0x40;PCON=0x00;TH1=0xfd;TL1=0xfd;TR1=1;while(1);}void tx0() interrupt 0{unsigned char i=0;send(0x01);delay();i++;}6、扩展 82c55 并行 IO 接口#include<reg51.h>#include<absacc.h>#define uchar unsigned char #define uint unsigned intsbit rst_8255=P3^5;#define con_8255XBYTE[0x7003] #define pa_8255XBYTE[0x7000] #define pb_8255XBYTE[0x7001] void reset_8255(void);void delay(uint);void main(void){/*0x7003 为 82C55 的控制寄存器地址/* 以下定义pa、pb 的端口地址 */*/uchar temp;rst_8255=1;delay(1);rst_8255=0;con_8255=0x82;while(1){/* 复位 */temp=pb_8255;pa_8255=temp;/* 锁存 */}}void delay(uint j)/* 延时函数*/{uchar i;for(;j>0;j--){i=250;while(--i);i=249;while(--i);}}7、矩阵键盘#include<reg51.h>unsigned char codetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; void delay(){unsigned char i,j;(延时)for(i=0;i<=25;i++)for(j=0;j<=25;j++);}unsigned char key_scan(){unsigned char key0,key1;unsigned char key_num=0;P1=0x0f; 先将 p1.0~P1.3 置高key0=P1;if(key0!=0x0f) 如果 P1.4~P1.7 不全为 1,可能有键按下{delay();key0=P1;if(key0!=0x0f){P1=0xf0;key1=P1;if(key0==0x0e){switch(key1){case 0xe0: key_num=0;break;case 0xd0: key_num=1;break;case 0xb0: key_num=2;break;case 0x70: key_num=3;break;default: key_num=0;break;}}else if(key0==0x0d){switch(key1){case 0xe0: key_num=4;break;case 0xd0: key_num=5;break; ( 处理 5 号键 )case 0xb0: key_num=6;break;case 0x70: key_num=7;break;default: key_num=0;break;(无效按键,如多个键同时按下)}}else if(key0==0x0b){switch(key1){case 0xe0: key_num=8;break;case 0xd0: key_num=9;break;case 0xb0: key_num=10;break;case 0x70: key_num=11;break;default: key_num=0;break;}}else if(key0==0x07){switch(key1){case 0xe0: key_num=12;break;case 0xd0: key_num=13;break;case 0xb0: key_num=14;break;case 0x70: key_num=15;break;default: key_num=0;break;}}}}return key_num;}void main(){unsigned char key_num;do{key_num=key_scan();P2=table[key_num];}while(1);}8、 1602 液晶显示#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define out P0sbit RS=P2^0;sbit RW=P2^1;sbit E=P2^2;void lcd_initial(void);void check_busy(void);void write_command(uchar com);void write_data(uchar dat);void string(uchar ad,uchar *s);void lcd_test(void);void delay(uint);void main(void){lcd_initial();while(1){string(0x82,"Hello Welcome");string(0xC2,"To China");delay(100);write_command(0x01);delay(100);}}void delay(uint j){uchar i=250;for(;j>0;j--){while(--i);i=249;while(--i);i=250;}}void check_busy(void){uchar dt;do{dt=0xff;E=0;RS=0;RW=1;E=1;dt=out;}while(dt&0x80);E=0;}void write_command(uchar com){check_busy();E=0;RS=0;RW=0;out=com;E=1;_nop_();E=0;delay(1);}void write_data(uchar dat){check_busy();E=0;RS=1;RW=0;out=dat;E=1;_nop_();E=0;delay(1);}void lcd_initial(void){write_command(0x3c);write_command(0x0C);write_command(0x14);write_command(0x01);delay(1);}void string(uchar ad,uchar *s) {write_command(ad);while(*s>0){write_data(*s++);delay(100);}}9、 DA 转换#include<reg51.h>#define uchar unsigned char#define uint unsigned int#define out P1sbit DAC_cs=P2^0;sbit DAC_wr=P2^1;void main(void){uchar temp,i=255;while(1){{out=temp;DAC_cs=0; DAC_wr=0;/* 片选端,芯片被选中/* 选通,并被锁存*/*/DAC_cs=1;/* 以下开始转换*/DAC_wr=1;temp++;while(--i);/* 延时函数!!,老师帮改的*/}}}10、 AD 转换#include<reg51.h>#define uchar unsigned char#define uint unsigned int#define LED P0#define out P1sbit start=P2^1;sbit OE=P2^7;sbit EOC=P2^3;sbit CLOCK=P2^0;sbit add_a=P2^4;sbit add_b=P2^5;sbit add_c=P2^6;void main(void){uchar temp;add_a=0;add_b=0;add_c=0;while(1){start=0;start=1;start=0;while(1){CLOCK=!CLOCK;if(EOC==1){break;}OE=1;temp=out;OE=0;LED=temp;}}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机实验代码集合(by fangyuan)1.多字节累加程序:ORG 0000HLJMP MAINORG 0030H;将加数和被加数送到指定地址MAIN: MOV 20H,#45HMOV 21H,#74HMOV 30H,#67HMOV 31H,#28H;低位相加MOV A,21HADD A,31HDA AMOV 42H,A;高位相加MOV A,20HADDC A,30HDA AMOV 41H,ACLR AADDC A,#0MOV 40H,ASJMP $END2.数据交换实验编写程序,实现以下操作:【功能1】产生数组Hex1:0H、1H、2H、…0FH,存储到片内RAM区中,数组Hex1的首地址为30H。
【功能2】产生数组Hex2:0FH、0EH、0DH、…0H,存储到片外RAM区中,数组Hex2的首地址为3000H。
【功能3】将片内RAM数组Hex1与片外RAM数组Hex2交换内容。
代码:ORG 0000HHex1 EQU 30H ;定义内部RAM数组首地址Hex2 EQU 3000H ;定义外部RAM数组首地址LJMP MAINORG 0030HMAIN: MOV SP,#4FH ;定义栈顶地址MOV R7,#16MOV R0,#Hex1MOV DPTR,#Hex2LCALL HEX1DE ;调用内部送数据函数LCALL HEX2DE ;调用外部送数据函数LCALL XCHDE ;调用交换函数SJMP $ORG 0100H;内部送数据HEX1DE: PUSH 00HPUSH 07HMOV A,#0LOOP1: MOV @R0,AINC AINC R0DJNZ R7,LOOP1POP 07HPOP 00HRET;外部送数据HEX2DE: PUSH 07HPUSH DPLPUSH DPHMOV A,#0FHLOOP2: MOVX @DPTR,ADEC AINC DPTRDJNZ R7,LOOP2POP DPHPOP DPLPOP 07HRET;交换子程序XCHDE:LOOP3: MOVX A,@DPTRXCH A,@R0INC R0INC DPTRDJNZ R7,LOOP3RETEND3.查表实验1、《单片机原理及应用实验教程》(第2版)“第2章实验3”(P49)。
要求:16进制数(00H~0FH)ASCⅡ码表定义在内部ROM中(用伪指令定义);R0为片内RAM区Hex 数组指针;R1为片内RAM区Asc数组指针;数据块长度放在寄存器R2中。
代码如下:ORG 0000HHex EQU 40HAsc EQU 50HLJMP MAINORG 0030HMAIN:MOV R2,#16MOV DPTR,#TABLEMOV R0,#HexMOV R1,#AscMOV SP,#2FHLCALL FUZHILCALL ZHUANHUANSJMP $TABLE:DB '0123456789';查表子程序ORG 1000HZHUANHUAN:PUSH 00HPUSH 01HPUSH 02HLOOP1:MOV A,@R0MOV @R1,AINC R0INC R1DJNZ R2,LOOP1POP 02HPOP 01HPOP 00HRET;R0送值子程序FUZHI:PUSH 00HPUSH 01HPUSH 02HMOV A,#0LOOP2:MOV @R0,AINC R0INC ADJNZ R2,LOOP2POP 02HPOP 01HPOP 00HRETEND2、编写用@A+PC指令的查表程序,实现用查表方式将片内RAM中16进制数组Hex(00H~0FH)转换为ASCⅡ码并存入片内RAM数组Asc中。
要求:16进制数(00H~0FH)ASCⅡ码表在内部ROM中;R0为片内RAM区Hex数组指针;R1为片内RAM区Asc数组指针;数据块长度放在寄存器R2中。
代码如下:ORG 0000HHex EQU 40H ;内部Hex送数据地址定义Asc EQU 50H ;查表后数据储存地址定义LJMP MAINORG 0030HMAIN:MOV R2,#16MOV DPTR,#TABLEMOV R0,#HexMOV R1,#AscMOV SP,#2FHLCALL FUZHI ;送值函数LCALL CHABIAO ;查表函数SJMP $ORG 1000H;查表子程序CHABIAO:PUSH 00HPUSH 01HPUSH 02HLOOP1:MOV A,@R0ADD A,#20HMOVC A,@A+PCMOV @R1,AINC R0INC R1DJNZ R2,LOOP1POP 02HPOP 01HPOP 00HRET;R0送值子程序FUZHI:PUSH 00HPUSH 01HPUSH 02HMOV A,#0LOOP2:MOV @R0,AINC R0INC ADJNZ R2,LOOP2POP 02HPOP 01HPOP 00HRETTABLE:DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,42H,43H,44H,45H,46HEND4.十进制数1-100累加运算《单片机原理及应用实验教程》(第2版)“第2章实验5”(P30)。
编写程序,实现以下功能:【功能1】产生十进制数1~100,并存放在片外RAM中以1000H为首地址的Deci数组中。
【功能2】对Deci数组元素进行累加运算,并将累加和存入内部RAM中60H(存累加和低位)和61H(存累加和高位)单元。
代码如下:方法一:ORG 0000HLJMP MAINORG 0030HMAIN: MOV R7,#100MOV DPTR,#1000HMOV SP,#20HLCALL STEP1LCALL STEP2SJMP $ORG 2000HSTEP1: PUSH 07HPUSH DPHPUSH DPLMOV A,#0MOV R3,#0LOOP1: INC ADA AXCH A,R3ADDC A,#0MOVX @DPTR,AINC DPTRXCH A,R3MOVX @DPTR,AINC DPTRDJNZ R7,LOOP1POP DPLPOP DPHPOP 07HRETSTEP2: PUSH 07HPUSH DPHPUSH DPLMOV 60H,#0MOV 61H,#0MOV R3,#0LOOP2: INC DPTRMOVX A,@DPTRADD A,60HDA AMOV 60H,ACLR AADDC A,61HDA AMOV 61H,AINC DPTRDJNZ R7,LOOP2MOV A,#1ADD A,61HDA AMOV 61H,APOP DPLPOP DPHPOP 07HRETEND方法二:ORG 0000HLJMP MAINORG 0030H MAIN: MOV R7,#100MOV DPTR,#1000HMOV SP,#20HLCALL STEP1LCALL STEP2SJMP $ORG 2000H;送值子函数STEP1: PUSH 07HPUSH DPHPUSH DPLMOV A,#0 LOOP1: INC ADA AMOVX @DPTR,AINC DPTRDJNZ R7,LOOP1CLR AADDC A,#0MOVX @DPTR,APOP DPLPOP DPHPOP 07HRET;累加子函数STEP2: PUSH 07HPUSH DPHPUSH DPLMOV 60H,#0MOV 61H,#0 LOOP2:MOVX A,@DPTRADD A,60HDA AMOV 60H,ACLR AADDC A,61HDA AMOV 61H,AINC DPTRDJNZ R7,LOOP2MOVX A,@DPTRADD A,61HDA AMOV 61H,APOP DPLPOP DPHPOP 07HRETEND5.DPTR指针应用《单片机原理及应用实验教程》(第2版)“第2章实验6”(P31)。
编写程序,实现以下功能:【功能1】产生十进制数组Deci(1~99),并存放在片内RAM中,Deci数组首地址为08H。
【功能2】将Deci数组中的偶数元素全部送入外部RAM偶数区,首地址为2000H;将Deci 数组中的奇数元素全部送入外部RAM奇数区,首地址为3000H;分别统计外部RAM偶数区和奇数区元素个数。
代码如下:ORG 0000HLJMP MAINORG 0030HMAIN: MOV SP,#70HMOV R7,#99MOV R0,#08HMOV R5,#0MOV R6,#0LCALL STEP1LCALL STEP2SJMP $STEP1: PUSH 00HPUSH 07HMOV A,#1LOOP1: DA AMOV @R0,AINC R0INC ADJNZ R7,LOOP1POP 07HPOP 00HRETSTEP2: MOV DPTR,#2000HPUSH DPLPUSH DPHMOV DPTR,#3000HMOV R3,DPHMOV R4,DPLLP1: M OV A,@R0MOV R2,AJNB ACC.0,LOOP2SJMP LOOP3LOOP2: POP DPHPOP DPLMOVX @DPTR,AMOV A,R5ADD A,#1DA AMOV R5,AINC DPTRPUSH DPLPUSH DPHSJMP NEXTLOOP3: MOV DPH,R3MOV DPL,R4MOVX @DPTR,AMOV A,R6ADD A,#1DA AMOV R6,AINC DPTRMOV R3,DPHMOV R4,DPLSJMP NEXTNEXT: INC R0DJNZ R7,LP1POP DPHPOP DPLRETEND6.定时器应用实验DBUF EQU 30HORG 0000H STRT:LJMP MAINORG 000BHLJMP PTF00ORG 0030H MAIN:MOV DPTR,#5FFFHMOV A,#0DCHMOVX @DPTR,AMOV R5,#20LP:MOVX A,@DPTRJNB ACC.7,LPMOV A,#00HMOVX @DPTR,AMOV A,#34HMOVX @DPTR,AMOV SP,#60HMOV R0,#39HMOV R7,#06HML1:MOV @R0,#00HINC R0DJNZ R7,ML1MOV TMOD,#01HMOV TL0,#0B0HMOV TH0,#3CHSETB TR0MOV IE,#82HMOV 40H,#10HML0:LCALL DIRLJMP ML0PTF00:PUSH PSWPUSH ACCSETB PSW.3MOV TL0,#0B0HMOV TH0,#3CHDJNZ R5,PTFYMOV R5,#20MOV A,40HDEC AMOV 40H,AJNZ PTFYMOV 40H,#10HMOV R0,#39HMOV R7,#6PTFX:MOV A,@R0ADD A,#1DA AMOV @R0,ACJNE A,#0AH,$+3JC PTFYMOV @R0,#0INC R0DJNZ R7,PTFXPTFY:POP ACCPOP PSWRETIDIR:MOV R3,#06HMOV A,#92HMOV DPTR,#5FFFHMOVX @DPTR,AMOV R1,#39HTY11:MOV A,@R1MOV DPTR,#CODE1MOVC A,@A+DPTRMOV DPTR,#5FFFHMOVX @DPTR,AINC R1DJNZ R3,TY11RETCODE1:DB 0C0H,0F9H,0A4H,0B0H,99HDB 92H,82H,0F8H,80H,90H,88HDB 83H,0C6H,0A1H,86H,8EH,8CHDB 0C1H,89H,0C7H,0BFH,91HDB 00H,0FFHEND7.广告灯实验ORG 0000HLJMP MAINORG 000BHLJMP DELAYORG 0030HMAIN:MOV DPTR,#TABMOV R5,#71HMOV R2,#00HMOV R6,#20MOV TMOD,#01HMOV TL0,#0B0HMOV TH0,#3CHSETB TR0MOV IE,#82HSJMP $DELAY:MOV TL0,#0B0HMOV TH0,#2CHDJNZ R6,LPACALL STEPMOV R6,#20DJNZ R5,LPMOV R5,#71HLP:RETISTEP:LOOP:MOV A,R2MOVC A,@A+DPTRMOV P1,AINC R2DEC R5RETTAB:DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FHDB 0FFH,7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDHDB 0FEH,0FFH,0FEH,0FCH,0F8H,0F0H,0E0H,0C0HDB 80H,00H,80H,0C0H,0E0H,0F0H,0F8H,0FCHDB 0FEH,0FFH,7FH,3FH,1FH,0FH,07H,03HDB 01H,00H,01H,03H,07H,0FH,1FH,3FHDB 7FH,0FFH,7EH,3CH,18H,00H,18H,3CHDB 7EH,0FFH,0FEH,0FCH,0FCH,0F9H,0F3H,0E7HDB 0CFH,9FH,3FH,7FH,0FFH,7FH,3FH,9FHDB 0CFH,0E7H,0F3H,0F9H,0FCH,0FEH,0FFHDB 0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,80H,00HDB 80H,40H,20H,10H,08H,04H,02H,01H,00HDB 01H,02H,04H,08H,10H,20H,40H,80H,00HDB 80H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH END。