上海第二工业大学单片机实验实训实验报告.docx
《上海第二工业大学单片机实验实训实验报告.docx》由会员分享,可在线阅读,更多相关《上海第二工业大学单片机实验实训实验报告.docx(21页珍藏版)》请在冰豆网上搜索。
![上海第二工业大学单片机实验实训实验报告.docx](https://file1.bdocx.com/fileroot1/2022-12/11/9956c7fe-e096-4743-9100-debd1dcee18d/9956c7fe-e096-4743-9100-debd1dcee18d1.gif)
上海第二工业大学单片机实验实训实验报告
单片机实验实训实验报告
班级:
10计科A1学号:
20123430074姓名:
贾强强
第一章Keil教程
1.源文件的建立
1)启动uVision后,File->New,打开一个新的文本编辑窗口,在窗口中输入汇编语言程序
2)保存文件,扩展名一般用asm或a51.例如:
exam1.asm
2.建立工程文件
1)点击Project->NewProject,出现对话框,输入工程名。
点击保存。
随后出现第二个对话框,选择CPU(这里选89C51),然后确定
2)工程详细设置
点击Project窗口中的Target1(Project->Optionfortarget’target1’)出现对话框,后面大部分页面默认就行
3.编译、连接
1)将源文件加入到工程
2)选择菜单Project->Buildtarget
3)进入下一步调试
第二章文件的下载操作
1.运行环境:
FLIP2.4.6
2.实验步骤:
1)选择芯片
选择“Selectdevice->AT89C51RC2”
2)选择要烧写的文件
单击LoadHEXFile,在对话框中选择要烧写的HEX文件
3)通信设置
单击“SetCommunication->RS232/com1/9600波特“后单击Connect
4)下载烧写文件
单片机与PC连通后单击Run
5)运行
a.下载成功后,单击Startapplication
b.拔掉w1短接调线,然后执行reset重启操作
4.1实验1Keil及FLIP的使用
实验目的:
熟悉Keil2单片机开发软件的使用方法;
熟悉在系统编程下软件FLIP的使用方法,同时利用Keil环境测试汇编语言指令
实验要求:
测试如下指令
MOVA,R0;
MOVA,50H
MOVA,@R0
MOVA,#20H
实验步骤:
(1)在C盘根目录创建test1的文件夹
(2)创建工程,名为:
test1,放于test1文件夹中
(3)创建源文件,名为:
test1.asm,内容如下
(4)将test1.asm加入工程,编译
(5)如有错误进行修改
(6)调试(单击debug菜单下的start/stopdebugesession,并进行单步跟踪,注意咯寄存器及内存单元变化)
实验程序:
ORG0000H
MOVR0,#30H
MOV50H,#3AH
MOVA,R0
MOVA,@R0
MOVA,20H
MOV@R0,A
END
4.2.实验2基本I/O引脚信号的控制
1.实验目的:
熟练掌握对基本I/O口的控制方法,通过编写循环和延时程序控制P1口引脚信号电平的高低,从而实现相对应LED灯的亮灭
2.实验要求:
LED灯的亮灭时间为1秒,并伴随有你蜂鸣器1秒间隔的“嘀”声
3.实验电路(略)
(1)延时程序设计方法
a)原理介绍:
MOVR6,#2001
D1:
MOVR7,#2281
DJNZR7,$2*248
NOP1
DJNZR6,D12
总延迟机器周期为:
2+(2+2*228+2+1)*200=92220
总延迟时间为:
92220*1.085=100057
b)延时子程序:
DELAY:
MOVR5,#10
MOVR6,#200
MOVR7,#228
DJNZR7,$
DJNZR6,D2
DJNZR5,D1
RET
(2)输出控制
P1.0=1时,灯亮
P2.7=0时,蜂鸣器响
5.程序框图:
6.汇编源程序:
ORG0000H
START:
CLRP1.0
CLRP2.7
LCALLDELAY
SETBP1.0
SETBP2.7
LCALLDELAY
LJMPSTART
DELAY:
MOVR5,#10
D1:
MOVR6,#200
D2:
MOVR7,#248
DJNZR7,$
DJNZR6,D2
DJNZR5,D1
RET
END
4.3实验3基本分支与循环程序设计
实验目的:
掌握基本分支与循环程序设计方法
实验要求:
(1)有一变量在片内RAM的20H单元。
取值范围:
00H~05H。
编制一段程序,根据变量值求其平方值,并存入片内RAM的21H单元。
实验程序:
(2)设变量x以补码形式存放在片内RAM的30H单元,变量y与x的关系是:
当x大于0时,y=x;当x=0时,y=20H;当x小于0时,y=x+5.编制程序,根据x的大小球y并送回单元。
程序流程图:
程序源代码:
ORG0000H
MOV30H,#88H
START:
MOVA,30H
JZNEXT
ANLA,#80H
JZLP
MOVA,#05H
ADDA,30H
MOV30H,A
SJMPLP
NEXT:
MOV30H,#20H
LP:
SJMP$
END
4.4实验4定时器的使用
实验目的:
掌握定时器的使用方法,能够根据定时时间正确设置定时器相关的寄存器,能够正确编写定时器的中断服务程序。
程序设计步骤:
实验程序:
ORG0000H
LJMPMAIN
ORG000BH
LJMPINTT0
MAIN:
MOVTMOD,#01H
MOVTH0,#0C3H
MOVTL0,#0FFH
SETBEA
SETBET0
SETBTR0
MOVR0,#60
SJMP$
INTT0:
MOVTH0,#0C3H
MOVTL0,#0FFH
DJNZR0,RT
CPLP1.0
CPLP2.7
RT:
RETI
END
实验总结:
1)工作方式寄存器TMOD89HGATEC|TM1M0GATEC|TM1M0其中高4位是定时器T1,低4位是定时器T0区别:
T0:
方式0、1、2、3T1:
方式0、1、2
2)开中断EA:
中断总控制位ET0ET1:
定时器中断控制位TR0,TR1:
定时器0、1使能
3):
中断服务
入口地址
优先级顺序
1外部中断0
0003H
从
高
到
低
2定时|计数器0
000BH
3外部中断1
0013H
4定时|计数器1
001BH
5串行口中断
0023H
4)中断理解:
CPU暂停正在执行的操作,去执行中断服务程序,待执行完毕后再返回断点处继续执行。
4.5实验五数码管显示
实验目的:
掌握数码管的编码方法。
实验要求:
(1)实现在数码管上DS1、DS2、DS3、DS4上显示数字1、2、3、4。
(2)利用中断的方法实现准确的秒表程序,并在数码管上显示。
要求开始时DS1、DS2显示分钟,DS2小数点点亮,DS3、DS4显示秒,初始时都显示0;运行后DS每隔一秒钟数字加1,加到10后变0,DS3加1,DS3、DS4加到60后,切换到小时状态:
DS1、DS2显示小时,DS2的小数点点亮,DS3、DS4显示分钟,DS4的小数点每隔一秒亮灭一次,亮灭分别30次后,DS4加1。
实验流程图:
程序源代码:
ORG0000H
LJMPMAIN
ORG000BH
LJMPDVT0
MAIN:
MOVR0,#30
MOVR1,#59
MOVR2,#23
MOVR5,#00
MOVR6,#00
MOVDPTR,#TAB
MOVTMOD,#01H
MOVTH0,0C3H
MOVTL0,0FFH
SETBET0
SETBEA
SETBTR0
LOOP:
CJNER2,#00,LOOP1
MOVA,R1
MOVB,#10
DIVAB
MOVCA,@A+DPTR
MOVP2,#0FEH
MOVP0,A
ACALLDELAY
MOVA,B
MOVCA,@A+DPTR
MOVP2,#0FDH
ANLA,#7FH
MOVP0,A
ACALLDELAY
MOVA,R0
MOVB,#10
DIVAB
MOVCA,@A+DPTR
MOVP2,0FBH
MOVP0,A
ACALLDELAY
MOVA,B
MOVCA,@A+DPTR
MOVP2,#0FCH
MOVP0,A
ACALLDELAY
LJMPLOOP
LOOP1:
MOVA,R2
MOVB,#10
DIVAB
MOVCA,@A+DPTR
MOVP2,#0FEH
MOVP0,A
ACALLDELAY
MOVA,B
MOVCA,@A+DPTR
MOVP2,#0FDH
ANLA,#7FH
MOVP0,A
ACALLDELAY
MOVA,R1
MOVB,#10
DIVAB
MOVCA,@A+DPTR
MOVP2,#0FBH
MOVP0,A
ACALLDELAY
MOVA,B
MOVCA,@A+DPTR
MOVP2,#0F7H
MOVB,A
MOVA,R0
ANLA,#01H
JZDOT
MOVA,B
SJMPSHOWDOT
DOT:
MOVA,B
ANLA,#7FH
SHOWDOT:
MOVP0,A
ACALLDELAY
LJMPLOOP
DELAY:
MOVR6,#10
DEL:
MOVR7,#100
NOP
DEL1:
DJNZR7,DEL1
DJNZR6,DEL
RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB80H,90H,88H,83H,0C6H,0A1H,86H,8EH
DVT0:
INCR4
MOVTH0,#0C3H
MOVTL0,#0FFH
CJNER4,#60,RT
MOVR4,#00
INCR0
CJNER0,#60,RT
MOVR1,#00
INCR2
CJNER2,#24,RT
MOVR2,#00
RT:
RETI
END
4.6实验6键盘扫描
实验目的:
掌握对键盘的扫描方法,编写键盘的扫描程序。
实验要求:
(1)矩阵按键编程1
实验电路:
如图
实验要求:
编写程序,要求按KB1键时,在数码管上显示1,按KB2键时在数码管上显示2,以此类推,按KB6键时在数码管上显示6。
程序源代码:
ORG0000H
SMKEY:
MOVP1,#03H
MOVA,P1
ANLA,#0FH
CJNEA,#03H,HKEY
SJMPSMKEY
HKEY:
LCALLDELAY10
MOVA,P1
ANLA,#0FH
MOVB,A
CJNEA,#03H,WKEY
SJMPSMKEY
WKEY:
MOVP1,#1CH
LCALLDELAY10
MOVA,P1
ANLA,#1CH
ORLA,B
CLRP2.3
CJNER4,#1AH,PKEY0
LJMPPKEY2
PKEY0:
CJNEA,#1AH,SMKEY
MOVR4,#1AH
PKEY2:
CJNEA,#16H,PKEY3
MOVP0,#0A4H
PKEY3:
CJNEA,#0EH,PKEY4
MOVP0,#0B0H
PKEY4:
CJNEA,#19H,PKEY5
MOVP0,#99H
PKEY5:
CJNEA,#15H,PKEY6
MOVP0,#92H
PKEY6:
CJNEA,#0DH,SMKEY
MOVP0,#82H
RETI0:
SJMPSMKEY
DELAY10:
MOVR6,#100
DEL:
MOVR7,#50
DEL1:
DJNZR7,DEL1
DJNZR6,DEL
RET
END
(2)矩阵按键编程2
实验电路:
如图
实验要求:
通过按键修改秒表程序,具体按键功能如下:
KB1:
启动秒表设置程序,不先按KB1,其他按键无效,再次按KB1,保存设置结果;
KB2:
对时间清零,回到初始态00:
00:
00:
00;
KB3:
在小时模式和分钟模式直接切换;
KB4:
小时加1;
KB5:
分钟加1;
KB6:
秒加1。
4.7实验7串行通信程序设计
实验目的:
掌握固定和可变波特率串行通信的方法,能够按照给定的波特率设置相关的寄存器,实现串行通信。
实验要求:
(1)编写单片机与PC之间通过串口通信的程序,编写串口通信程序,要求PC机先发送02H,单片机发送“HELLO”,如果PC及发送55H,单片机发送“THISISAWELLBEGIN!
”(注:
PC机发送由串口工具完成,要求波特率为9600bit/s)
(2)编写单片机与单片机之间进行串口通讯的程序。
改写李全利编著《单片机原理及应用》一书中6.3单片机串行口应用举例。
实验电路图:
程序源代码:
编写单片机与PC之间通过串口进行通讯的程序,编写串口通信程序
要求PC机先发送02H,单片机发送“HELLO”,如果PC机发送55H
单片机发送“THISISAWELLBEGIN!
”(注:
PC机发送由串口工具完成,要求波特率为9600bit/s)
ORG0000H
LJMPMAIN
ORG0023H
LJMPDIV0
ORG0100H
MAIN:
MOVTMOD,#20H
MOVTH1,#0FDH
MOVTL1,#0FDH
MOVSCON,#50H
MOVR0,00H
MOVR1,00H
SETBEA
SETBTR1
SETBES
SJMP$
DIV0:
JNBRI,RT
CLRRI
MOVA,SBUF
CJNEA,#31H,LOOP2
CLRES
AGAIN:
MOVA,R0
MOVDPTR,#BUF1
MOVCA,@A+DPTR
MOVSBUF,A
JNBTI,$
CLRTI
INCR0
CJNER0,#06H,AGAIN
SETBES
SJMPRT
LOOP2:
CJNEA,#32H,RT
CLRES
AGAIN2:
MOVA,R1
MOVDPTR,#BUF2
MOVCA,@A+DPTR
MOVSBUF,A
JNBTI,$
CLRTI
INCR1
CJNER1,#05H,AGAIN2
SETBES
RT:
RETI
ORG2000H
BUF1:
DB"HELLO!
"
BUF2:
DB"GOOD!
"
END
4.8实验8A/D转换器的使用1
实验目的:
掌握ADC0809的工作原理。
实验要求:
编写0809A/D转换程序,每隔1秒将A/D转换的结果显示在DS3和DS4两位上,以十六进制形式显示。
程序设计:
由于读A/D转换的结果和刷新LED都要用到的P0口,因此,如果读取A/D转换结果频率太快,就会出现无法正确显示的现象,解决办法是由定时器T1,定时1秒,每秒启动A/D转换一次。
因为T0中断太频繁,为保证T1进入中断可将T1和INT0中断设为高优先级。
程序源代码:
ORG0000H
LJMPSTART
ORG0003H
LJMPPINT0
ORG000BH
LJMPPPT0
ORG001BH
LJMPPPT1
ORG0100H
START:
SETBIT0
SETBEA
SETBEX0
SETBPX0
MOVTMOD,#12H
MOVTH0,#0FBH
MOVTL0,#0FBH
SETBTR0
SETBET0
MOVTH1,#0FH
MOVTL1,#00H
SETBET1
SETBPT1
SETBTR1
SETBP3.6
SETBP1.4
CLRP3.6
CALLDELAY1MS
SETBP3.6
MOV20H,#50H
MOVR7,#20
LOOP:
CALLDISPLAY
AGAIN:
AJMPLOOP
DELAY1MS:
MOVR0,#100
LOOP1:
MOVR1,#10
LOOP2:
DJNZR1,LOOP1
DJNZR0,LOOP1
RET
DISPLAY:
MOVDPTR,#DPDATA
MOVA,20H
ANLA,#0FH
CLRP2.1
MOVCA,@A+DPTR
MOVP0,A
CALLDELAY1MS
SETBP2.1
MOVA,20H
ANLA,#0F0H
SWAPA
CLRP2.0
MOVCA,@A+DPTR
MOVP0,A
CALLDELAY1MS
SETBP2.0
RET
DPDATA:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H
DB0F8H,80H,98H,88H,83H,0E2H,0A1H,86H8EH
PINT0:
CLRP3.7
MOVP0,#0FFH
MOVA,P0
SETBP3.7
MOV20H,A
RETI
PPT0:
CPLP3.3
RETI
PPT1:
MOVTH1,#0FH
MOVTL0,#00H
CLRTF1
DJNZR7,RETN
MOVR7,#20
SETBP3.6
SETBP1.4
CLRP3.6
CALLDELAY1MS
SETBP3.6
RETN:
RETI
END
实验心得:
回顾起此次课程设计,感觉受益匪浅,从拿到题目到完成整个编程,从理论到实践,学到很多很多的课堂理论中没学到过的东西,在程序调试的过程中提高自己的发现问题、解决问题、实际动手和独立思考的能力。
当然,这其中也有很多问题,第一、不够细心比如由于粗心大意焊错了线,由于对课本理论的不熟悉导致编程出现错误。
第二,是在学习态度上,这次课设是对我的学习态度的一次检验。
对于这次单片机综合课程实习,我的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨。
我们这次实习所遇到的多半问题多数都是由于我们不够严谨。
第三,在做人上,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力与决心,有足够的挑战困难的勇气,就没有什么办不到的。
通过这次单片机实习,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。
创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。
这次课程设计能顺利的完成,除了我们的努力外,当然也离不开指导老师申老师的辛勤指导,致使我在设计的过程中学到了很多实用性的知识。
同时,对给过我帮助的所有同学和各位指导老师表示忠心的感谢!