实验一 2015接口与单片机 下载本文

实验一: Keil、Proteus工具及C51编程基础

一、实验目的:

1. 2. 3. 4. 5.

学习Keil μVision4集成开发环境的使用; 学习仿真EDA工具Proteus的使用; 学会Keil和Proteus的联调方法; 认识STC15开发板并学会下载方法;

学习基本单片机C51编程初步知识、软件延时程序的编写和两种点亮LED的方法。

二、实验内容与要求:

用Keil μVision2集成开发环境和Proteus工具联调, 用C51编程,实现在一个单片机最小系统上用P1.7、P1.6、P4.7、P4.6引脚控制4个LED循环点亮。

三、实验步骤:

1. 了解Keil μVision4集成开发环境及其各功能,熟悉Keil设置、编辑、编译、连接、调试

C51程序的步骤与方法,完成附件参考程序的C51程序部分在Keil环境下的编辑、编译连接和调试;

2. 了解和熟悉EDA工具Proteus的使用及仿真验证电路与程序正确性的方法。参考课本

P47图3.19,在Proteus中画出MCS-51单片机最小系统及P1.7、P1.6、P4.7、P4.6引脚接4个LED灯的连线图把Keil下调试控制P1.7、P1.6、P4.7、P4.6引脚LED灯亮灭程序生成的Hex文件装载到Proteus的设计图中进行仿真联调;

3. 把控制LED灯亮灭程序生成的Hex文件下载到STC15开发板上观察结果;

4. 参照参考程序,独自编程完成本次实验内容,并用此程序重复以上三步调试步骤。

四、实验报告要求:

1. 实验报告包含实验题目、实验目的、实验内容与要求、实验步骤与路线、实验程序、注

释及流程图、实验结论与结果、思考题解答、实验心得体会和教学建议等几部分; 2. 实验步骤可以截图,但一定要以文字说明为主,截图为辅;譬如此次实验有关Keil和

Proteus的操作及其二者联调的步骤,一定要步骤清晰,配合截图说明。 3. 程序清单中每句话一定要有注释。

五、其他注意事项:

1. 有关工具请上Blackboard上下载。

2.注意:除第一次实验外,本次实验前提交上次的实验报告!过期不候。

六、 思考题:

1. 能否将延时函数调用改为delay(300)?参数类型定义与实际延时时间有关吗?

2. 逐句对照C51和汇编语言,对两种语言在头文件、赋值语句、循环语句、函数声明、调用子程序方法各方面的不同做出归纳总结。

七、附加参考程序 <控制LED灯亮灭程序>

以下是控制P1.7、P1.6、P4.7、P4.6引脚上LED灯亮灭的C51和汇编语言程序代码。

/*C51语言

注意1: 型号 : IAP15W4K58S4芯片上电后所有与PWM相关的IO口均为高阻态 需将这些口设置为准双向口或强推挽模式方可正常使用 相关IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2 P2.3/P2.7/P3.7/P4.2/P4.4/P4.5 另外还有P1.0/P1.4两个口在上电时为强推挽输出,程序 初始化时也需将这两个口设置为弱上拉准双向口模式。

注意2:头文件reg51.h中没有定义P4口,需用STC15F系列单片机头文件STC15Fxx.H。 */

#include \头文件 #include\//变量定义 sbit led1=P1^7; sbit led2=P1^6; sbit led3=P4^7; sbit led4=P4^6; //子函数定义

void delay(unsigned char m) //延时函数 {

unsigned char i; int j;

for (i=0; i

//主函数 void main() { //端口初始化 P1M1 = 0; P1M0 = 0; //设置P1口为准双向口 P4M1 = 0; P4M0 = 0; //设置P4口为准双向口 //变量初始化

led1=0;//低电平让LED亮 led2=0; led3=0; led4=0; //编写程序 delay(200); led1=1; delay(200); led2=1;

delay(200); led3=1; delay(200); led4=1; delay(200);

while (1) {

led1=0; led2=0; led3=0; led4=0; delay(50); led1=1; led2=1; led3=1; led4=1; delay(250); } }

; 汇编语言 ;定义端口 P4 DATA 0C0H P1M1 DATA 0x91 P1M0 DATA 0x92 P4M1 DATA 0xB3 P4M0 DATA 0xB4

;程序

ORG 0000H LJMP MAIN ORG 0100H MAIN: ;端口初始化 CLR A MOV P1M1, A MOV P1M0, A MOV P4M1, A MOV P4M0, A ;变量初始化

; P1M1.n,P1M0.n =00--->准双向口, 01--->推挽模式

; =10--->输入模式, 11--->开漏模式 ; P4M1.n,P4M0.n =00--->准双向口, 01--->推挽模式 ; =10--->输入模式, 11--->开漏模式

;设置P1为准双向口 ;设置P4为准双向口

CLR P1^7 ;给P1^7清零,低电平时led亮 CLR P1^6 CLR P4^7 CLR P4^6 ;编写程序 CALL DELAY ;调用延时子程序

SETB P1^7 ;给P1^7置一,高电平时led灭 CALL DELAY SETB P1^6 CALL DELAY SETB P4^7 CALL DELAY SETB P4^6 CALL DELAY

LOOP:

CLR P1^7 CLR P1^6 CLR P4^7 CLR P4^6

CALL DELAY SETB P1^7 SETB P1^6 SETB P4^7 SETB P4^6 CALL DELAY SJMP LOOP

DELAY:

MOV R0, #20 MOV R1, #0 MOV R2, #0 DELAY1:

DJNZ R2, DELAY1 ;循环256次 DJNZ R1, DELAY1 ;循环256次 DJNZ R0, DELAY1 ;循环20次 RET

;----------------- END