单片机原理及应用实验教程.docx
- 文档编号:3436109
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:51
- 大小:246.40KB
单片机原理及应用实验教程.docx
《单片机原理及应用实验教程.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用实验教程.docx(51页珍藏版)》请在冰豆网上搜索。
单片机原理及应用实验教程
单片机原理及应用
实验教程
计算机科学学院硬件技术实验室
2011.9
单片机应用开发步骤
实验一P1口输出实验
(参考QTH-2008XS系列单片机实验仪说明书1.2节)
【实验名称】
P1口输出实验。
【实验内容】
P1口是一个准双向口,外接八个发光二极管,设计电路和程序,使得发光二极管循环变亮。
【实验目的】
学习P1口的使用方法。
【实验电路】
【实验连线】
P10~P17分别接L1~L8。
【连线所在位置】
P10(P1.0),P11(P1.1),P12(P1.2),P13(P1.3),P14(P1.4),P15(P1.5),P16(P1.6),P17(P1.7)8根线在仿真主机部件区。
L1~L8在LED显示区。
注意:
P10~P17是实验仪器上的标号,P1.0~P1.7是和P10~P17对应的标准标号。
另外几个并行接口也是这样对应的,在此说明,在后面的实验中不再重复。
【实验程序】项目文件:
P1.HPJ/CP1.HPJ,源程序文件:
P1.ASM/CP1.C。
汇编语言程序P1.ASM:
ORG0000H
AJMPRIGHT
ORG0030H
RIGHT:
MOVR0,#08H
MOVA,#0FFH
CLRC
RIGHT1:
RRCA
MOVP1,A
CALLDELAY
DJNZR0,RIGHT1
AJMPRIGHT
;*****************************************************************************
;/*延时子程序*/
;*****************************************************************************
DELAY:
MOVR5,#10
DELAY1:
MOVR6,#50
DELAY2:
MOVR7,#250
DJNZR7,$
DJNZR6,DELAY2
DJNZR5,DELAY1
RET
END
C51语言程序CP1.C:
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharrrc(uchara,n);
ucharrrc(uchara,n)//循环右移子程序
{
ucharb,c;
b=a<<(8-n);
c=a>>n;
a=c|b;
return(a);
}
voidmain()
{
uchari,temp;
uintj;
P1=0xff;
loop:
temp=0x7f;
for(i=0;i<8;i++)
{
P1=rrc(temp,i);
for(j=0;j<30000;j++);//延时
}
gotoloop;
}
【连机调试】
主要步骤如下:
(以项目文件CP1.HPJ和文件CP1.C为例)
1.将微机的串口和单片机的串口连接(单片机的串口在单片机的仿真主机部件区最右边)。
2.连接实验导线。
3.连接单片机电源线并打开单片机电源。
4.在桌面上找图标
,启动。
如果出现
说明单片机电源未开。
5.在“项目菜单”中打开项目文件CP1.HPJ。
6.在“文件菜单”中打开源程序文件CP1.C。
7.在“项目菜单”中编译连接装载。
8.选择“!
”执行,观察发光二极管的变化。
9.关闭项目。
【思考题】
1分析CP2.C,比较CP2.C和CP1.C的差别。
②打开p1.DSN,在仿真软件PROTEUS中观察此实验。
实验二P1P3口输入输出实验
(参考QTH-2008XS系列单片机实验仪说明书1.3节)
【实验名称】
P1P3口输入输出实验。
【实验内容】
P3口作为输入口读取开关状态,P1口作为输出口,设计电路和程序,使得发光二极管显示开关状态。
【实验目的】
学习P1、P3口的使用方法。
【实验电路】
【实验连线】
①P10~P17分别接L1~L8。
2P30~P33分别接K01~K03,P36~P37分别接K07~K08。
P34(P3.4),P35(P3.5)不接开关,原因见调试部分的说明,也就是说,只使用上图中的6个开关。
【连线所在位置】
P10(P1.0),P11(P1.1),P12(P1.2),P13(P1.3),P14(P1.4),P15(P1.5),P16(P1.6),P17(P1.7)8根线在仿真主机部件区。
P30(P3.0),P31(P3.1),P32(P3.2),P33(P3.3),P34(P3.4),P35(P3.5),P36(P3.6),P37(P3.7)8根线在仿真主机部件区。
L1~L8在LED显示区。
K01~K08在手动高低电平输出区。
【实验程序】项目文件:
P1P3.HPJ/CP1P3.HPJ,源程序文件:
P1P3.ASM/CP1P3.C。
汇编语言程序P1P3.ASM:
ORG0000H
AJMPMAIN
ORG0030H
MAIN:
MOVP1,#00H
MOVP1,P3;把P3口的状态送到P1口
LOOP:
CALLDELAY
AJMPMAIN
;*****************************************************************************
;/*延时子程序*/
;*****************************************************************************
DELAY:
MOVR5,#10
DELAY1:
MOVR6,#50
DELAY2:
MOVR7,#250
DJNZR7,$
DJNZR6,DELAY2
DJNZR5,DELAY1
RET
END
C51语言程序CP1P3.C:
#include
#defineucharunsignedchar
#defineuintunsignedint
voidmain()
{
uintj;
loop:
//P1=0XFF;
P1=P3;//读取P3口状态送P1口
for(j=0;j<5000;j++);//延时
gotoloop;
}
【连机调试】
主要步骤如下:
(以项目文件CP1P3.HPJ和文件CP1P3.C为例)
1.将微机的串口和单片机的串口连接(单片机的串口在单片机的仿真主机部件区最右边)。
2.连接实验导线。
3.连接单片机电源线并打开单片机电源。
4.在桌面上找图标
,启动。
如果出现
说明单片机电源未开。
5.在“项目菜单”中打开项目文件CP1P3.HPJ。
6.在“文件菜单”中打开源程序文件CP1P3.C。
7.在“项目菜单”中编译连接装载。
8.选择“!
”执行,拨动开关,观察发光二极管的变化。
9.关闭项目。
注意:
P34(P3.4)和P35(P3.5)不能接开关,这两个脚悬空,否则下载程序失败,会出现下面的对话框:
【思考题】
1.修改实验程序,当输入为全0或全1时退出程序。
2.修改实验连线和程序,改为以P1口作输入,P3口作输出,测试是否可行。
3.打开p1p3.DSN,在仿真软件PROTEUS中观察此实验。
实验三外部中断实验
(参考QTH-2008XS系列单片机实验仪说明书1.5节)
(方案一)
【实验名称】
外部中断实验。
【实验内容】
设计电路和程序,利用开关发出中断请求信号,当开关为高电平发光二极管常亮,为低电平时中断处理程序控制发光二极管依此左移变亮。
【实验目的】
掌握外部中断技术的基本使用方法及中断程序的编程方法。
【实验电路】
【实验连线】
P10~P17分别接L1~L8。
K01接P34(P3.4)对应单片机CPU上的INT0。
【连线所在位置】
P10(P1.0),P11(P1.1),P12(P1.2),P13(P1.3),P14(P1.4),P15(P1.5),P16(P1.6),P17(P1.7)8根线在仿真主机部件区。
L1-L8在LED显示区
K01在手动高低电平输出区
P34(P3.4)在仿真主机部件区。
【实验程序】项目文件:
IINT0.HPJ/CIINT0.HPJ,源程序文件:
IINT0.ASM/CIINT0.C
汇编语言文件IINT0.ASM:
ORG0000H
AJMPMAIN
ORG0003H
AJMPIINT0
ORG0030H
MAIN:
MOVIE,#10000001B;允许中断
CLRIT0;IT=00低电平触发方式
LOOP:
MOVP1,#00H
AJMPLOOP
IINT0:
MOVR0,#08H;中断服务程序
MOVA,#0FFH
CLRC
IINT01:
RLCA
MOVP1,A
CALLDELAY
DJNZR0,IINT01
RETI
;*****************************************************************************
;/*延时子程序*/
;*****************************************************************************
DELAY:
MOVR5,#10
DELAY1:
MOVR6,#50
DELAY2:
MOVR7,#250
DJNZR7,$
DJNZR6,DELAY2
DJNZR5,DELAY1
RET
END
C51语言文件CIINT0.C:
#include
#defineucharunsignedchar
#defineuintunsignedint
voidmain()
{
IE=0x81;//允许外部中断0
IT0=0;//电平方式,低电平有效.当IT0或IT1为1时边沿方式
loop:
P1=0x00;//全亮
gotoloop;
}
/*中断服务子程序*/
voidiint0()interrupt0using0
//interrupt0表示使用外部中断0的输入信号,usingn表示向量地址8n+3
{
ucharb,c,i,temp;
uintj;
temp=0x7f;
for(i=0;i<8;i++)//右移一位
{
b=temp<<(8-i);
c=temp>>i;
P1=c|b;
for(j=0;j<30000;j++);
}
for(j=0;j<30000;j++);
P1=0x00;
}
【连机调试】
主要步骤如下:
(以项目文件CIINT0.HPJ和文件CIINT0.C为例)
1.将微机的串口和单片机的串口连接(单片机的串口在单片机的仿真主机部件区最右边)。
2.连接实验导线。
3.连接单片机电源线并打开单片机电源。
4.在桌面上找图标
,启动。
如果出现
说明单片机电源未开。
5.在“项目菜单”中打开项目文件CIINT0.HPJ。
6.在“文件菜单”中打开源程序文件CIINT0.C。
7.在“项目菜单”中编译连接装载。
8.选择“!
”执行,拨动开关,观察发光二极管的变化。
9.关闭项目。
【思考题】
1.打开Iint0.DSN,在仿真软件PROTEUS中观察此实验。
实验三外部中断实验
(方案二)
【实验名称】
外部中断实验。
【实验内容】
设计电路和程序,利用两个开关发出中断请求信号,当开关1为高电平发光二极管常亮,为低电平时中断处理程序控制发光二极管依此左移变亮。
当开关2为高电平发光二极管常亮,为低电平时中断处理程序控制发光二极管依此右移变亮。
【实验目的】
掌握多个外部中断源技术的基本使用方法及中断程序的编程方法。
【实验电路】
【实验连线】
在方案一连线的基础上加一跟线:
K02接P3.5(P35)对应单片机CPU上的INT1。
【连线所在位置】
K02在手动高低电平输出区。
P3.5(P35)在仿真主机部件区。
【实验程序】项目文件:
INT01.HPJ/CINT01.HPJ,源程序文件:
INT01.ASM/CINT01.C
汇编语言文件INT01.ASM:
ORG0000H
AJMPMAIN
ORG0003H
AJMPIINT0
ORG0013H
AJMPIINT1
ORG0030H
MAIN:
MOVIE,#10000101B;允许中断,开放INT0、INT1
CLRIT0;低电平触发
CLRIT1;低电平触发
LOOP:
MOVP1,#00H;发光二极管常亮
AJMPLOOP
IINT0:
MOVR0,#08H;外部中断0
MOVA,#0FFH
CLRC
IINT01:
RLCA;左移
MOVP1,A
CALLDELAY
DJNZR0,IINT01
RETI
IINT1:
MOVR0,#08H;外部中断1
MOVA,#0FFH
CLRC
IINT11:
RRCA;右移
MOVP1,A
CALLDELAY
DJNZR0,IINT11
RETI
;*****************************************************************************
;/*延时子程序*/
;*****************************************************************************
DELAY:
MOVR5,#10
DELAY1:
MOVR6,#50
DELAY2:
MOVR7,#250
DJNZR7,$
DJNZR6,DELAY2
DJNZR5,DELAY1
RET
RET
END
C51语言文件CINT01.C:
#include
#defineucharunsignedchar
#defineuintunsignedint
voidmain()
{
IE=0x85;//允许外部中断0和外部中断1,当两个信号都有输入时,外部中断0优先
IT0=0;//电平方式,低电平有效.当IT0或IT1为1时边沿方式
IT1=0;
loop:
P1=0x00;
gotoloop;
}
voidiint1()interrupt2using2
//interrupt2表示使用外部中断1的输入信号,usingn表示向量地址8n+3
{
ucharb,c,i,temp;
uintj;
temp=0x7f;
for(i=0;i<8;i++)//右移一位
{
b=temp<<(8-i);
c=temp>>i;
P1=c|b;
for(j=0;j<30000;j++);
}
for(j=0;j<30000;j++);
}
voidiint0()interrupt0using0
//interrupt0表示使用外部中断0的输入信号,usingn表示向量地址8n+3
{
ucharb,c,i,temp;
uintj;
temp=0xfe;
for(i=0;i<8;i++)//左移一位
{
b=temp>>(8-i);
c=temp<
P1=c|b;
for(j=0;j<30000;j++);
}
for(j=0;j<30000;j++);
}
【连机调试】
主要步骤如下:
(以项目文件CINT01.HPJ和文件CINT01.C为例)
1.将微机的串口和单片机的串口连接(单片机的串口在单片机的仿真主机部件区最右边)。
2.连接实验导线。
3.连接单片机电源线并打开单片机电源。
4.在桌面上找图标
,启动。
如果出现
说明单片机电源未开。
5.在“项目菜单”中打开项目文件CINT01.HPJ。
6.在“文件菜单”中打开源程序文件CINT01.C。
7.在“项目菜单”中编译连接装载。
8.选择“!
”执行,拨动开关,观察发光二极管的变化。
9.关闭项目。
【思考题】
1.打开Iint01.DSN,在仿真软件PROTEUS中观察此实验。
实验四定时器/计数器实验
(参考QTH-2008XS系列单片机实验仪说明书1.6节)
(方案一定时器实验)
【实验名称】
定时器实验
【实验内容】
利用单片机定时器T2进行倒计时,并在双位数码管上显示倒计时间。
【实验目的】
掌握单片机定时和中断的编程方法。
【实验电路】
【实验连线】
1DIN-P3.0(P30)
2CLK接P3.1(P31)
DIN和CLK在液晶显示器下方的串并转换电路,P3.0(P30)和P3.0(P31)在仿真主机部件区。
【实验程序】项目文件:
time.HPJ/Ctime.HPJ,源程序文件:
time.ASM/Ctime.C
汇编语言文件time.ASM:
;$NOMOD51
;
;NAMETIME
;
;$NOLIST
;$INCLUDE(REG52.INC)
;$LIST
;
BUFFDATA50H;计数值,每100个10MS即1S
SSBUFDATA51H;秒缓冲区
ORG0000H
AJMPMAIN
ORG002BH;定时器2中断程序入口
AJMPTIME
ORG0030H
;RCAP2H和RCAP2L重装计数初值0D8F0H=55536D,时钟频率12MHZ,10MS定时
MAIN:
MOVRCAP2H,#0D8H;RCAP2H→TH2
MOVRCAP2L,#0F0H;RCAP2L→TL2
MOVTH2,#0D8H;定时时间=(2^16-T0初值)*时钟周期*12
MOVTL2,#0F0H;(2^16-OD8F0H)*1/(12*10^6)*12=10MS
MOVIE,#10100000B;允许中断
MOVT2CON,#00001000B;允许重新装入(外部允许标志)
MOVSSBUF,#00H;两个数码管显示的初值
MOVBUFF,#100;计数值,每100个10MS即1S
SETBTR2;启动定时计数器2
LOOP:
ACALLDSUP
CALLDELAY
AJMPLOOP
DSUP:
MOVA,SSBUF;取秒的低位
ANLA,#0FH
ACALLSEND;显示
MOVA,SSBUF
SWAPA
ANLA,#0FH;取秒的高位
ACALLSEND;显示
RET
SEND:
MOVDPTR,#SGTB1
MOVCA,@A+DPTR;取字符
MOVSBUF,A
JNBTI,$
CLRTI;发送字符
RET
TIME:
CLREA;关中断
PUSHPSW;保护工作寄存器
PUSHACC
PUSH01H
CLRTF2
MOVA,BUFF;取1%秒BUFF缓冲区的内容
DECA;1%秒BUFF缓冲区内容减1
MOVBUFF,A;1%秒BUFF缓冲区内容保存
CJNEA,#00H,TIME2;是否等于0秒?
不等于转出
MOVA,#64H;1%秒BUFF缓冲区送100
MOVBUFF,A
MOVA,SSBUF;取秒SSBUF缓冲区的内容
SUBBA,#01H;秒单元内容减1
JNBPSW.6,TIME1;是否有辅助借位,若有CF=1
SUBBA,#06H;有借位进行十进制调整,#00H-1=#0FFH,#0FFH-6-1=0F8H,CF=1
TIME1:
MOVSSBUF,A
CJNEA,#0F8H,TIME2;是否等于60秒?
不等于转出
MOVA,#59H;秒缓冲区送59
MOVSSBUF,A
AJMPTIME2
TIME2:
POP01H;恢复断点
POPACC
POPPSW
SETBEA;开中断
RETI
;*****************************************************************************
;/*延时子程序*/
;*****************************************************************************
DELAY:
MOVR4,#250;延时
DELAY1:
MOVR5,#250
DJNZR5,$
DJNZR4,DELAY1
RET
;*****************************************************************************
;/*字符编码*/
;*****************************************************************************
SGTB1:
DB03H;0
DB9FH;1
DB25H;2
DB0DH;3
DB99H;4
DB49H;5
DB41H;6
DB1FH;7
DB01H;8
DB09H;9
DB0FFH;灭
END
C51语言文件Ctime.C:
#inclu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 应用 实验 教程