实验项目目录 实验1:μVision集成开发环境的操作使用和汇编程序设计实验. 1 实验2:汇编语言设计实验 2 实验3:C51程序设计实验. 3 实验4:键盘与显示编程实验. 4 实验5:单片机外部中断实验. 5 实验6:中断及定时系统综合应用之电子钟实验. 7 实验8:串行通信实验. 8 实验9:A/D转换实验. 9 实验10:D/A转换实验. 10 实验11:简易数字信号发生器设计. 11 实验12:简易数字电压表的设计. 12
实验1:μVision集成开发环境的操作使用和汇编程序设计实验
一、实验目的与要求1.掌握汇编语言指令格式,熟练常用汇编指令的含义及使用方法; 2.熟悉基本程序的结构,熟悉编写汇编程序的基本方法; 3.掌握使用uVision3创建应用项目方法和步骤和使用uVision3调试应用程序的基本方法。 二、实验内容与任务 在uVision3环境下,采用汇编语言,分别编程实现: 1. 求取存储在50H~5FH区间的16个无符号二进制数的最大值和最小值,并将最大值存入60H内,最小值存入61H内。 2. 求片内连续50H~5FH 这16个单元的8位无符号数的平均值,并将结果存入60H中。 3 求多字节无符号数的加法。40H,41H和42H中分别存入被加数的低8位,中8位和高8位,50H,51H和52H中分别存入加数的低8位,中8位和高8位,要求,将两者相加,结果按低到高位存入40H至43H中,并将结果的字节数存入R3中。 三、实验仪器与设备 计算机,uVision3软件 四、实验设计方案与程序
1. ORG 0000H AJMP MAIN ORG 0030H MAIN: MOV A,#0FFH CLR C MOV R2,#08H
LOOP1: RLC A MOV P0,A ACALL DEL DJNZ R2,LOOP1 MOV R2,#08H
LOOP2: RRC A MOV P0,A ACALL DEL DJNZ R2,LOOP2 JMP MAIN
DEL: MOV R5,#05H DEL1: MOV R6,#0F0H DEL2: MOV R7,#0F0H DEL3: DJNZ R7, DEL3 DJNZ R6, DEL2 DJNZ R5, DEL1 RET END
2 ORG 0000H LJMP MAIN ORG 1000H MAIN:MOV R0,#50H MOV R1,#51H MOV R3,#15 MOV R4,#10H CLR C LOOP:MOV A,@R0 ADDC A,@R1 MOV @R0,A INC R1 DJNZ R3,LOOP MOV A,@R0 DIV A10H MOV 60H,A SJMP $ END
3. ORG 0000H LJMP MAIN ORG 1000H MAIN:MOV R0,#40H MOV R1,#50H MOV R2,#3 CLR C LOOP:MOV A,@R0 ADDC A,@R1 MOV @R0,A INC R0 INC R1 DJNZ R2,LOOP SJMP $ END
五、实验结果与分析 1.结果;存储在50H~5FH区间的16个无符号二进制数的最大值存入60H内,最小值存入61H内。 2结果;程序执行后,16个数的平均值放入60H, 3.结果:两个加数的高、中、低三位分别在40H、41H、42H和50H、51H、52H中,和分别放在40H、41H、42H中。 六、回答问题及体会遇到的问题:对汇编语言的不熟悉及程序设计的问题 解决:多看书,多实验 体会:基础最重要,要重视基础
实验2:汇编语言设计实验 2一、实验目的与要求1.掌握汇编语言程序结构及其使用方法; 2.学会用汇编语言编写应用程序; 3.熟悉LED的工作特性及控制方法。 4.熟悉单片机实验板的工作原理。 二、实验内容与任务 实验参考电路图如下图所示(实际电路图以自己手中的单片机实验板为准),要求采用汇编语言编写程序,控制数码管跑马显示0-9。 file:///C:/Users/22284/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
三、实验仪器与设备 计算机,单片机实验板 四、实验设计方案与程序 ORG 0000H AJMP MAIN ORG 0030H MAIN: MOV A,#0FFH CLR C MOV R2,#08H
LOOP1: RLC A MOV P0,A ACALL DEL DJNZ R2,LOOP1 MOV R2,#08H
LOOP2: RRC A MOV P0,A ACALL DEL DJNZ R2,LOOP2 JMP MAIN
DEL: MOV R5,#05H DEL1: MOV R6,#0F0H DEL2: MOV R7,#0F0H DEL3: DJNZ R7, DEL3 DJNZ R6, DEL2 DJNZ R5, DEL1 RET END 五、实验结果与分析 小灯显示0到9,如下图所示 file:///C:/Users/22284/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg
六、回答问题及体会 遇到的问题:对汇编语言的不熟悉及程序设计的问题 解决:多看书,多实 验 体会:基础最重要,要重视基础
实验3:C51程序设计实验 一、实验目的与要求1.掌握C51程序结构及其使用方法; 2.学会用C51编写应用程序; 3.掌握LED的工作特性及控制方法。 4.掌握单片机实验板的工作原理。 二、实验内容与任务 实验参考电路图如下图所示(实际电路图以自己手中的单片机实验板为准),要求使用C51编写程序,使小灯从左到右移动 file:///C:/Users/22284/AppData/Local/Temp/msohtmlclip1/01/clip_image005.jpg
三、实验仪器与设备 计算机,单片机实验板 四、实验设计方案与程序 #include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int //加黑的都是定义头文件
void DelayMS(uint x) //延时
{
uchar i;
while(x--)
{
for(i=0;i<120;i++);
}
}
void main() //主程序
{
uchar i;
P2=0x01;
while(1)
{
for(i=0;i<7;i++)
{
P2=_crol_(P2,1); //左循环移动
DelayMS(150);
}
for(i=0;i<7;i++)
{
P2=_cror_(P2,1); //右循环移动
DelayMS(150);
}
}
} 五、实验结果与分析
file:///C:/Users/22284/AppData/Local/Temp/msohtmlclip1/01/clip_image007.jpg六、回答问题及体会
问题:C语言知识的缺乏以及编程遇到的困难
解决方案:多练习,多编程,有自己的编程风格
体会;编程是个很有意思的东西,一串串代码就能让灯按顺序亮起来,很有意思
实验4:键盘与显示编程实验一、实验目的与要求 1. 进一步掌握单片机通用IO接口的编程方法。 2.掌握单片机矩阵键盘电路的设计方法。 3.掌握单片机读取矩阵键盘状态的编程方法。 4.掌握数码管动静态扫描控制方法。 二、实验内容与任务 1、实验电路图如图所示,按键信号由P2口进行识别,上电后左一数码管显示“P”,按下某按键后,在左一数码管显示对应键值。 file:///C:/Users/22284/AppData/Local/Temp/msohtmlclip1/01/clip_image009.jpg
三、实验仪器与设备 计算机,单片机实验板 四、实验设计方案与程序 #include"reg52.h" typedef unsigned int u16; typedef unsigned char u8; #define GPIO_DIG P0 #define GPIO_KEY P1 sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; u8 KeyValue; u8 code smgduan[17]={0xf3,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(u16 i) { while(i--); } void KeyDown(void) { char a=0; GPIO_KEY=0x0f; if(GPIO_KEY!=0x0f) { delay(1000); if(GPIO_KEY!=0x0f) { GPIO_KEY=0X0F; switch(GPIO_KEY) { case(0X07): KeyValue=1;break; case(0X0b): KeyValue=2;break; case(0X0d):KeyValue=3;break; case(0X0e): KeyValue=4;break; } GPIO_KEY=0XF0; switch(GPIO_KEY) { case(0X70): KeyValue=KeyValue;break; case(0Xb0): KeyValue=KeyValue+4;break; case(0Xd0):KeyValue=KeyValue+8;break; case(0Xe0): KeyValue=KeyValue+12;break; } while((a<50)&&(GPIO_KEY!=0xf0)) //检测按键松手检测 { delay(1000); a++; }
} } } void main() { LSA=1; LSB=1; LSC=1; while(1) { KeyDown(); GPIO_DIG=smgduan[KeyValue]; } } 五、实验结果与分析
上电后左一数码管显示“P”,按下某按键后,在左一数码管显示对应键值。
如图 |