单片机实验指导书.docx
- 文档编号:5911923
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:80
- 大小:259.02KB
单片机实验指导书.docx
《单片机实验指导书.docx》由会员分享,可在线阅读,更多相关《单片机实验指导书.docx(80页珍藏版)》请在冰豆网上搜索。
单片机实验指导书
单片机在系统可编程实验开发板
实
验
指
导
书
电子控制工程学院
2008.10
目录
第一章前言1
第二章单片机在系统编程多功能实验板说明2
2.1单片机在系统编程多功能实验板的结构图2
2.2单片机在系统编程多功能实验板的元件分布2
2.3多功能实验板的电路图3
第三章相关软件的介绍5
3.1STC-ISP.exe软件的下载6
第四章实验指导书7
实验一数码管跑马显示7
实验二行列按键显示10
实验三中断15
实验四定时/计数器17
实验五串行通信18
实验六串行D/A实验22
实验七串行A/D实验23
实验八电子钟25
实验九通过命令控制的教学实验板综合测试程序31
实验十电子密码锁41
实验十一综合测试程序46
第一章前言
本实验指导具有普遍的意义,其中的实验可以在面包板上进行,也可以在外购的实验台上进行(只需改端口号),还可以在编者提供的“在系统编程单片机多功能实验板”上进行。
目前不少学校的单片机试验多采用教学设备厂生产的实验台,其实验台上可进行的实验追求大而全,难于满足学生学习由难而易的循序渐进的要求。
根据本人多年的教学经验和社会调查,学校的单片机教学学时少,外购的实验台上很多实验做不了,或者只能观察现象,不知所然,更不用说自己编程,这样就不能充分发挥实验台的作用。
为了让学生学得好,买得起,同时能随时在寝室里做硬件实验,掌握嵌入式系统的开发方法,我们设计了“在系统编程单片机多功能实验板”。
在系统编程单片机多功能实验板(以下简称实验板)的核心为STC89C系列单片机STC89C52RC,该单片机和8051/52、8951/52完全兼容,两者最大的差别在于前者可以在系统编程,并且可以反复地擦出和编程。
此外,功能上还略有增强,如有双数据指针、片内看门狗等。
多功能实验板结合了单片机在系统编程(烧写)功能及程序运行功能,充分利用单片机的资源,价格低廉(仅一百多元),使用方便,可再开发,使得用户一板在手,便拥有了编程器和实验板两套设备。
实验是学习单片机软、硬件设计的必需手段,编程器也是单片机开发的必备工具,因此它具有近期和远期效益。
用户可通过改变跳线来改变端口使用设计。
软件运行后,按照步骤调试,可直接上电,烧写程序,运行程序,马上就可以观察程序运行结果,免去了插、拔芯片的麻烦,更主要的是免去了单片机中必须的昂贵的硬件仿真器和专用编程器的开销。
只要读者有一台计算机,在家里或者在寝室里就可以进行以单片机为核心的嵌入式系统的硬件实验和应用开发。
多功能实验板充分利用了单片机的内部资源,能进行如下单元实验:
●数码管跑马显示
●行列按键显示
●中断
●定时/计数器
●串行通信
●串行D/A实验
●串行A/D实验
如果综合利用上述资源,用户可以设计诸如多功能数字钟、波形发生器、数字电压表、音乐盒、频率计、抢答器、计算器、模拟量采样等应用系统,为了用户开发的灵活性,实验板还预留了扩展板,可加焊少量器件。
用户可以通过此电路板组建一些较简单的系统,掌握嵌入式系统设计的初步技巧。
本实验板可作为学生课程设计、毕业设计的硬件平台。
如果读者需要此ISP多功能实验板可向本教材编者咨询,本教材前言中有联系方法。
本指导书对任何实验装置实用。
第二章单片机在系统编程多功能实验板说明
2.1单片机在系统编程多功能实验板的结构图
单片机在系统编程多功能实验板的结构图如图2-1所示。
图2-1ISP单片机综合实验板方框图
注意:
板上的单片机也可以用89C51/52,只是不能在系统编程,必须另用编程器编程。
2.2单片机在系统编程多功能实验板的元件分布
单片机在系统编程多功能实验板的元件分布如图2-2所示。
图2-2单片机在系统编程实验板的元件分布图
2.3多功能实验板的电路图
2.3.1单片机在系统编程多功能实验板的电路原理如图2-3所示。
图2-3单片机在系统编程多功能实验板的电路图
2.3.2实验板的跳线、开关、按钮功能
结合系统电路图和元件布局图,对系统处于运行状态下的跳线、开关、按钮做如下说明。
一、跳线JP1~JP4
用短接块改变跳线的状态来改变电路的连接。
下面对系统中的4组跳线分别进行说明。
●JP1串行A/DTLC0832双通道模数转换器。
通道0与接线端子相连,可以外扩传感器作为通道0的模拟量输入。
通道1的模拟量输入信号源有两个。
通过短接块来选择。
当JP1短接帽插上,JP1两插针短接,串行A/D通道1模拟量输入信号来自滑动变阻器。
我们可以通过调节电位器可调端来改变通道1的模拟量输入的大小;当此短接块拔掉,外接模拟信号可由555定时器通过JP3中的5、6脚短接引入。
●JP2JP2是1组两路并行的跳线。
它的设置改变带锁按压开关S2产生的脉冲的去向,以决定是外部终端INT0使用脉冲源还是计数器T0使用脉冲源。
当短接块将JP2的1、2脚相连时,脉冲源向外部中断INT0提供中断所需的脉冲,每按两次开关S2,产生一个脉冲,向外部中断INT0提供中断请求信号。
当短接块将JP2的3、4脚相连时,脉冲源向计数器T0提供外部计数脉冲,每按两次开关S2,产生一个计数脉冲。
●JP3JP3是1组三路并行的跳线。
它的设置改变555定时器产生脉冲的去向,以决定是外部终端INT1使用脉冲源,或者是计数器T0使用脉冲源,或者是串行A/D的模拟信号输入。
当短接块将JP3的1、2脚相连时,脉冲源向外部中断INT1提供中断所需的脉冲;当短接块将JP3的3、4脚相连时,脉冲源向计数器T0提供外部计数脉冲;当短接块将JP3的5、6脚相连时,脉冲源向串行A/D提供模拟信号输入。
●JP7JP7控制串行口的发送和接收,当短接块将JP7的1、2脚相连时,串行口实现自发自收。
当短接块拔除,则串行口向外发送信号或接收外部信号。
二、开关K1~K16
K1~K16拨位开关用作按键输入设备,用于置数或控制,例如用户可以通过此十六位开关选择运行单片机中的各个子程序。
三、四位拨动开关
提供四位开关量输入,通过拨动不同的开关决定每一路的输入状态。
四、带锁按压开关S2
带锁按压开关S2主要用于产生定时/计数器T0所需的外部计数脉冲和外部中断INT0所需的中断请求信号。
每按一次脉冲源电路输出电平变化一次,按两次才会产生一个脉冲。
五、复位按键RST
系统中有1个复位按键,用于单片机复位,每按一下,单片机复位一次。
六、发光二极管
当系统接通电源,处于工作状态时,二极管亮,否则二极管灭。
第三章相关软件的介绍
STC89系列单片机大部分具有在系统可编程(ISP)特性,ISP的好处是:
省去购买编程器,单片机在用户系统上即可下载/烧录用户程序,而无须将单片机从已生产好的产品上拆下,再用通用编程器将程序代码烧录进单片机内部。
3.1STC-ISP.exe软件的下载
3.1.1如何获得及使用STC提供的ISP下载工具(STC-ISP.exe软件):
1.获得STC提供的ISP下载工具(软件)
登陆www.MCU-M网站,从STC半导体专栏下载PC端的ISP程序,然后将其自解压,再安装即可(执行STC-ISPV391.exe),注意随时更新软件。
下载界面如图3-1所示。
2.使用STC-ISP下载工具(软件),请随时更新。
图3-1STC-ISP.exe软件下载界面
3.已经固化有ISP引导码,并设置为上电复位进入ISP的STC89C51RC/RD+系列单片机出厂时就已完全加密,需要单片机内部的电放光后上电复位(冷启动)才运行系统ISP程序。
4.如果电路板上除了接RS-232转换器外,还接了RS-485等电路,需要将其断开。
系统接了RS-485电路的,推荐在选项中选择下次冷启动时需P1.0/P1.1=1.1才判是否下载程序。
3.1.2STC-ISP.exe软件调试过程
STC-ISP.exe软件运行界面如图3-2所示:
调试步骤如下:
1.选择你所使用的单片机型号,例如,本实验电路板选用的单片机型号为STC89C52RC。
2.打开文件,选择要烧录的实验程序,必须调用实验程序代码,格式为*.bin或*.hex。
(当在仿真软件中编译时自动生成*.hex文件)每烧写一次新程序,要先指定缓冲区起始地址并清缓冲区;如果重复使用程序,则不能再清缓冲区。
3.选择串行口,使用的电脑串口,如串行口1对应COM1,串行口2对应COM2……有些新式笔记本电脑没有RS-232串行口,可买一条USB-RS232转换器。
我们选择COM1。
根据所选用的晶振来确定选择最高波特率。
4.设置是否双倍速,双倍速选中DoubleSpeed即可。
我们选择单倍速。
5.选择“Download/下载”按钮下载用户的程序进单片机内部,可重复执行步骤5,也可选择“Re-Download/重复下载”按钮。
下载时注意看提示,主要看是否要给单片机上电或复位,下载速度比一般通用编程器快。
一般先选择“Download/下载”按钮(彻底断电),然后再给单片机上电复位,而不要先上电。
新的设置冷启动后才生效。
上电后,文件缓存区如图3-2右侧所示。
图3-2STC-ISP.exe软件运行界面
第四章实验指导书
实验一数码管跑马显示
一、实验目的
1、熟悉51单片机并行口的输入方式,输出方式的编程;
2、熟悉共阴极LED的工作特性及控制方法;
3、学习在系统烧写单片机程序(在系统编程ISP)的方法。
二、实验电路和程序
1、实验电路
一个数码管由8个发光二极管组成,由于是共阴极,所以低电平选通。
如图4-1所示,SN74ALS245A接成直通方式通过P0口驱动数码管。
由74LS138对P1口译码控制SN74ALS245A驱动6个数码管的位选,剩余两路,一路接到发光二极管,另一路控制蜂鸣器。
由程序进行选通控制。
2、程序
(1)汇编程序:
通过程序控制使数码管进行从0到9的跑马显示和0.到9.的跑马显示,两个数字显示的间隙发光二极管发光,当跑马显示完毕后,发光二极管继续闪亮。
通过复位按键进行复位。
图4-1实验电路图
图表1
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
MOVA,#00H
MOVP1,A
MOVR0,#00H
LS:
MOVA,R0
MOVDPTR,#TAB0
MOVCA,@A+DPTR
MOVP1,A;数码管位选跑马
MOVA,R0
MOVDPTR,#TAB1
MOVCA,@A+DPTR
MOVP0,A;数码管数字显示
INCR0
ACALLDELAY
MOVP1,#0E0H
ACALLDELAY
SJMPLS
DELAY:
MOVR5,#08H;延时
DELAY1:
MOVR6,#0FAH
DELAY2:
MOVR7,#0FAH
DJNZR7,$
DJNZR6,DELAY2
DJNZR5,DELAY1
RET
TAB0:
DB00H,20H,40H,60H,80H,0A0H,00H,20H,40H,60H
DB80H,0A0H,00H,20H,40H,60H,80H,0A0H,00H,20H
TAB1:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DB0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH
END
(2)C语言程序:
通过程序控制使数码管进行从0到9的跑马显示和0.到9.的跑马显示,两个数字显示的间隙发光二极管发光,当跑马显示完毕后,发光二极管长亮。
通过复位按键进行复位。
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
uinta[20]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
uintb[20]={0x00,0x20,0x40,0x60,0x80,0xa0,0x00,0x20,0x40,0x60,
0x80,0xa0,0x00,0x20,0x40,0x60,0x80,0xa0,0x00,0x20};
voiddelay(uintcount)/*延时子程序*/
{
uinti;
while(count--!
=0)
{
for(i=0;i<72;i++);
}
}
main()
{
uintj;
for(j=0;j<20;j++)
{
P0=a[j];/*数字显示*/
P1=b[j];/*数码管跑马*/
delay(1000);/*延时*/
P1=0xe0;
delay(1000);/*延时*/
}
P1=0xe0;
}
(3)自编程序:
编程并烧写程序,6个数码管依次显示6,5,2,3,0.,9;然后,6个数码管同时点亮,显示65230.9。
再编一个小程序,在五个数码管上显示“HELLO”。
三、编写程序并在实验板上执行通过
1、数码管跑马显示0~9,0.~9.,测试数码管性能;
2、数码管依次显示6,5,2,3,0.,9,由于数码管位选决定每次只有一个数码管点亮,所以利用视觉误差使6个数码管同时点亮,显示65230.9;
3、自编数码管段代码,用数码管显示英文“HELLO”;
4、复位按键复位,重复执行。
实验二行列按键显示
一、实验目的
1、熟悉行列按键的定位方法;
2、进一步学习在系统编程(ISP)的方法。
二、实验电路
图4-2实验电路图
实验电路图如图4-2所示,按键信号由P2口进行识别,通过对按键坐标的判断来定义数码管的显示位和显示内容。
三、实验程序
16个按键按照从左至右,从上至下的顺序排列,操作时分别显示0,1,2,3,4,5,6,7,8,9,0.,1.,2.,3.,4.,8.;其中后六位分别代表A,B,C,D,E,F,复位键复位。
1、汇编程序:
KEYBUFEQU30H
ORG0000H
LJMPLS0
ORG0030H
LS0:
MOVP2,#0FH;判断纵坐标
MOVR1,#0FH
AJMPSKH
SKH:
MOVA,P2
ANLA,R1
XRLA,R1
MOVR0,A
CJNEA,#0FH,LS1
ACALLSKH
LS1:
MOVP2,#0F0H;判断行坐标
MOVR2,#0F0H
AJMPSKL
SKL:
MOVA,P2
ANLA,R2
XRLA,R2
MOVR6,A
CJNEA,#0F0H,KEY0
ACALLSKL
KEY0:
MOVA,R6;判断如果是第一个按键操作,则显示偏移量为0
ADDA,R0
CJNEA,#11H,KEY1
MOVKEYBUF,#0
LJMPUK
KEY1:
MOVA,R6;判断如果是第二个按键操作,则显示偏移量为1
;依次类推
ADDA,R0
CJNEA,#21H,KEY2
MOVKEYBUF,#1
LJMPUK
KEY2:
MOVA,R6
ADDA,R0
CJNEA,#41H,KEY3
MOVKEYBUF,#2
LJMPUK
KEY3:
MOVA,R6
ADDA,R0
CJNEA,#81H,KEY4
MOVKEYBUF,#3
LJMPUK
KEY4:
MOVA,R6
ADDA,R0
CJNEA,#12H,KEY5
MOVKEYBUF,#4
LJMPUK
KEY5:
MOVA,R6
ADDA,R0
CJNEA,#22H,KEY6
MOVKEYBUF,#5
LJMPUK
KEY6:
MOVA,R6
ADDA,R0
CJNEA,#42H,KEY7
MOVKEYBUF,#6
LJMPUK
KEY7:
MOVA,R6
ADDA,R0
CJNEA,#82H,KEY8
MOVKEYBUF,#7
LJMPUK
KEY8:
MOVA,R6
ADDA,R0
CJNEA,#14H,KEY9
MOVKEYBUF,#8
LJMPUK
KEY9:
MOVA,R6
ADDA,R0
CJNEA,#24H,KEY10
MOVKEYBUF,#9
LJMPUK
KEY10:
MOVA,R6
ADDA,R0
CJNEA,#44H,KEY11
MOVKEYBUF,#10
LJMPUK
KEY11:
MOVA,R6
ADDA,R0
CJNEA,#84H,KEY12
MOVKEYBUF,#11
LJMPUK
KEY12:
MOVA,R6
ADDA,R0
CJNEA,#18H,KEY13
MOVKEYBUF,#12
LJMPUK
KEY13:
MOVA,R6
ADDA,R0
CJNEA,#28H,KEY14
MOVKEYBUF,#13
LJMPUK
KEY14:
MOVA,R6
ADDA,R0
CJNEA,#48H,KEY15
MOVKEYBUF,#14
LJMPUK
KEY15:
MOVA,R6
ADDA,R0
CJNEA,#88H,KEY16
MOVKEYBUF,#15
LJMPUK
KEY16:
LJMPLS0
UK:
MOVA,KEYBUF;数码显示模块
MOVDPTR,#TAB1
MOVCA,@A+DPTR
MOVP1,A
LCALLDELAY
MOVA,KEYBUF
MOVDPTR,#TAB0
MOVCA,@A+DPTR
MOVP0,A
LCALLDL10MS
LJMPLS0
DELAY:
MOVR2,#0FEH
DELAY1:
DJNZR2,DELAY1
RET
DL10MS:
MOVR3,#14H
DL10MS1:
LCALLDELAY
DJNZR3,DL10MS1
RET
TAB1:
DB00H,20H,40H,60H,80H,0A0H,00H,20H
DB40H,60H,80H,0A0H,00H,20H,40H,60H
TAB0:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH,0BFH,86H,0DBH,0CFH,0E6H,0FFH
END
2、C语言程序:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
uchara[4][4]={{0x00,0x20,0x40,0x60},{0x80,0xa0,0x00,0x20},
{0x40,0x60,0x80,0xa0},{0x00,0x20,0x40,0x60}};
ucharb[4][4]={{0x3f,0x06,0x5b,0x4f},{0x66,0x6d,0x7d,0x07},
{0x7f,0x6f,0xbf,0x86},{0xdb,0xcf,0xe6,0xff}};
ucharrnum,lnum;
voiddelay(uintcount)/*延时*/
{
uchart;
while(count--!
=0)
{
for(t=0;t<72;t++);
}
}
ucharkeysacn(void)
{
P2=0x0f;/*确定按键列*/
if((P2&0x0f)!
=0x0f)
{
delay(5);
if((P2&0x0f)!
=0x0f)
{
if(P2==0x0e)
rnum=1;
if(P2==0x0d)
rnum=2;
if(P2==0x0b)
rnum=3;
if(P2==0x07)
rnum=4;
}
P2=0xf0;/*确定按键行*/
if((P2&0xf0)!
=0xf0)
{
if(P2==0xe0)
lnum=1;
if(P2==0xd0)
lnum=2;
if(P2==0xb0)
lnum=3;
if(P2==0x70)
lnum=4;
}
P0=b[rnum-1][lnum-1];
P1=a[rnum-1][lnum-1];
delay(1000);
}
}
main()
{
while
(1)
{
keysacn();
}
}
3、自编程序
编程并烧写程序,按键1按下,数码管显示65230.9,数码管2按下显示“HELLO”。
四、编写程序并在实验板上执行通过
1、调试已有程序,实现按键操作与数码管显示的对应;
2、按键1操作,显示6523.9;按键2操作,显示“HELLO”;
3、复位,重复操作。
实验三中断
一、实验目的
了解中断的产生及影响过程,掌握中断程序的编制。
二、实验连线
用短接块将JP2的3、4脚相连(即连向INT0方向),RS触发器(消抖电路)向单片机的外部中断INT0引脚提供中断所需的脉冲,每按两次开关S2,电平变反一次,产生一个跳变沿,作为外部中断INT0的中断请求信号。
实验电路如图4-3所示。
图4-3实验电路图
三、实验程序
记录并显示INT0的中断次数,在数码管中显示出来,即每产生一次中断,显示加一。
中断次数不超过16次
1、汇编程序
ORG0000H
AJMPNT
ORG0003H
AJMPINT0R
NT:
MOVIE,#81H;允许INT0中断,置EA=1
SETBIT0;边沿触发中断
MOVR0,#00H;计数初值为0
BIO:
MOVP1,#0A0H;第6个数码管显示终端次数
MOVDPTR,#TAB0;字形码表送至DPTR
MOVA,R0
MOVCA,@A+DPTR;查表
MOVP0,A;显示
SJMP$;等待中断
INT0R:
INCR0
CJNER0,#10H,RET0;中断是否满15次
MOVR0,#00H;循环
RET0:
POPDPH
POPDPL
MOVDPTR,#BIO
PUSHDPL;修改终端返回值
PUSHDPH
RETI
TAB0:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH,0BFH,0DBH,0CFH,0E6H,0EDH,0F
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 指导书
![提示](https://static.bdocx.com/images/bang_tan.gif)