单片机原理及应用实验指导新版_第1页
单片机原理及应用实验指导新版_第2页
单片机原理及应用实验指导新版_第3页
单片机原理及应用实验指导新版_第4页
单片机原理及应用实验指导新版_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机原理及应用实验指导书长春大学 电子信息工程学院43实验1:单片机mcs51开发系统的认识1实验2:键盘扫描程序练习3实验3:显示器与定时中断7(利用t0定时器中断切换p1口驱动显示内容程序)7实验4:高级语言编程c51定时器中断程序10实验5:高级语言编程c51键盘扫描程序13实验6:串行口通信同步驱动扫描显示程序16实验7:51核指令综合练习时钟程序22实验8:可调时钟程序28实验9: c51时钟36实验10:高级语言编程c51时钟可调程序39实验1:单片机mcs51开发系统的认识利用单片机仿真设计调试p1口显示程序一、实验目的(1) 了解mcs-51单片机开发常用工具。(2) 了解仿

2、真器构成、功能及连接。(3) 掌握mcs-51开发软件(汇编器)安装、功能及基本操作。(4) 掌握源程序的编辑、汇编、运行(包括连续执行、单步执行和跟踪执行)。(5)掌握在特定仿真开发系统下浏览、修改特殊功能寄存器、内部ram、外部ram单元的方法。二、实验器材仿真器及附件(电源、仿真头、联机通讯电缆)、开关电源。三、实验电路元件清单:名称型号封装数量cpu89c51dip401驱动器74ls240dip201共阳8段led1300电阻8晶体36864mhz1四、实验内容1. pc机仿真器目标板(用户板)的连接 (1) 联机通讯口。目前多数仿真器不带键盘、led显示器,需与pc机配套使用。单片

3、机仿真开发设备一般以串行方式与pc机通讯,通过联机通讯电缆将仿真器联机通讯口与pc机串行口(com1或com2)相连。(2) 仿真插座。通过仿真电缆将仿真器与仿真头连在一起(有些仿真器、仿真头的插座没有采用防反插技术,连接时务必注意插座、插头方向)。2. 汇编语言源程序编辑、运行及调试输入、编辑、汇编、运行(连续、单步执行)如下程序段:timeequ8mova,p1movr0,#timemovdptr,#wcodeloop:decr0mova,r0movca,a+dptrmovp1,acjner0,#0,loopmovr0,#timeljmploopwcode:db01h,02h,04h,08

4、h,10h,20h,40h,80hend3.要求:把原来的程序改成单步执行该程序时实验板左面数码管将依次显示“0”“9”的阿拉伯数字。五、问题解答:1. time equ xx伪指令定义的参数在此段程序起何作用?2. wcode 定义的代码区字节参数在此段程序起何作用?实验2:键盘扫描程序练习一、实验目的(1) 进一步熟悉mcs-51单片机开发常用工具。(2) 了解键盘扫描程序的原理。(3) 了解模块化程序设计方法。二、实验器材仿真器及附件(电源、仿真头、联机通讯电缆)、开关电源。三、实验电路元件清单:名称型号封装数量cpu89c51dip401驱动器74ls240dip201共阳8段led1

5、300电阻8晶体36864mhz1按键9四、实验内容1. 装入并运行如下程序代码:playdata30hknumdata31h;-;初始化部分;-movplay,#00h;-;键盘扫描部分;-tkey: mov p1,#11110000b mov a, p1 cjne a,#11110000b,twait20 ajmp setplaytwait20:acallwait20ms mov p1,#11110000b mov a,p1 cjne a,#11110000b,rkeynum ajmp setplayrkeynum:mov p1,#11111110b mov a,p1 cjne a,#11

6、101110b,tkey2 mov knum,#01h ajmp tupktkey2: cjne a,#11011110b,tkey3 mov knum,#02h ajmp tupktkey3:cjne a,#10111110b,tkey4 mov knum,#03h ajmp tupktkey4: cjne a,#01111110b,tkey5 mov knum,#04h ajmp tupktkey5:mov p1,#11111101b mov a,p1 cjne a,#11101101b,tkey6 mov knum,#05h ajmp tupktkey6:cjne a,#11011101

7、b,tkey7 mov knum,#06h ajmp tupktkey7: cjne a,#10111101b,tkey8 mov knum,#07h ajmp tupktkey8: cjne a,#01111101b,tkey8 mov knum,#08h ajmp tupktupk:mov p1,#11111000b mov a,p1 cjne a,#11111000b,tupk;-keyout:mov play,knum;此条指令为键命令;-;显示程序;-setplay:mov a,play mov dptr,#cword movc a,a+dptr mov p1,a acall wai

8、t20ms;- ajmp tkey;-;延迟20ms秒子程序(大约);-wait20ms:movr1,#0 movr2,#80 movr3,#1lopw: djnzr1,$ djnzr2,lopw djnzr3,lopw ret;-cword:db3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh end在“keyout:movplay,knum;此条指令为键命令”设置断点,观察分别键入“19”键时;play及knum data单元中数值;并在每此断点后单步运行setplay:mov a,play mov dptr,#cword movc a,a+dptr mov

9、p1,a; 等程序,观察每步指令运行后目的操作数的变化。2. 修改程序:键命令部分2.1 改变上述程序中键值分析部分,增加“12”及“23”两种双键同时按下时的键值;2.2 改变键盘命令程序,键值“19”时功能不变。“12”双键显示值1,“23” 双键显示值1;2.3 调试完成此段程序。五、问题解答:1. 简述行列扫描键盘工作原理:分成几个功能模块?2. 实验中哪些指令访问p1口锁存器?哪些指令访问p1口引脚?3. 为什么在显示模块执行末尾加上“acall wait20ms”?实验3:显示器与定时中断(利用t0定时器中断切换p1口驱动显示内容程序)一、实验目的:1. 掌握定时器的方式2模式初始

10、化程序,2. 学习利用定时器方式2中断程序实现精确定时,3. 进一步学习模块化程序设计和调试。二、实验器材仿真器及附件(电源、仿真头、联机通讯电缆)、开关电源。三、实验电路同上机实验1四、实验内容1. 装入并运行如下程序代码:;_;程序头;_playdata30h;显示缓存区countdata31h;第3级分频计数tmodwequ21h;定时器方式控制字;_;程序;_ajmpstart;_;定时器中断程序;_org000bhct0int: pushpswdjnzcount,ct0outmov count,#14pushdphpushdplpushaccinc playmova,playcjne

11、a,#10,stplayclramovplay,astplay:movdptr,#cwordmovca,a+dptrmovp1,apopaccpopdplpopdphct0out:poppswreti;_;主程序;_start:movplay,#0movcount,#16movtmod,#tmodwsetbet0;定时器0开中断setbtr0;启动定时器0工作setbea;系统开中断loop:ajmploopcword: db00111111b;0db00000110b;1db 01011011b;2db01001111b;3db01100110b;4db01101101b;5db011111

12、01b;6db00000111b;7db01111111b;8db01101111b;9end2. 修改程序:2.1 原来t0中断处理程序并非精确定时,改为精确定时处理(led正好显示切换正好1秒不得产生误差,晶体振荡器误差不计)。2.2 把显示循环周期由10秒修改成16秒。2.3 显示数字由“0、1、2、3、4、5、6、7、8、9”改为“1、2、3、4、5、6、7、8、9、a、b、c、d、e、f”2.4 调试完成此段程序,使仿真板led依次显示“1、2、3、4、5、6、7、8、9、a、b、c、d、e、f”,相邻数字切换时间为1秒。五、实验要求:1. 记录调试过程中关键步骤的数据;2. 记录调

13、试过程中的失败原因,及排除方法;3. 记录实验结果。六、问题解答:1. 启动t0工作用程序中那条指令?使t0中断程序能被响应需要程序中那几条指令?2. t0采用何工作方式?t0是计数还是定时?实验4:高级语言编程c51定时器中断程序一实验目的:1. 通过设计调试与实验3功能类似的c51程序熟悉c51编程。2. 了解c51与汇编语言的混合编程技术。3. c51中断函数的编程。二、实验器材:仿真器及附件(电源、仿真头、联机通讯电缆)、开关电源。三、实验电路:同上机实验1四、实验内容及实验步骤: 1. 装入并运行c51与汇编语言原型程序(1) 汇编程序nameexternm?pr?cthl0?ext

14、ernmsegment codepubliccthl0rseg?pr?cthl0?externmcthl0:clrtr0mova,#low(-2304+7)adda,tl0movtl0,amova,#high(-2304)addca,th0movth0,asetbtr0retend(2) c51程序/#pragma src#include #define tmodw 0x01;#define timew 4;/显示字型变量unsigned char data l;unsigned int data cttime;/字型码unsigned char code bcdpc10= 0x01, 0x0

15、2, 0x04, 0x08,0x10, 0x20, 0x40, 0x80;bit t0st;extern void cthl0();/定时器0中断处理程序,使用寄存器组1void ct0(void) interrupt 1 using 1 cthl0(); cttime-; if (cttime=0) cttime= timew; t0st=1; main () t0st=0; cttime=4; tmod=tmodw;/t0方式1 et0=1;/t0开中断 tr0=1;/启动t0工作 ea=1;/系统开中断 while (1)for (l=0;l8;l+) p1=bcdpcl; while

16、(t0st=0) t0st=0; ; 2. 通过改变t0分频频率和cttime终值,调整扫描频率,观察并记录led显示效果:缺省值100hz50hz ?25hz ?10hz ?1hz ?400hz?五、问题解答:1. 通过改变c51程序中的哪个参数可调整显示扫描频率?2. 如果cttime 与timew均为char变量类型怎样设置1hz的显示扫描频率?3. t0中断函数怎样编写?实验5:高级语言编程c51键盘扫描程序一实验目的:通过设计调试与实验2功能类似的c51程序进一步熟悉c51编程。二、实验器材:仿真器及附件(电源、仿真头、联机通讯电缆)、开关电源。三、实验电路:同上机实验2四、实验内容

17、及步骤:1. 装入并运行如下c51程序#include /显示字型变量unsigned char data play;/运行工作缓冲变量unsigned char data l,m,k;/字型码unsigned char code bcdpc10=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;/键值缓存,0xff无键命令unsigned char data keynum;/延迟函数void w20ms() for (l=0;l41;l+) for (m=0;m81;m+) /键盘扫描函数void tkey() p1=0xf0; keynum

18、=0xff; if (p1!=0xf0) w20ms(); p1=0xf0; if (p1!=0xf0) p1=0xfe; switch (p1) case 0xee:keynum=0;break; case 0xde:keynum=1;break; case 0xbe:keynum=2;break; p1=0xfd; switch (p1) case 0xed:keynum=3;break; case 0xdd:keynum=4;break; case 0xbd:keynum=5;break; p1=0xfb; switch (p1) case 0xeb:keynum=6;break; ca

19、se 0xdb:keynum=7;break; case 0xbb:keynum=8;break; p1=0xf0;while (p1!=0xf0) ; ; main () play=bcdpc0;/初始状态显示“0” while (1)p1=play;/显示 w20ms();/ tkey();/ if (keynum!=0xff) play=bcdpckeynum+1; keynum=0xff; 2. 观察并记录是否敲击几号键p1口驱动的数码管就显示“几”?如果不是修改源程序,使之达到此功能。3. 再修改程序使之完成敲击几号键显示数字加 “几”五、问题解答:main ()函数中w20ms()

20、;语句有和用途,如果去掉什么后果?实验6:串行口通信同步驱动扫描显示程序一、实验目的:1. 掌握标准51核单片机串行口同步工作方式。2. 实践并掌握扫描显示电路的原理及51核单片机汇编语言的驱动程序模块。3. 掌握显示模块显示缓存区与字型代码的接口方法。二、实验器材:仿真器及附件、开关电源。共阴led数码管8只、6b595、74hc595集成电路各1片。三、实验电路:四、实验内容及步骤:1. 录入如下程序将;_;程序头;_;显示变量;_play1data21hplay2data22hplay3data23hplay4data24hplay5data25hplay6data26hplay7dat

21、a27hplay8data28h;_stbdata29h;显示位选;_;常量参数;_timew equ0f700h;_;初始化参数;_tmodwequ01h;定时器0方式1sconwequ00h;scon方式0;_;上电复位入口;_ljmpstart;_;定时器0中断入口;_org0bhpushpswpushdplpushdphpushaccsetbrs0clrtr0mova,#low(timew)+7;adda,tl0movtl0,amova,#high(timew)addca,th0movth0,asetbtr0mova,stbmovdptr,#stbcodemovca,a+dptrset

22、bp3.4;t0clrp3.5;t1clrtimovsbuf,amova,stbadda,#play1movr0,amova,r0jnbti,$;等串行口发送完数据movsbuf,aclrtijnbti,$setbp3.5clrp3.4inc stbanlstb,#07hpopaccpopdphpopdplpoppswreti;_start:clr eamovsp,#7fhmovstb,#0;从高位开始显示;_;显示初始化成07;_mova,#0movp1,#0;为什么movr1,#play1movdptr,#bcdpcmovr2,#8movr0,aloppl:mova,r0movca,a+d

23、ptrmovr1,ainc ainc r0inc r1djnzr2,loppl;_;初始化定时器、串行口;_;加设置定时器0方式1控制字指令;加设置串行口方式0控制字指令movtl0,#low(timew)movth0,#high(timew)setbet0;定时器0开中断setbtr0;启动定时器0工作setbea;系统开中断loop:ljmploopbcdpc:db00111111b;0db00000110b;1db01011011b;2db01001111b;3db01100110b;4db01101101b;5db01111101b;6db00000111b;7db01111111b;

24、8db01101111b;9stbcode:db10000000b;0db01000000b;1db00100000b;2db00010000b;3db00001000b;4db00000100b;5db00000010b;6db00000001b;7end2. 将利用串行口同步方式扫描驱动led显示内容由“76543210”换成“0740x-yz”。(即班级学号数码)五、问题解答:1. 串行口驱动程序中jnbti,$指令去掉会发生什么现象?2. 如果原型程序中没加设置定时器0方式1的控制字,t0是工作在什么工作方式?3. 实验原型程序led扫描频率是多少? 实验7:51核指令综合练习时钟程序

25、一、实验目的:利用标准51核单片机串行口同步工作方式实现扫描显示电路的驱动程序 模块,增加显示字型定时变化的程序模块,提高模块化程序设计及调试能力。二、实验器材:仿真器及附件、开关电源。共阴led数码管8只、6b595、74hc595集成电路各1片。三、实验电路:同上机实验4四、实验内容:在原有扫描显示模块、显示扫描模块初始化基础上扩充动态改变显示模块缓存区内容模块完成将时分秒动态参数实时显示功能。五、实验步骤:1. 录入如下代码;_;程序头;_syscon data 20h;_stbdata21h;显示位选;_;显示变量;_play1data22h;最高位play2data23hplay3d

26、ata24hplay4data25hplay5data26hplay6data27hplay7data28hplay8data29h;最低位;_;时钟参数;_hrdata2ah;时mindata2bh;分secdata2ch;秒sec100 data 2dh;秒;_cttimedata2eh;400/4=100ms;_;初始化参数;_tmodwequ01h;定时器0方式1sconwequ00h;scon方式0;_;上电复位入口;_using0;使用寄存器0组ljmpstart;_;定时器0中断入口,显示扫描;_org0bhct0:pushpswpushdplpushdphpushaccpush

27、ar0clrtr0mova,#low(-2304+7);adda,tl0movtl0,amova,#high(-2304)addca,th0movth0,asetbtr0deccttimemova,cttimejnz cplaymovcttime,#4lcallct1cplay:mova,stbmovdptr,#stbcodemovca,a+dptrsetbp3.4;t0高电平消隐clrp3.5;t1低电平准备发脉冲前沿clrtimovsbuf,amova,stbadda,#play1movr0,amova,r0jnbti,$;等串行口发送完数据clrtimovsbuf,ajnbti,$set

28、bp3.5;t1发脉冲前沿clrp3.4;t0低电平显示inc stbanlstb,#07hpopar0popaccpopdphpopdplpoppswretistart:clreamova,#0hmovp1,amovr0,#sysconmovr1,#15loclr:movr0,ainc r0djnzr1,loclrmovcttime,#4;_;初始化定时器、串行口;_movtmod,#tmodw;定时器0方式1控制字movscon,#sconw;串行口方式0控制字movtl0,#low(-2304)movth0,#high(-2304)setbet0;定时器0开中断setbtr0;启动定时器

29、0工作setbea;系统开中断loop:ljmploop;_;调整时钟参数;_ct1:mova,sec100adda,#01hda amovsec100,ajnz xcplaymova,secadda,#01hmovsec,acjnea,#60,xcplaymovsec,#0mova,minadda,#01hda amovmin,acjnea,#60,xcplaymovmin,#0mova,hradda,#01hda amovhr,acjnea,#24h,xcplaymovhr,#0xcplay:movdptr,#bcdpcmova,hrswapaanla,#0fhmovca,a+dptrmo

30、vplay1,amova,hranla,#0fhmovca,a+dptrmovplay2,amova,minswapaanla,#0fhmovca,a+dptrmovplay3,amova,minanla,#0fhmovca,a+dptrmovplay4,amova,secswapaanla,#0fhmovca,a+dptrmovplay5,amova,secanla,#0fhmovca,a+dptrmovplay6,amova,sec100swapaanla,#0fhmovca,a+dptrmovplay7,amova,sec100anla,#0fhmovca,a+dptrmovplay8,

31、aret;_;字型码;bcdpc:db00111111b;0db00000110b;1db01011011b;2db01001111b;3db01100110b;4db01101101b;5db01111101b;6db00000111b;7db01111111b;8db01101111b;9;_;位选择码;_stbcode:db00000001b;0db00000010b;1db00000100b;2db00001000b;3db00010000b;4db00100000b;5db01000000b;6db10000000b;7end2. 运行程序测试并记录时分秒参数动态切换的正确性(百分秒

32、、秒进位不必改变原型程序参数,快速测试分、时进位需改变t0定时参数。)3. 通过使用单步、断点手段修改调试时分秒参数模块,使之能正确进位。六、问题解答:1. 本次实验程序分成几个模块。?2. 如何快速测试定位程序模块中的错误?3. 你是如何排除程序中的错误?实验8:可调时钟程序一、实验目的:进一步培养模块化程序设计技能:在实验5基础上进一步完善时钟程序,增加键盘调整时钟参数功能,完成键盘、显示、定时程序组合时钟完整程序。二、实验器材:仿真器及附件、开关电源。共阴led数码管8只、6b595、74hc595集成电路各1片。三、实验电路:同上机实验4四、实验内容及步骤:1. 录入如下代码;_;程序

33、头;_syscon data 20h;_stbdata21h;显示位选;_;显示字型变量;_play1data22h;最高位play2data23hplay3data24hplay4data25hplay5data26hplay6data27hplay7data28hplay8data29h;最低位;_;时钟参数;_hr data2ah;时mindata2bh;分secdata2ch;秒sec100 data 2dh;秒;_cttimedata2eh;400hz再4分频;_keynumdata2fh;键值比前次增加参数;_;初始化参数;_tmodwequ01h;定时器0方式1sconwequ0

34、0h;scon方式0;_;上电复位入口;_using0;使用寄存器0组ljmpstart;_;定时器0中断入口,显示扫描;_org0bhct0:pushpswpushdplpushdphpushaccpushar0clrtr0mova,#low(-2304+7);adda,tl0movtl0,amova,#high(-2304)addca,th0movth0,asetbtr0deccttimemova,cttimejnz cplaymovcttime,#4lcallct1cplay:mova,stbmovdptr,#stbcodemovca,a+dptrsetbp3.4;t0高电平消隐clrp

35、3.5;t1低电平准备发脉冲前沿clrtimovsbuf,amova,stbadda,#play1movr0,amova,r0jnbti,$;等串行口发送完数据movsbuf,aclrtijnbti,$setbp3.5;t1发脉冲前沿clrp3.4;t0低电平显示incstbanlstb,#07hpopar0popaccpopdphpopdplpoppswretistart:clreamova,#0hmovp1,amovr0,#sysconmovr1,#15loclr:movr0,aincr0djnzr1,loclrmovcttime,#4;_;初始化定时器、串行口;_movtmod,#tmo

36、dw;定时器0方式1控制字movscon,#sconw;串行口方式0控制字movtl0,#low(-2304)movth0,#high(-2304)setbet0;定时器0开中断setbtr0;启动定时器0工作setbea;系统开中断loop:movp1,#0hlcallw20ms;如果无此延迟,p1启动的led乱闪movp1,#11111100b;键盘扫描mova,p1cjnea,#11111100b,waitljmploopwait:lcallw20ms;键盘去抖movp1,#11111100bmova,p1cjnea,#11111100b,rknumljmplooprknum:movp1

37、,#11111110bmova,p1cjnea,#11101110b,tk3movkeynum,#0ljmpwkuptk3:cjnea,#11011110b,tk9movkeynum,#3ljmpwkuptk9:cjnea,#10111110b,tk12movkeynum,#9ljmpwkuptk12:movp1,#11111101bmova,p1cjnea,#11101101b,tk15movkeynum,#12ljmpwkuptk15:cjnea,#11011101b,tk18movkeynum,#15ljmpwkuptk18:cjnea,#10111101b,loopmovkeynum,

38、#18wkup:movp1,#11111100b;等键抬起mova,p1cjnea,#11111100b,wkup;_;键命令处理程序mova,keynummovdptr,#chtimejmpa+dptrchtime:ljmphradd;时参数1ljmpminadd;分参数1ljmpsecadd;秒参数1ljmphrsub;时参数1ljmpminsub;分参数1ljmpsecsub;秒参数1hradd:mova,hradda,#01hdaacjnea,#24h,sethrclrasethr:movhr,aljmploopminadd:mova,minadda,#01hdaacjnea,#60h,sminclrasmin:movmin,aljmploopsecadd:ljmploophrsub:ljmploopminsub:ljmploopsecsub:mova,secadda,#99hdaacjnea,#99h,

温馨提示

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

最新文档

评论

0/150

提交评论