单片机原理和应用实验教程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机原理及应用
实 验 教 程
计算机科学学院硬件技术实验室
2011.9
单片机应用开发步骤
实验一 P1口输出实验
(参考QTH-2008XS 系列单片机实验仪说明书1.2节)
【实验名称】
P1口输出实验。
【实验内容】
P1口是一个准双向口,外接八个发光二极管,设计电路和程序,使得发光二极管循环变亮。
【实验目的】
【实验电路】
【实验连线】
在方案一连线的基础上加一跟线:K02接P3.5(P35)对应单片机CPU上的INT1。
【连线所在位置】
K02在手动高低电平输出区。
P3.5(P35)在仿真主机部件区。
【实验程序】项目文件:INT01.HPJ/CINT01.HPJ,源程序文件:INT01.ASM/CINT01.C
注意:P10~P17是实验仪器上的标号,P1.0~P1.7是和P10~P17对应的标准标号。另外几个并行接口也是这样对应的,在此说明,在后面的实验中不再重复。
【实验程序】项目文件:P1.HPJ/CP1.HPJ,源程序文件:P1.ASM/CP1.C。
汇编语言程序P1.ASM:
ORG0000H
AJMPRIGHT
DJNZR5,DELAY1
RET
END
C51语言程序CP1P3.C:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
void main()
{
uint j;
loop:
//P1=0XFF;
P1=P3;//读取P3口状态送P1口
DJNZR5,DELAY1
RET
END
C51语言程序CP1.C:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar rrc(uchar a,n);
uchar rrc(uchar a,n)//循环右移子程序
ORG0030H
RIGHT:MOVR0,#08H
MOVA,#0FFH
CLRC
RIGHT1:RRCA
MOVP1,A
CALLDELAY
DJNZR0,RIGHT1
AJMPRIGHT
;*****************************************************************************
【连线所在位置】
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
CLRC
IINT01:RLCA
MOVP1,A
CALLDELAY
DJNZR0,IINT01
RETI
;*****************************************************************************
;/*延时子程序*/
;*****************************************************************************
【思考题】
1.修改实验程序,当输入为全0或全1时退出程序。
2.修改实验连线和程序,改为以P1口作输入,P3口作输出,测试是否可行。
3.打开p1p3.DSN,在仿真软件PROTEUS中观察此实验。
实验三外部中断实验
(参考QTH-2008XS 系列单片机实验仪说明书1.5节)
(方案一)
【实验名称】
外部中断实验。
}
goto loop;
}
【连机调试】
主要步骤如下:(以项目文件CP1.HPJ和文件CP1.C为例)
1.将微机的串口和单片机的串口连接(单片机的串口在单片机的仿真主机部件区最右边)。
2.连接实验导线。
3.连接单片机电源线并打开单片机电源。
4.在桌面上找图标 ,启动。如果出现 说明单片机电源未开。
5.在“项目菜单”中打开项目文件CP1.HPJ。
汇编语言文件INT01.ASM:
ORG0000H
AJMPMAIN
ORG0003H
AJMPIINT0
ORG0013H
AJMPIINT1
ORG0030H
MAIN:MOVIE,#10000101B;允许中断,开放INT0、INT1
CLRIT0;低电平触发
CLRIT1;低电平触发
LOOP:MOVP1,#00H;发光二极管常亮
5.在“项目菜单”中打开项目文件CP1P3.HPJ。
6.在“文Fra Baidu bibliotek菜单”中打开源程序文件CP1P3.C。
7.在“项目菜单”中编译连接装载。
8.选择“!”执行,拨动开关,观察发光二极管的变化。
9.关闭项目。
注意:P34(P3.4)和P35(P3.5)不能接开关,这两个脚悬空,否则下载程序失败,会出现下面的对话框:
学习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显示区。
for(j=0;j<5000;j++);//延时
goto loop;
}
【连机调试】
主要步骤如下:(以项目文件CP1P3.HPJ和文件CP1P3.C为例)
1.将微机的串口和单片机的串口连接(单片机的串口在单片机的仿真主机部件区最右边)。
2.连接实验导线。
3.连接单片机电源线并打开单片机电源。
4.在桌面上找图标 ,启动。如果出现 说明单片机电源未开。
;/*延时子程序*/
;*****************************************************************************
DELAY:MOVR5,#10
DELAY1: MOV R6,#50
DELAY2: MOV R7,#250
DJNZ R7,$
DJNZ R6,DELAY2
#define uint unsigned int
void main ()
{
IE=0x81;//允许外部中断0
IT0=0;//电平方式,低电平有效.当IT0或IT1为1时边沿方式
loop:
P1=0x00;//全亮
goto loop;
}
/*中断服务子程序*/
void iint0() interrupt 0 using 0
6.在“文件菜单”中打开源程序文件CP1.C。
7.在“项目菜单”中编译连接装载。
8.选择“!”执行,观察发光二极管的变化。
9.关闭项目。
【思考题】
1分析CP2.C,比较CP2.C和CP1.C的差别。
②打开p1.DSN,在仿真软件PROTEUS中观察此实验。
实验二P1P3口输入输出实验
(参考QTH-2008XS 系列单片机实验仪说明书1.3节)
【实验内容】
设计电路和程序,利用开关发出中断请求信号,当开关为高电平发光二极管常亮,为低电平时中断处理程序控制发光二极管依此左移变亮。
【实验目的】
掌握外部中断技术的基本使用方法及中断程序的编程方法。
【实验电路】
【实验连线】
P10~P17分别接L1~L8。
K01接P34(P3.4)对应单片机CPU上的INT0。
【实验名称】
P1P3口输入输出实验。
【实验内容】
P3口作为输入口读取开关状态,P1口作为输出口,设计电路和程序,使得发光二极管显示开关状态。
【实验目的】
学习P1、P3口的使用方法。
【实验电路】
【实验连线】
①P10~P17分别接L1~L8。
2P30~P33分别接K01~K03,P36~P37分别接K07~K08。
DELAY:MOVR5,#10
DELAY1: MOV R6,#50
DELAY2: MOV R7,#250
DJNZ R7,$
DJNZ R6,DELAY2
DJNZR5,DELAY1
RET
END
C51语言文件CIINT0.C:
#include <reg51.h>
#define uchar unsigned char
汇编语言文件IINT0.ASM:
ORG0000H
AJMPMAIN
ORG0003H
AJMPIINT0
ORG0030H
MAIN:MOVIE,#10000001B;允许中断
CLRIT0;IT=00低电平触发方式
LOOP:MOVP1,#00H
AJMPLOOP
IINT0:MOVR0,#08H;中断服务程序
MOVA,#0FFH
;/*延时子程序*/
;*****************************************************************************
DELAY:MOVR5,#10
DELAY1:MOV R6,#50
DELAY2:MOV R7,#250
DJNZ R7,$
DJNZ R6,DELAY2
(方案二)
【实验名称】
外部中断实验。
【实验内容】
设计电路和程序,利用两个开关发出中断请求信号,当开关1为高电平发光二极管常亮,为低电平时中断处理程序控制发光二极管依此左移变亮。当开关2为高电平发光二极管常亮,为低电平时中断处理程序控制发光二极管依此右移变亮。
【实验目的】
掌握多个外部中断源技术的基本使用方法及中断程序的编程方法。
5.在“项目菜单”中打开项目文件CIINT0.HPJ。
6.在“文件菜单”中打开源程序文件CIINT0.C。
7.在“项目菜单”中编译连接装载。
8.选择“!”执行,拨动开关,观察发光二极管的变化。
9.关闭项目。
【思考题】
1.打开Iint0.DSN,在仿真软件PROTEUS中观察此实验。
实验三外部中断实验
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根线在仿真主机部件区。
AJMPLOOP
IINT0:MOVR0,#08H;外部中断0
MOVA,#0FFH
CLRC
IINT01:RLCA;左移
MOVP1,A
CALLDELAY
DJNZR0,IINT01
RETI
IINT1:MOVR0,#08H;外部中断1
汇编语言程序P1P3.ASM:
ORG0000H
AJMPMAIN
ORG0030H
MAIN:MOVP1,#00H
MOVP1,P3;把P3口的状态送到P1口
LOOP:CALLDELAY
AJMPMAIN
;*****************************************************************************
{
uchar b,c;
b=a<<(8-n);
c=a>>n;
a=c|b;
return(a);
}
void main()
{
uchar i,temp;
uint j;
P1=0xff;
loop:
temp=0x7f;
for(i=0;i<8;i++)
{
P1=rrc(temp,i);
for(j=0;j<30000;j++);//延时
//interrupt 0 表示使用外部中断0的输入信号,using n表示向量地址8n+3
{
uchar b,c,i,temp;
uint j;
temp=0x7f;
for(i=0;i<8;i++)//右移一位
{
b=temp<<(8-i);
c=temp>>i;
P1=c|b;
for(j=0;j<30000;j++);
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。
}
for(j=0;j<30000;j++);
P1=0x00;
}
【连机调试】
主要步骤如下:(以项目文件CIINT0.HPJ和文件CIINT0.C为例)
1.将微机的串口和单片机的串口连接(单片机的串口在单片机的仿真主机部件区最右边)。
2.连接实验导线。
3.连接单片机电源线并打开单片机电源。
4.在桌面上找图标 ,启动。如果出现 说明单片机电源未开。
实 验 教 程
计算机科学学院硬件技术实验室
2011.9
单片机应用开发步骤
实验一 P1口输出实验
(参考QTH-2008XS 系列单片机实验仪说明书1.2节)
【实验名称】
P1口输出实验。
【实验内容】
P1口是一个准双向口,外接八个发光二极管,设计电路和程序,使得发光二极管循环变亮。
【实验目的】
【实验电路】
【实验连线】
在方案一连线的基础上加一跟线:K02接P3.5(P35)对应单片机CPU上的INT1。
【连线所在位置】
K02在手动高低电平输出区。
P3.5(P35)在仿真主机部件区。
【实验程序】项目文件:INT01.HPJ/CINT01.HPJ,源程序文件:INT01.ASM/CINT01.C
注意:P10~P17是实验仪器上的标号,P1.0~P1.7是和P10~P17对应的标准标号。另外几个并行接口也是这样对应的,在此说明,在后面的实验中不再重复。
【实验程序】项目文件:P1.HPJ/CP1.HPJ,源程序文件:P1.ASM/CP1.C。
汇编语言程序P1.ASM:
ORG0000H
AJMPRIGHT
DJNZR5,DELAY1
RET
END
C51语言程序CP1P3.C:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
void main()
{
uint j;
loop:
//P1=0XFF;
P1=P3;//读取P3口状态送P1口
DJNZR5,DELAY1
RET
END
C51语言程序CP1.C:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar rrc(uchar a,n);
uchar rrc(uchar a,n)//循环右移子程序
ORG0030H
RIGHT:MOVR0,#08H
MOVA,#0FFH
CLRC
RIGHT1:RRCA
MOVP1,A
CALLDELAY
DJNZR0,RIGHT1
AJMPRIGHT
;*****************************************************************************
【连线所在位置】
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
CLRC
IINT01:RLCA
MOVP1,A
CALLDELAY
DJNZR0,IINT01
RETI
;*****************************************************************************
;/*延时子程序*/
;*****************************************************************************
【思考题】
1.修改实验程序,当输入为全0或全1时退出程序。
2.修改实验连线和程序,改为以P1口作输入,P3口作输出,测试是否可行。
3.打开p1p3.DSN,在仿真软件PROTEUS中观察此实验。
实验三外部中断实验
(参考QTH-2008XS 系列单片机实验仪说明书1.5节)
(方案一)
【实验名称】
外部中断实验。
}
goto loop;
}
【连机调试】
主要步骤如下:(以项目文件CP1.HPJ和文件CP1.C为例)
1.将微机的串口和单片机的串口连接(单片机的串口在单片机的仿真主机部件区最右边)。
2.连接实验导线。
3.连接单片机电源线并打开单片机电源。
4.在桌面上找图标 ,启动。如果出现 说明单片机电源未开。
5.在“项目菜单”中打开项目文件CP1.HPJ。
汇编语言文件INT01.ASM:
ORG0000H
AJMPMAIN
ORG0003H
AJMPIINT0
ORG0013H
AJMPIINT1
ORG0030H
MAIN:MOVIE,#10000101B;允许中断,开放INT0、INT1
CLRIT0;低电平触发
CLRIT1;低电平触发
LOOP:MOVP1,#00H;发光二极管常亮
5.在“项目菜单”中打开项目文件CP1P3.HPJ。
6.在“文Fra Baidu bibliotek菜单”中打开源程序文件CP1P3.C。
7.在“项目菜单”中编译连接装载。
8.选择“!”执行,拨动开关,观察发光二极管的变化。
9.关闭项目。
注意:P34(P3.4)和P35(P3.5)不能接开关,这两个脚悬空,否则下载程序失败,会出现下面的对话框:
学习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显示区。
for(j=0;j<5000;j++);//延时
goto loop;
}
【连机调试】
主要步骤如下:(以项目文件CP1P3.HPJ和文件CP1P3.C为例)
1.将微机的串口和单片机的串口连接(单片机的串口在单片机的仿真主机部件区最右边)。
2.连接实验导线。
3.连接单片机电源线并打开单片机电源。
4.在桌面上找图标 ,启动。如果出现 说明单片机电源未开。
;/*延时子程序*/
;*****************************************************************************
DELAY:MOVR5,#10
DELAY1: MOV R6,#50
DELAY2: MOV R7,#250
DJNZ R7,$
DJNZ R6,DELAY2
#define uint unsigned int
void main ()
{
IE=0x81;//允许外部中断0
IT0=0;//电平方式,低电平有效.当IT0或IT1为1时边沿方式
loop:
P1=0x00;//全亮
goto loop;
}
/*中断服务子程序*/
void iint0() interrupt 0 using 0
6.在“文件菜单”中打开源程序文件CP1.C。
7.在“项目菜单”中编译连接装载。
8.选择“!”执行,观察发光二极管的变化。
9.关闭项目。
【思考题】
1分析CP2.C,比较CP2.C和CP1.C的差别。
②打开p1.DSN,在仿真软件PROTEUS中观察此实验。
实验二P1P3口输入输出实验
(参考QTH-2008XS 系列单片机实验仪说明书1.3节)
【实验内容】
设计电路和程序,利用开关发出中断请求信号,当开关为高电平发光二极管常亮,为低电平时中断处理程序控制发光二极管依此左移变亮。
【实验目的】
掌握外部中断技术的基本使用方法及中断程序的编程方法。
【实验电路】
【实验连线】
P10~P17分别接L1~L8。
K01接P34(P3.4)对应单片机CPU上的INT0。
【实验名称】
P1P3口输入输出实验。
【实验内容】
P3口作为输入口读取开关状态,P1口作为输出口,设计电路和程序,使得发光二极管显示开关状态。
【实验目的】
学习P1、P3口的使用方法。
【实验电路】
【实验连线】
①P10~P17分别接L1~L8。
2P30~P33分别接K01~K03,P36~P37分别接K07~K08。
DELAY:MOVR5,#10
DELAY1: MOV R6,#50
DELAY2: MOV R7,#250
DJNZ R7,$
DJNZ R6,DELAY2
DJNZR5,DELAY1
RET
END
C51语言文件CIINT0.C:
#include <reg51.h>
#define uchar unsigned char
汇编语言文件IINT0.ASM:
ORG0000H
AJMPMAIN
ORG0003H
AJMPIINT0
ORG0030H
MAIN:MOVIE,#10000001B;允许中断
CLRIT0;IT=00低电平触发方式
LOOP:MOVP1,#00H
AJMPLOOP
IINT0:MOVR0,#08H;中断服务程序
MOVA,#0FFH
;/*延时子程序*/
;*****************************************************************************
DELAY:MOVR5,#10
DELAY1:MOV R6,#50
DELAY2:MOV R7,#250
DJNZ R7,$
DJNZ R6,DELAY2
(方案二)
【实验名称】
外部中断实验。
【实验内容】
设计电路和程序,利用两个开关发出中断请求信号,当开关1为高电平发光二极管常亮,为低电平时中断处理程序控制发光二极管依此左移变亮。当开关2为高电平发光二极管常亮,为低电平时中断处理程序控制发光二极管依此右移变亮。
【实验目的】
掌握多个外部中断源技术的基本使用方法及中断程序的编程方法。
5.在“项目菜单”中打开项目文件CIINT0.HPJ。
6.在“文件菜单”中打开源程序文件CIINT0.C。
7.在“项目菜单”中编译连接装载。
8.选择“!”执行,拨动开关,观察发光二极管的变化。
9.关闭项目。
【思考题】
1.打开Iint0.DSN,在仿真软件PROTEUS中观察此实验。
实验三外部中断实验
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根线在仿真主机部件区。
AJMPLOOP
IINT0:MOVR0,#08H;外部中断0
MOVA,#0FFH
CLRC
IINT01:RLCA;左移
MOVP1,A
CALLDELAY
DJNZR0,IINT01
RETI
IINT1:MOVR0,#08H;外部中断1
汇编语言程序P1P3.ASM:
ORG0000H
AJMPMAIN
ORG0030H
MAIN:MOVP1,#00H
MOVP1,P3;把P3口的状态送到P1口
LOOP:CALLDELAY
AJMPMAIN
;*****************************************************************************
{
uchar b,c;
b=a<<(8-n);
c=a>>n;
a=c|b;
return(a);
}
void main()
{
uchar i,temp;
uint j;
P1=0xff;
loop:
temp=0x7f;
for(i=0;i<8;i++)
{
P1=rrc(temp,i);
for(j=0;j<30000;j++);//延时
//interrupt 0 表示使用外部中断0的输入信号,using n表示向量地址8n+3
{
uchar b,c,i,temp;
uint j;
temp=0x7f;
for(i=0;i<8;i++)//右移一位
{
b=temp<<(8-i);
c=temp>>i;
P1=c|b;
for(j=0;j<30000;j++);
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。
}
for(j=0;j<30000;j++);
P1=0x00;
}
【连机调试】
主要步骤如下:(以项目文件CIINT0.HPJ和文件CIINT0.C为例)
1.将微机的串口和单片机的串口连接(单片机的串口在单片机的仿真主机部件区最右边)。
2.连接实验导线。
3.连接单片机电源线并打开单片机电源。
4.在桌面上找图标 ,启动。如果出现 说明单片机电源未开。