单片机实验报告_第1页
单片机实验报告_第2页
单片机实验报告_第3页
单片机实验报告_第4页
单片机实验报告_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE16成都理工大学核技术与自动化工程学院实验报告课程名称:单片机原理实验姓名:学号:专业:机械_学期:2010上半学年任课教师:实验一:置数实验人员:指导老师:实验地点:6C701实验时间:周四晚1:实验要求:(1)向内部RAM区30h-3fh连续送入0ffh。(2)向外部RAM区1000h-100fh连续送入0ffh。(3)将内部ROM的表格送至内部RAM区30h开始的连续单元。2:实验原理:将要传送的数据装入累加器中,利用条件控制指令进行循环送数,直到数据送满16次结束循环。由于是向外部RAM区送数,除了利用循环指令外,需注意应用到DPTR指针来进行数据的中转。首先在ROM区中定义一个数据表格。再利用循环指令送数,由于涉及到ROM区,因此需注意数据必须先通过MOVC指令利用DPTR指针送入累加器A中,再进行传送。3:实验程序设计:程序1:mova,#0ffh数据送入a中movr0,#30h送入目的地址movr1,#16送入循环次数loop:mov@r0,a开始送数incr0r0置增djnzr1,loop至r1=0,停止循环ajmp$循环停止,原地等待end程序2:mova,#0ffh送入数据movdptr,#1000h送入目标地址movr0,#16送入循环次数loop:movx@dptr,a开始传送incdptr指针置增1djnzr0,loopr0=0则循环借宿ajmp$原地等待end程序3:org0000hmain:movr0,#5计入表格数据个数movr1,#30h送入目标地址movdptr,#table送入表格loop:movca,@a+dptr开始传送表格mov@r1,aclra累加器清0incdptr指针地址置增1incr1目标地址置增1djnzr0,loopr0=0则结束循环org0100h给表格定义地址table:db50h,51h,52h,53h,54h表格内容ajmp$原地等待end4:实验现象及结果(1)给内部RAM30H开始的单元置FFH(2)给外部RAM1000H开始的单元置数FFH(3)向内部RAM30H开始的单元送入表格实验2:拆字、拼字实验人员:指导老师:实验地点:6C701实验时间:周四晚1:实验要求(1)拆字:将2000h的内容拆开,高位送入2001h低4位,低位送入2002h低4位,低2001h、2002h高4位均清0。(2)拼字:将2000h、2001h的低4位分别送入2002h高4位和低4位。2:实验原理(1)拆字:分别屏蔽2000h中内容的高位和低位,对目标地址清0,再将屏蔽后的数分别送入目的地址。(2)拼字:将2000h内容屏蔽高位,再呼唤高低位后暂存r2,将2001h内容屏蔽高位,再跟r2内容相或后送入2002h中。3:实验程序设计:拆字程序:org0000hajmpmainmain:mov2000h,#3ah送3ah到2000hmova,2000hswapa交换高低位anla,#0fh屏蔽高位mov2001h,a送入2001hmova,r0再次送入3ahanla,#0fh屏蔽高位mov2002h,a送入2002hajmp$原地等待end拼字程序:org0000hajmpmainmain:mov2000h,#3Ah送3Ah到2000hmov2001h,#5Bh送5Bh到2001hmova,2000hanla,#0fh屏蔽3Ah高位swapa屏蔽后交换高地位movr2,a结果暂存r2mova,2001hanla,#0fh屏蔽5Bh高位orla,r2结果跟r2内容相或mov2002h,a相或结果送入2002hajmp$原地等待end4:实验现象及结果:拆字: 拼字:实验3:数据传送、排序、查找实验人员:指导老师:实验地点:6C701实验时间:周四晚1:实验要求:数据传送:在r2、r3中输入源首址,r4、r5中输入目的地址,r6、r7中输入字节数,运行程序,检查0000-1fffh中内容是否和3000-4fffh内容完全一致。排序:在RAM区50H-5AH中放入不等的数据,运行所编写的程序后检查50H-5AH中内容是否按从小到大排列。查找相同数据个数:在2000h-200fh中查出有几个字节是0,把个数放入2100h中。2:实验原理(1):数据传送:先送低位数据,待低位送满ff次后,自动向高位进位,如此循环,待高位送满1f次后,再次对低位送满ff次。此时则完成了整个数据的传输。(2):排序:利用冒泡排序原理,先对整串数据进行第一轮排序,找出最大数后(若有N个数,则第一轮需排N-1次),再进行第二轮排序,直到全部数据排完。(3)数据查找:将2000h中的数与0进行比较,若为0,则计数器加1,直到比较完16次,结束循环,再将计数器内的值送到2100h内。3:实验程序设计:数据传送程序:movr2,#00h定义源地址高位movr3,#00h定义源地址低位movr4,#30h定义目的地址高位movr5,#00h定义目的地址低位movr6,01fh定义字节数高位movr7,0ffh定义字节数低位loop:movdph,r2源地址赋给dptr指针movdpl,r3movxa,@dptr送源地址内容到amovdph,r4目的地址赋给dptrmovdpl,r5movx@dptr,a将内容送至目的地址incr3源地址低位置增1incr5目的地址低位置增1djnzr7,loop送满0ff次停止循环(此时r7变为0,高位1f次送完1次)movdph,r2继续源地址赋给dptrmovdpl,r3movxa,@dptr送源地址内容到amovdph,r4目的地址赋给dptrmovdpl,r5movx@dptr,a送内容至目的地址incr2源地址高位置增1incr3源地址低位置增1incr4目的地址高位置增1incr5目的地址低位置增1movr7,#0ffh重新赋0ffh值给r7(以使程序返回时能顺利从loop程序开始执行)djnzr6,loopr6=0,则停止循环,ajmp$end(注:其中红色部分是因为每次低位向高位进位后,低位会变为0,所以需在低位执行满0ff次后,再对低位执行一次,不然最终就只能完成1f00字节的传送。)数据排序程序:movr2,#04h送入第一轮排序所需次数(即定义本程序参加排序的数据为5个) movr0,#50h送入存放数据的首地址 mov50h,#15h依次向地址赋入数据 mov51h,#08h mov52h,#26h mov53h,#10h mov54h,#03hloop:movr0,#50hloop1: mov30h,@r0送第一个数据至30h中 incr0取第二个数 mova,@r0送第二个数到31h中 mov31h,a clrc清0借位标志 subba,30h用第二个数-第一个数比较 jncloop2没有产生借位(说明第二个数大于第一个数),则跳至loop2 mov@r0,30h有借位,(说明第二个数小于第一个数),则进行交换 decr0 mov@r0,31h incr0取下一个数进行比较loop2: djnzr2,loop1r2=0则进行下一轮排序(此时找出了最大数) movr2,#04h再送4到r2 decr2确定下一轮排序次数 jnzloopr2≠0则重新跳至loop开始执行 ajmp$r2=0则原地等待 end程序结束数据查找程序:org0000hajmpmainorg0100hmain:movdptr,#2000h赋dptr地址为2000hmovr2,#10h送入比较次数16次movr0,#00h送入比较标准“0loop:movxa,@dptr送2000h内的值到r1movr1,acjner1,#00h,check若r1≠0则跳至checkincr0r1=0则计数器内容增1check:incdptr指针指向下一地址decr2比较次数减1mova,r2jnzloop若比较次数≠0跳至则返回loopmova,r0比较满16次则送计数器内容到amovdptr,#2100hmovx@dptr,a将r0内容送至2001hajmp$原地等待end4:实验现象及结果:(1)数据传送:源地址内容目的地址内容(成功进行了数据的传送)(2)排序:(正确进行了数据从小到大的排列)查找数据:原始数据(表示这16个单元中只有3个非0)查找结果(结果为0D,表示查找有13个0),查找准确实验4:单片机I/O控制实验人员:指导老师:实验地点:6C701实验时间:周四晚1:实验要求编写控制程序,用P1口作为控制端口,使D1区的LED轮流亮。编写控制程序,用P1.0-P1.6口控制LED,P1.7控制LED的亮和灭(按下时LED亮,再按一下LED熄灭)2:实验原理在仿真试验仪上LED灯为0时亮,为1时灭,故要左边第一盏灯亮则需使P1口接受代码为11111110,灯依次往右亮,则代码依次变化,再分别对灯亮的盏数和熄灭次数通过循环进行控制,即可达到控制LED等轮流亮的目的。将P1.7口接至开关处,按下开关,则执行程序中的中断,LED灯按(1)中一样轮流亮,关掉开关时,中断停止,则程序无法顺利运行,代码无法送至端口,LED全部处于熄灭状态。3:实验程序设计(1)LED灯轮流亮:org0000hajmpmain org001bh定义T1入口地址 ajmpint org0030hmain: setbea开总中断 setbet1开T1中断 setbtr1启动定时器1 movth1,#3ch置计数初值 movtl1,#0b0h movb,#7fh送入7fh movr1,#03h送入循环次数3 movr2,#03h movr6,#08h送入循环次数8 movr7,#08h ajmp$等待中断int: mova,r7送人循环次数8 jzaa若循环完则跳至aass: r7≠0则循环ssmova,b rla 7fh循环左移 movp1,a变成0feh后送至p1口使最左边灯亮 movb,a同时将0feh送回blcallyanshi转至执行yanshi djnzr7,ss未循环满8次则跳至ss继续 ajmpnext循环满8次则跳至next重新置初值(此时循环满8次后b内值又还原为7fh)aa: mova,r1送入循环次数3次 jzdawn若r1=0则跳至downdou:r1≠0顺序执行dou mova,#00h送入00h movp1,a送00h到p1口使8盏灯同时亮 lcallyanshi转至执行yanshi mova,#0ffh送入0ffh movp1,a送0ffh到p1口使8盏灯同时灭 lcallyanshi转至执行yanshidjnzr1,dou如此未执行满3次则跳至dou继续 ajmpnext执行完3次后跳至next重置初值dawn: mova,r6送入循环次数8 jzsasar6=0则跳至sasawin:r6≠0z则执行win mova,b movp1,a送7fh到p1口(使最右边灯亮) rra7fh执行循环右移 movb,a右移后送回寄存器b lcallyanshi转至执行yanshi djnzr6,win为执行满8次则继续win ajmpnext执行完8次后跳至next重置初值sasa: mova,r2送入循环次数3次 jzloopr2=0则跳至looploop1:否则执行loop1 mova,#00h送入00h movp1,a送00h到P1口(使8盏灯同时亮) lcallyanshi转至执行yanshi mova,#0ffh送人0ffh movp1,a送0ffh到p1口(使8盏灯同时灭) lcallyanshi转至执行yanshidjnzr2,loop1如此未循环满3次则继续loop1loop:循环满3次则顺序执行loopmovb,#7fh要使LED灯一直如此循环亮,则再次 movr1,#03h送入全部初值 movr2,#03h movr6,#08h movr7,#08hnext:next对定时器置计数初值 movth1,#3ch movtl1,#0b0h retiyanshi:执行延时1smovtmod,#01h置t0工作方式1 movth0,#3ch置计数初值 movtl0,#0b0h movr0,#20中断次数(每次是50ms,故1s需20次) setbtr0启动定时器ns0: jbctf0,ns1查询计数是否溢出?tf0=1则重置初值 sjmpns0tf0=0(说明还未溢出)则继续查询ns1: movth0,#3ch置计数初值 movtl0,#0b0hdjnz r0,ns0未执行满20次则跳至ns0继续 retend 外部中断控制LED等亮灭程序: org0000hajmpmain org0013h定义INT1入口地址 ajmpint org0030hmain: setbea开总中断 setbet1开T1中断 setbtr1启动定时器1 movth1,#3ch置计数初值 movtl1,#0b0h movb,#7fh送入7fh movr1,#03h送入循环次数3 movr2,#03h movr6,#08h送入循环次数8 movr7,#08h ajmp$等待中断int: mova,r7送人循环次数8 jzaa若循环完则跳至aass: r7≠0则循环ssmova,b rla 7fh循环左移 movp1,a变成0feh后送至p1口使最左边灯亮 movb,a同时将0feh送回blcallyanshi转至执行yanshi djnzr7,ss未循环满8次则跳至ss继续 ajmpnext循环满8次则跳至next中断返回(此时循环满8次后b内值又还原为7fh)aa: mova,r1送入循环次数3次 jzdawn若r1=0则跳至downdou:r1≠0顺序执行dou mova,#00h送入00h movp1,a送00h到p1口使8盏灯同时亮 lcallyanshi转至执行yanshi mova,#0ffh送入0ffh movp1,a送0ffh到p1口使8盏灯同时灭 lcallyanshi转至执行yanshidjnzr1,dou如此未执行满3次则跳至dou继续 ajmpnext执行完3次后跳至next中断返回dawn: mova,r6送入循环次数8 jzsasar6=0则跳至sasawin:r6≠0z则执行win mova,b movp1,a送7fh到p1口(使最右边灯亮) rra7fh执行循环右移 movb,a右移后送回寄存器b lcallyanshi转至执行yanshi djnzr6,win为执行满8次则继续win ajmpnext执行完8次后跳至next中断返回sasa: mova,r2送入循环次数3次 jzloopr2=0则跳至looploop1:否则执行loop1 mova,#00h送入00h movp1,a送00h到P1口(使8盏灯同时亮) lcallyanshi转至执行yanshi mova,#0ffh送人0ffh movp1,a送0ffh到p1口(使8盏灯同时灭) lcallyanshi转至执行yanshidjnzr2,loop1如此未循环满3次则继续loop1loop:循环满3次则顺序执行loopmovb,#7fh要使LED灯一直如此循环亮,则再次 movr1,#03h送入全部初值 movr2,#03h movr6,#08h movr7,#08hnext:中断返回 retiyanshi:执行延时1smovtmod,#01h置t0工作方式1 movth0,#3ch置计数初值 movtl0,#0b0h movr0,#20中断次数(每次是50ms,故1s需20次) setbtr0启动定时器ns0: jbctf0,ns1查询计数是否溢出?tf0=1则重置初值 sjmpns0tf0=0(说明还未溢出)则继续查询ns1: movth0,#3ch置计数初值 movtl0,#0b0hdjnz r0,ns0未执行满20次则跳至ns0继续 retend 4:实验现象及结果试验中,接通后,可观察到LED灯先由左向右依次亮,时间间隔为1s,到最右端LED灯亮后,8盏灯先同时亮,1s后再同时熄灭,如此循环三次,接着再从最右边的灯开始向左依次亮,时间间隔依然为1s,亮到最左边后,同时亮,再同时灭,如此循环三次,时间间隔均为1s。再从左边开始向右亮,如此循环下去。试验中,接通后,当按下INT1接通的开关后,发现LED灯会按照(1)中同样的现象执行下去,当关掉开关后,所有灯立即熄灭,再接通开关后,LED灯又会从左边最先亮开始循环执行。 实验5:串行口通信实验实验人员:指导老师:实验地点:6C701

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论