单片机实验Kiel 软件的使用和C程序调试

单片机实验Kiel 软件的使用和C程序调试
单片机实验Kiel 软件的使用和C程序调试

实验一:Kiel 软件的使用和C程序调试

一、实验目的:

1、通过实验学会用C语言进行程序的设计。

2、学会应用keil-uvision集成调试软件对C语言程序进行调试。掌握C语言程序的编辑、编译、运行、单步调试的过程和通过寄存器、存储器、串行口检查程序运行结果是否正确的方法。

二、kerl-uvision集成调试软件的操作

操作步骤:1、双击桌面上的UV2快捷图,启动软件。

2、点击P工程N新建工程输入文件名(如A1)并点击保存。

3、出现CPU屏幕,选Atmel AT89C51 点确定。屏幕左上方出现图标目标1。

4、点击文件新建文件出现程序输入区。

5、输入C语言程序:

#include

void main(void)

{ int x,y,sum,sub,mul,div;

x=5;

y=8;

sum=x+y;

sub=x-y;

mul=x*y;

div=y/x;

while(1);

}

输入后点击文件中的保存,输入程序名(例如S1.C)并选择存入的盘(如D:)点击保存。

程序名一般不超过6个字母数字,以字母打头,C语言要加尾缀:.C。

如果程序已经存在,可点击文件打开文件,找到需要选择的文件。

6、点击(图标)目标1前的“+”号,出现(图标)源程序组1,选中并点右键,选“文件增加到源程序组1”,选择文件类型为C,再选要输入的程序S1.C,点ADD(加入),点确定。此时点击源程序组1可以看到要输入的程序S1.C 。

在对程序编译前要进行以下的设置:

1、单击“project”(工程)菜单,在下拉菜单中单击“options for target 1”(目标’ 目标1’属性),再单击“target”(目标),将输入仿真器的晶振频率改为12.0MHz。

2、在目标’ 目标1’属性页面下选择output(输出) ,点击“Create HEX file”(产生hex文件)的选项,以便汇编后生成HEX代码,供编程器使用。

3、对于软件仿真,在目标’ 目标1’属性页面下点“Debug”(调试),

再选“S 使用软件仿真器”,同时选中“加载代码到仿真器”和“运行到main0”,然后点击“确定”。

7、程序的编译和链接

依次点击屏幕上方左下角的编译和建造目标图标

对文件进行编译和链接,观察左下角的调试程序信息显示,如有错可根据该栏提示的信息进行修改,修改后要重新保存和编译,直到无错误提示。

8、点击调试图标,进入程序调试画面,此时黄箭头所指

是将要执行的指令。可点击全速运行程序或点击(或按F10)进行单步运行,观察运算结果:

(1)调试界面分为4部分:

① 左上角为REG和系统显示区;② 左下角为调试程

序时的信息显示;③ 右上角为程序编写和修改区;

④ 右下角存储器的显示区。

(2)存储区设置: 如果未出现存储区,设置方式如下:点击:V视图M存储器窗口,右下角会出现4个存储区:存储器#1-#4。可以根据需要设置。

程序存储器设置:点击存储器1#,在上面地址栏中输入C:0000H,存储器1#被设计为程序存储器,地址从0000H开始。

内部/外部数据存储器设置:点击存储器2#/3#,在上面地址栏中输

入D/X:0000H,此时存储器2#/3#被设计为内部/外部数据存储器,地址从0000H开始。

对C语言程序,调试时需打开以下窗口:

(1)变量的查询:

打开V视图:W监视&调用堆栈窗,在局部栏中或监视#1、2中观察结果。

(2)用scanf输入,或用printf输出时:

打开V视图:串行口1#观察结果。

当单步运行时,在scanf语句运行后,在串行口1#中光标位置按输入格式要求输入数据后回车。

(3)修改或停止运行程序时再次点击,退出运行状态,可以进行程序的修改。

8、运行程序点击(左图标)或停止程序运行(右图标);如果希望单步执行(即一条一条的执行指令,以便调

试程序)可点击图标,每点击一次黄箭头会向下移动,指向下一条指令。

9、观察程序的运行结果

在单步调试时,每执行一条指令,都可在屏幕左上方的寄存器区和右下方的存储区观察运行的状态。程序存储器中表示的是程序汇编后的二进制代码,内外数据存储器中表示的运行中数据结果的变化。观

察时可在相应存储区的地址栏打入地址即可,如想看内存20H中的内容,只需在相应存储区的地址栏打入D:0020H。

三、实验内容

熟悉Kiel C软件界面,编辑、编译、运行程序。

1、输入下面程序,调试并观察运算结果。

#include

#include

void main(void)

{ int x,y;

SCON=0x52;

TMOD=0x20;

TH1=0xF3;

TR1=1;

printf("input x,y:\n");

scanf("%d%d",&x,&y);

z=x+y;

printf("%d",z);

while(1);

}

2、输入下面程序(有错误),调试并观察运算结果。#include

#include

void main (void)

{ int i;s=0;

i=1;

SCON=0x52;TMOD=0x20; TH1=0xf3;TR1=1

do

{ s=s+i ;

i++ } while (i<100) printf(“%d\n”,s);

}

正确的程序为:

#include

#include

void main (void)

{ int i,s=0;

i=1;

SCON=0x52;TMOD=0x20; TH1=0xf3;TR1=1;

do

{ s=s+i ;

i++ ;

}while (i<100); printf("%d\n",s); }

2、程序

编写C程序,用scanf语句输入2个整数a和b,求2个数的和、差、乘积和商,并用printf语句进行输出。要求:程序必须编译通

过并运行正确。

四、心得体会

作为第一次实验,主要是学会如何使用Kiel 软件和C程序调试,如何建立工程。包括kiel和运行程序,特别该注意的是后缀.C。相信慢慢地我能掌握好单片机。

最新单片机原理实验教案参考程序

单片机原理实验教案 参考程序

广东松山职业技术学院《MCS-51单片机原理》实验指导书 宁玉珊黄晓林 使用Proteus辅助设计与仿真

实训项目1 Proteus辅助设计与仿真的使用 一、实训目的 学习并熟练掌握PROTEUS辅助设计与仿真软件的使用。通过使用Proteus的ISIS组件绘制AT89C51功能接口原理图,并对原理图编写程序和调试程序,观察在仿真条件下的实现功能的效果。 二、实训内容 在PROTEUS仿真环境下实现一个发光二极管(LED)闪烁。要求LED亮0.5s灭1s,并绘制原理图和编写实现程序,同时用虚拟的示波器观察硬件和软件实现的效果。 三、实训器材 安装有Proteus7软件的计算机 1 台。 四、实训步骤 1)在硬盘建立文件夹用来保存新建项目的所有文件。如在D盘建立PROJECT文件夹。 2)选择‘开始→程序→Proteus7 professional→ISIS professional(或者双击桌面图标ISIS)’,进入Proteus仿真环境,如图P1_1和P1_2所示。 图P1-1

图P1-2 3)选择菜单【File/New Design】创建一个新的设计项目,如图P1_3所示。 图P1-3 4)此时系统会弹出模板选择窗口,选择‘DEFAULT’点击【OK】即可,如图P1_4所示。

图P1_4 5)点击界面左侧工具栏中的图标,接着点击元件池上方的按钮,将要用到的元器件从系统库调到当前设计文件库中。在弹出的Pick Devices对话框左上角的‘Keywords’文本框中键盘输入元件名(或元件的其它关键词)搜索到需要的元器件。双击‘Results’栏下的目标元件,该元件即调出到当前设计文件库的元件列表中,如图P1_5所示。本实训中所要用到的元件如表PS1_1所示。 图P1_5 元件名称搜索关键词元件序 数值备注 号 电阻器Resistor R1 10k 电阻器Resistor R2 1k 电解电容器MINELECT1U63V C1 4.7μ 陶瓷电容器CERAMIC22P C2、C3 22p 晶振CRYSTAL X1 12MHz 单片机AT89C51 U1

重庆大学 单片机实验

实验一系统认识及基本程序设计实验 四、实验内容 1. 将BCD 码整数0~255 存入片内RAM 的20H、21H、22H 中,然后转换为二进制整数00H~FFH,保存到寄存器R4 中。修改20H、21H、22H 单元的内容,如:00H,05H,08H;观察实验结果。 参考程序: ;============================================================== ; 文件名称: Asm2-1.asm ; 功能描述: BCD整数转换为二进制整数(8位, 范围从00H--FFH) ;============================================================== ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV R0, #20H ;BCD存放高位地址 MOV R7, #03H ;BCD码0--255, 最多3位 CLR A MOV R4, A LP1: MOV A, R4 MOV B, #0AH MUL AB ;乘10 ADD A, @R0 ;加下一位的值 INC R0 ;指向下一单元 MOV R4, A ;结果存入R4 DJNZ R7, LP1 ;转换未结束则继续 SJMP MAIN ;设置断点, 观察实验结果R4中的内容 END 2. 将16 位二进制整数存入R3R4 寄存器中,转换为十进制整数,以组合BCD 形式存储在RAM 的20H、21H、22H 单元中。 参考程序: ;============================================================= ; 文件名称: Asm2-2.asm ; 功能描述: 二进制整数(16位)转换为十进制整数(组合BCD) ;============================================================= ; 0--FFFFH(R3R4)==>0--65535 ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV R0, #22H ;转换结果低位地址 MOV A, R0 PUSH ACC ;ACC表示累加器A的直接地址 MOV R7, #03H

51单片机实验程序

333。(x为0x2~+x39的整数)用查表方式编写y=x1 + #include void main() { 将对应的每位数字的三次方的值0~9code int a[10]={0,1,8,27,64,125,216,343,512,729};// 存入中,为程序存储器,当所存的值在或之间的话就用,charcode0~255code-128~+127而现在的值明显超过这个范围,用较合适。的范围是或。0~65535int-32768~32767int此处定义根据习惯,也可写成但是变量一定要用来int char x1,x2,x3 int y,x1,x2,x3;//y定义。 x1=2; x2=4; 三个的值是自定的,只要是当中的数值皆可,也可重复。//x1,x2,x30~9 x3=9; y=a[x1]+a[x2]+a[x3]; 单片机的程序不能停,这步就相当于无限循环的指令,循环的内容为空白。// while(1);} 结果的查询在软件内部,在仿真界面点击右下角(一般初始位置是右下角)的Keilvision//的框架内双击“”文字输入后按回车,右侧会显示其进16watchdouble-click or F2 to addy制数值如,鼠标右键该十六进制,选择第一行的可查看对应的进制数。0x3410decimal, 1、有10个8位二进制数据,要求对这些数据进行奇偶校验,凡是满足偶校验的数据(1的个数为偶数)都要存到内RAM50H开始的数据区中。试编写有关程序。 #include void main() { 将所要处理的值存入中,这些可以根据RAM int a[10]={0,1,5,20,24,54,64,88,101,105};// 个人随意设定,但建议不要超过的范围。0~255定义一个变量//char i; 定义一个指针指向内部这个地址。*q char *q=0x50; //0x50 循环,共十次,也可以用for(i=0;i<10;i++) for(i=9;i>=0;i--)//9~0 { 将的值赋给累加器ACC a[i]ACC=a[i];// 位上的奇偶校验位,如果累加器内数值的个数为偶数那么1//PSW0ACC if (P==0)为,若为奇数,为。这里的是大写的。0PPP1{ *q=a[i]; 每赋一个值,指针挪一个位置指向下一个。q++;// } } 同实验一,程序不能停。// while(1);} 3.有10个8位带符号二进制数,请将10个数按从小到大的顺序排列,并存到内RAM50H开始的单元中。 #include void main() { 将所有值存入中,因为有负RAM;// char data a[10]={-50,-36,0,-128,1,99,127,89,-89,40}

单片机U盘读写参考程序

/*******************************************************/ #include"reg52.h" #include"stdio.h" #include "string.h" #include "intrins.h" #include"CH375INC.H" /*******************************************************/ #define uchar unsigned char #define uint unsigned int /*******************************************************/ sbit CH375_INT=P3^3; sbit CH375_A0=P3^4; sbit CH375_RD=P3^5; sbit CH375_WR=P3^6; sbit CH375_CS=P3^7; /*******************************************************/ uchar xdata my_buf[512]; /*******************************************************/ void uart_init() { TMOD=0X20; TH1=TL1=0XFD; TR1=1; REN=1; SM0=0;SM1=1; EA=1; ES=1; } /*******************************************************/ void uart_send_pc(uchar *s) //串口监视//void uart_send_pc(uchar a[20]) { //{ uchar len=strlen(s); // uchar i; uchar i; // for(i=0;i<20;i++) for(i=0;i

北京交通大学单片机实验程序报告

单片机实验程序

实验二8155并行I/O口扩展和动态扫描程序编制 1.实验目的 (1)掌握8155并行I/O芯片扩展和使用方法 (2)掌握数码管动态扫描汇编语言的编制方法 2.预习要点 (1)8155芯片基础知识 (2)51单片机的总线时序、地址译码的原理 (3)数码管动态扫描显示方法 3.实验设备 计算机、单片机实验箱。 4.实验内容 基本要求: 通过实验板的上的8155(U16)显示电路(在电路板上已经固定连接字形和字位控制线的8155部分),并通过跳线确定8155的地址,在8个LED数码管上依次动态显示数字1~8。 扩展要求: 假定30H~33H的存储单元内容为4个字节16进制数,请依序将他们显示在8个LED数码管上 根据程序要求做如下程序流程图: 主程序流程图:

显示子程序流程框图: 基本要求编程如下: ORG 0000H

AJMP MAIN ORG 0050H MAIN: MOV SP,#60H ;压栈 MOV DPTR, #4100H MOV A,#0FH ;方式控制字0FH送A MOVX @DPTR, A ;8155初始化 MOV 70H,#01H ;设置显示缓冲区 MOV 71H,#02H MOV 72H,#03H MOV 73H,#04H MOV 74H,#05H MOV 75H,#06H MOV 76H,#07H MOV 77H,#08H LOOP: ACALL DISPLAY ;循环调用显示子程序AJMP LOOP DISPLAY: MOV R0,#70H ;显示缓冲区首地址送R0 MOV R3,#0FEH ;字位控制初值送R3

51单片机实验程序

3 3 3 用查表方式编写y=x1 +x2 +x3 。(x 为0~9 的整数) #include void main() { int code a[10]={0,1,8,27,64,125,216,343,512,729}; //将0~9 对应的每位数字的三次方的值存入code中,code为程序存储器,当所存的值在0~255 或-128~+127 之间的话就用char ,而现在的值明显超过这个范围,用int 较合适。int 的范围是0~65535 或-32768~32767 。 int y,x1,x2,x3; //此处定义根据习惯,也可写成char x1,x2,x3 但是变量y 一定要用int 来定义。 x1=2; x2=4; x3=9; //x1,x2,x3 三个的值是自定的,只要是0~9 当中的数值皆可,也可重复。 y=a[x1]+a[x2]+a[x3]; while(1); //单片机的程序不能停,这步就相当于无限循环的指令,循环的内容为空白。 } //结果的查询在Keilvision 软件内部,在仿真界面点击右下角(一般初始位置是右下角)的watch 的框架内双击“double-click or F2 to add”文字输入y 后按回车,右侧会显示其16 进制数值如0x34,鼠标右键该十六进制,选择第一行的decimal,可查看对应的10 进制数。 1、有10 个8 位二进制数据,要求对这些数据进行奇偶校验,凡是满足偶校验的 数据(1 的个数为偶数)都要存到内RAM50H 开始的数据区中。试编写有关程序。 #include void main() { int a[10]={0,1,5,20,24,54,64,88,101,105}; // 将所要处理的值存入RAM 中,这些可以根据个人随意设定,但建议不要超过0~255 的范围。 char i; // 定义一个变量 char *q=0x50; // 定义一个指针*q 指向内部0x50 这个地址。 for(i=9;i>=0;i--) //9~0 循环,共十次,也可以用for(i=0;i<10;i++) { ACC=a[i]; //将a[i] 的值赋给累加器ACC if (P==0) //PSW0 位上的奇偶校验位,如果累加器ACC 内数值1 的个数为偶数那么P 为0,若为奇数,P 为1。这里的P 是大写的。 { *q=a[i]; q++; // 每赋一个值,指针挪一个位置指向下一个。 } } while(1); //同实验一,程序不能停。 }

单片机实验答案

前言 由于单片机具有高可靠性、超小型、低价格、容易产品化等特点,在仪器仪表智能化、实时工业控制、实时数据采集、智能终端、通信设备、导航系统、家用电器等控制应用领域,具有十分广泛的用途。目前在国内单片机应用中,MCS-51系列单片机仍然是一种主流单片机。为配合《单片机应用技术》课程的教学,使学生尽快了解、掌握89C51单片机的使用,特编写了这本上机指导书(基础篇)。 《单片机》是一门实践性很强的课程,提高教学质量的一个重要环节是上机实习和训练,无论是学习汇编语言程序设计,还是学习接口电路和外设与计算机的连接,或者软硬兼施地研制单片机应用系统,不通过加强动手是不能获得预期效果的。本实验指导书提供了9个实验的指导性材料,实验还有一些思考题,可以根据课时的安排和教学要求进行取舍。为了达到某些实验的目的,书中提供的参考程序与实际应用中的程序会有些差别,所以不一定是最优的。 由于时间紧迫,加上编者学识有限,如有不妥之处,欢迎读者批评指正。 编者

实验须知 1. 实验前必须阅读教科书的有关部分和本实验指导书,了解实验目的、内容、步骤,做好实验前的准备工作,编写好实验中要求自编或修改的程序;完成实验前要求完成的准备工作后方可以上机实验,否则不得上机操作。 2. 各种电源的电压和极性不能接错,严禁带电接线和接插元器件。通电前须经过指导教师检查认可后方能通电。 3. 不准随意拨弄各种与实验无关的旋钮和开关,凡与本次实验无关的任何设备都禁止动用和摸弄,注意安全。 4. 严禁用手触摸实验系统印制电路板和元器件的引脚,防止静电击穿芯片。 5. 实验中若损坏仪器或元器件,应及时向指导教师报告,听候处理。 6. 在实验室内保持安静和卫生,不得随意走动和喧哗,集中精力完成实验。 7. 实验完成后,关掉电源,及时整理实验台桌面,保持环境整洁。 8. 按规定认真完成实验报告,对实验中出现的现象进行分析,在规定的时间内交上实验报告。 9. 凡实验或实验报告未能按规定完成的学生,不能参加本课程的考试或考查。

单片机实验参考程序

实验一键盘输入实验 参考程序: ;4*4矩阵键盘读取程序,利用P0口,列线左起P0.0-P0.3 ;行线上起P0.4-P0.7,行线默认接高电平, ;P3.7作为键盘被读取的提示灯 ; 0 1 2 3 ; 4 5 6 7 ; 8 9 A B ; C D E F ;不考虑有两个或以上按键同时按下的情况, ;每次扫描到一个有按下则结束本次扫描 SETB P3.7 ;确认关闭键盘响应指示灯 MAIN: MOV R0,#0EFH ;用于给键盘行列线确定的电平 MOV R1,#0H ;循环次数,R1=0对应第一行,=1为第二行,以此类推SMAIN: MOV P0,R0 ;改变行线的状态,列线全处于高电平 NOP NOP MOV A,P0 JB ACC.0,L1 ;判断某行的第一列是否按下,按下则P0.0为低电平 MOV R2,#0H ; 将某行的列码保存至R2,显示程序会根据此值和R1的值计算具体为何按键按下 ACALL DISP SJMP MAIN ; 每次扫描到一个有按下则结束本次所有扫描

L1: JB ACC.1,L2 ;判断某行的第二列是否按下,按下则P0.1为低电平MOV R2,#01H ACALL DISP SJMP MAIN L2: JB ACC.2,L3 ;判断某行的第三列是否按下,按下则P0.2为低电平MOV R2,#02H ACALL DISP SJMP MAIN L3: JB ACC.3,SKIP ;判断某行的第四列是否按下,按下则P0.3为低电平MOV R2,#03H ACALL DISP SJMP MAIN ; SKIP: INC R1 ;R1加1,共计4行, MOV A,R0 RL A ;左移R0内的值,以并扫描下一行 MOV R0,A CJNE R1,#04H,SMAIN ;若四行扫描完毕,则跳转至程序最初,相关参数为初始值NO: MOV P2,#0FFH ;程序能执行到此说明四行扫描完毕并且一个按键都没按下,关闭数码管和指示灯 SETB P3.7 SJMP MAIN DISP: CLR P3.7 ;点亮键盘响应指示灯 MOV A,R1 RL A RL A ;R1对应行,具体的按键计算为R1*2+R2 ADD A,R2 ADD A,#3H ;下列指令与表格见有3字节的距离 MOVC A,@A+PC MOV P2,A ;十六进制的高位用数码管L1显示 RET ;共阳数码管0-F的显示码 DIS: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH DELAY: m ov r7,#255;延时 del1: mov r6,#255; del2: djnz r6,del2 djnz r7,del1 ret END

单片机实验程序

一 #include #include #define uchar unsigned char sbit H1=P3^6; sbit H2=P3^7; sbit L1=P0^5; sbit L2=P0^6; sbit L3=P0^7; tab1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff}; tab2[]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3b,0x37,0x2f,0x1f}; tab3[]={0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; tab4[]={0x1f,0x2f,0x37,0x3b,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f}; void Delay1s() //@11.0592MHz { unsigned char i,j,k; for(i=10;i>0;i--) for(j=200;j>0;j--) for(k=250;k>0;k--) } void delay20ms() { unsigned char i,j; for(i=100;i>0;i--) for(j=60;j>0;j--); } void flick() { uchar d; while(d<=2) { P2=0x00; P3=0xc3; Delay1s(); P2=0xff; P3=0xff; Delay1s(); d++; } } void main() { uchar b,y,n; flick();

单片机原理实验指导书(2012.10)

《单片机原理》实验指导书 计算机科学与技术系2012年8月

目录 第一部分单片机仿真实验 (1) 实验一:流水灯实验 (1) 实验二:中断实验 (4) 实验三:定时器中断实验 (6) 实验四:串行口实验 (9) 实验五:矩阵式键盘输入识别 (13) 实验六:LCD循环显示设计 (19) 第二部分单片机硬件实验............................错误!未定义书签。第一章试验箱系统概述 ...................................错误!未定义书签。 一、系统地址分配........................................... 错误!未定义书签。 二、系统接口定义........................................... 错误!未定义书签。 三、通用电路简介........................................... 错误!未定义书签。第二章实验指导...............................................错误!未定义书签。实验七P1口亮灯和P1口加法器实验........... 错误!未定义书签。实验八简单I/O口扩展(选作).................. 错误!未定义书签。实验九8255控制交通灯................................ 错误!未定义书签。实验十128*64LCD液晶显示 .......................... 错误!未定义书签。

第一部分单片机仿真实验 实验一:流水灯实验 一、实验目的: 通过对P3口地址的操作控制8位LED流水点亮,从而认识单片机的存储器。 二、实验原理图 实验参考电路图如下: 三、参考实验程序 //流水灯实验 #include //包含单片机寄存器的头文件 sfr x=0xb0; //P3口在存储器中的地址是b0H,通过sfr可定义8051内核单片机 //的所有内部8位特殊功能寄存器,对地址x的操作也就是对P1口的

单片机试验源程序文件

单片机实验指导书(实验源程序)

实验二、三 I/O接口实验 1、输出实验 例1: ORG 0000H AJMP START ;跳转到初始化程序 ORG 0033H ;----- 主程序开始 ----- START: MOV P1,#0FFH ;是所有LED熄灭 ACALL DELAY ;调用延时子程序 CLR P1.0 ;P1.0输出低电平,使LED3点亮 ACALL DELAY ;调用延时子程序 SETB P1.0 ;P1.0输出高电平,使LED3熄灭 CLR P1.1 ;P1.1输出低电平,使LED4点亮 ACALL DELAY ;调用延时子程序 SETB P1.1 ;P1.1输出高电平,使LED4熄灭 CLR P1.2 ;P1.2输出低电平,使LED5点亮 ACALL DELAY ;调用延时子程序 SETB P1.2 ;P1.2输出高电平,使LED5熄灭 CLR P1.3 ;P1.3输出低电平,使LED6点亮 ACALL DELAY ;调用延时子程序 MOV P1, #0F0H ;LED3~LED6全部发光 ACALL DELAY ;调用延时子程序 AJMP START ;返回到标号START处再循环 ;----- 延时子程序 ----- DELAY: MOV R5,#10 LOOP: MOV R6,#200 LOOP1: MOV R7,#250 LOOP2: DJNZ R7,LOOP2 DJNZ R6,LOOP1 DJNZ R5,LOOP RET 例2: ORG 0000H AJMP START ;跳转到初始化程序 ORG 0033H ;----- 主程序开始 ----- START: MOV P1,#0FFH ;是所有LED熄灭 ACALL DELAY ;调用延时子程序 MOV ACC,#0FEH ;ACC中先装入LED3亮的数据(二进制的11111110) MOV P1,ACC ;将ACC的数据送P1口 ACALL DELAY ;调用延时子程序 MOV R0,#03H ;上句送到P1口的数据就点亮了LED1,所以将数据再移

《单片机系统设计技术》实验指导

《单片机系统设计技术》 实验指导书 适用专业: 电气、自动化、信息等 编写单位: 电气信息学院 编写人: 曹 林 审核人: 审批人: 批准时间:年月日

目 录 实验1 IO控制LED流水灯实验 (3) 实验2 IO控制数码管动态扫描实验 (5) 实验3 外部中断实验 (8) 实验4 定时器应用控制实验 (10) 实验5 UART实验 (12) 实验6 键盘扫描输入编程 (14) 实验7 UART与PC对话实验 (17) 实验8 ADC数据采集实验 (19)

实验1 IO控制LED流水灯实验 1.实验目的 1)、熟悉KEIL编程环境和调试环境。 2)、掌握单片机汇编语言和指令的用法。 3)、理解简单的IO控制程序,延迟子程序,并对其修改,使其功能改变。 2.实验设备 硬件: PC 机,单片机教学实验开发平台; 软件: KEIL集成开发环境、STC ISP程序下载软件。 3.实验内容 使用P0口控制8个LED 进行流水灯显示。 4.实验预习要求和实验准备要求 预习教科书关于单片机硬件架构内容、IO口的内容,特殊寄存器内容。 预习汇编程序编写、MCS-51指令表。 带上教科书、U盘、具备二进制和十六进制转换的科学计算器。 5.实验原理和步骤 1)实验原理 (1)实验原理图 图1 P0口连接的8盏LED灯 从图1中可以看出:如果需要把LED点亮有两个条件,其一是需要用短接帽把J1的2脚和3脚短接,在PCB上就是将电路板左上角LED和VCC短接起来;其二是P0.X口给出低电平,让电流从VCC开始流经限流电阻、LED后进入单片机的P0.X口,最后到单片机内部的地线上。因此,简单地说就是在短接帽接好的前提下,向P0.X口写0则LED将点亮,写1则LED将熄灭。图中网络标识PORT0_0、PORT0_1……PORT0_7和单片机P0.0、P0.1……P0.7连接,可观察原理图上单片机P0口的网络标识也是PORT0_0、 PORT0_1……PORT0_7。

单片机实验程序设计

实验一LED流水灯 一、实验目的 制作一个流水灯,编写程序来控制发光二极管由上至下的反复循环流水点亮,每次点亮一个发光二极管。 二、程序设计 #include #include sbit LED = P1^0; void delay() { unsigned int i,j; for(i=120;i>0;i++) for(j=120;j>0;j++); } void main() { unsigned char i; LED = 0; while(1) { for(i=0;i<8;i++) { LED=0xfe; delay( ); LED = _crol_(LED,1); P1 = LED; } LED=0X01; for(i=0;i<8;i++) { delay( ); LED = _cror_(LED,1); P1 = LED; } } }

实验二按键扫描 一、实验目的 使用单片机片内的I/O口来进行开关状态的检测。当开关打开时,I/O引脚为高电平,当开关闭合时,I/O引脚为低电平。编写一个程序,控制流水灯,开关闭合,对应的发光二极管点亮。 二、程序设计 #include #include #define GPIO_LED P1 sbit K1=P3^5; sbit K2=P3^4; void Delay10ms( ); void main(void) { unsigned int i,j,l; j=0xfe; while(1) { GPIO_LED=j; if (K1==0) { Delay10ms( ); if (K1==0) { j=_cror_(j,1); while((i<50)&&(K1==0)) { Delay10ms( ); i++; } i=0; } } if (K2==0) { Delay10ms( ); if (K2==0) { l=0xff; GPIO_LED=~l;

单片机典型实验汇编程序

实验一LED灯控制实验 实验任务: ①试编程用51单片机P0口实现8个LED 灯的交替亮灭控制; ②试编程实现二进制加法的LED显示; ③试编程实现8位LED灯的单方向跑马灯控制。 实验二数码管静态显示控制实验 实验任务: 用P0口驱动LED数码管静态显示0、1、2、3、4五个数码,每两数码时间间隔2S,循环往复显示。 实验三数码管动态显示控制实验 实验任务: 两片四位一体数码管动态显示0—7八个数码,每两位数码时间间隔2S,循环往复显示,P0口用于段码输出,P1口用于位选。 实验四按键识别控制实验 实验任务: 按键识别,用P2口识别按键,K1—K8对应数码为1—8,按下按键,数码管静态显示对应的数码。 参考程序 实验一: ①试编程用51单片机P0口实现8个LED 灯的交替亮灭控制 ORG 0000H ;程序从此地址开始运行 LJMP MAIN ;跳转到MAIN 程序处 ORG 0100H ;MAIN 从0100H处开始 MAIN: MOV P2 ,#00H ;P2为低电平LED 灯亮 ACALL DELAY ;调用延时子程序 MOV P2 ,#0FFH ACALL DELAY AJMP MAIN DELAY: MOV R5,#02H ;将立即数传给寄存器R5 F3: MOV R6,#0FFH F2: MOV R7,#0FFH F1: DJNZ R7,F1 ;若为0程序向下执行,若不为0程序跳转到 DJNZ R6,F2 DJNZ R5,F3 RET END ②试编程实现二进制加法的LED显示 ORG 0000H ;程序从0000开始运行 AJMP MAIN ORG 0100H MAIN: MOV A ,#000h LOOP: MOV P2,A ;全不亮 CALL DELAY ;延时。 INC A ;每次加一。 JMP LOOP DELAY:MOV R5,#50 ;延时。 D1: MOV R6,#40 D2: MOV R7,#248 D3: DJNZ R7,D3 DJNZ R6,D2 DJNZ R5,D1 RET END ③试编程实现8位LED灯的单方向跑马灯控制 ORG 0000H ;程序从0000开始运行 LJMP MAIN ;跳到主程序MAIN: ;主程序循环点亮 MOV P2,#00H ;全亮 LCALL DELAY ;延时一段时间 MOV A,#0FEH ;每次只亮一个

单片机实验报告 (3)

单片机原理及接口技术 学院:光电信息科学与技术学院班级:——实验报告册 083-1 实验一系统认识实验 1.1 实验目的 1. 学习keil c51集成开发环境的操作。 2. 熟悉td-51系统板的结构和使用。 1.2实验仪器 pc 机一台,td-nmc+教学实验系统。 1.3实验内容 1. 编写实验程序,将00h—0fh共16个数写入单片机内部 ram 的30h—3fh空间。 2.编写实验程序,将00h到0fh共16个数写入单片机外部ram的1000h到100fh空间。 1.4 源程序 https://www.360docs.net/doc/02393994.html, 0000h mov r1,#30h mov r2, #10h mov a, #00h mov @r1, a inc r1 inc a djnz r2,loop sjmp $ end 2. org 0000h mov dptr, #1000h mov r2, #10h mov a, #00h movx @dptr, a inc dptr inc a djnz r2,loop sjmp $ end loop: loop: 1.5 实验步骤 1.创建 keil c51 应用程序 (1)运行 keil c51 软件,进入 keil c51 集成开发环境。 - 3 -(2)选择工具栏的 project 选项,弹出下拉菜单,选择 newproject 命令,建立一个新的μvision2 工程。选择工程目录并输入文件名 asm1 后,单击保存。 (3)工程建立完毕后,弹出器件选择窗口,选择 sst 公司的 sst89e554rc。(4)为工程添加程序文件。选择工具栏的 file 选项,在弹出的下拉菜单中选择 new 目录。 (5)输入程序,将 text1 保存成asm1.asm。 (6)将asm1.asm源程序添加到 asm1.uv2 工程中,构成一个完整的工程项目。 2.编译、链接程序文件(1)设置编译、链接环境 (2)点击编译、链接程序命令,此时会在 output window 信息输出窗口输出相关信息。 3.调试仿真程序 (1)将光标移到 sjmp $语句行,在此行设置断点。 (2)运行实验程序,当程序遇到断点后,停止运行,观察存储器中的内容,验证程序功能。 1.6 实验结果. 2. 4 实验二查表程序设计实验 2.1实验目的 学习查表程序的设计方法,熟悉 51 的指令系统。 2.2实验设备 pc 机一台,td-nmc+教学实验系统 2.3实验内容 1.通过查表的方法将 16 进制数转换为 ascii 码; 2.通过查表的方法实现y=x2,其中x为0—9的十进制数,以bcd码表示,结果仍以bcd 码形式输出。

单片机实验书

实验一单片机I/O接口实验 【实验目的】 利用单片机的P1口作IO口,学会利用P1口作为输入和输出口。 【实验设备及器材】 笔记本电脑一台 HL-1单片机开发板一个 【实验内容】 编写一段程序,用P1口作为控制端口,使开发板上的LED轮流亮。 【实验要求】 学会使用单片机的P1口作IO口,如果有时间也可以利用P3口作IO口来做该实验。 【实验步骤】 1、实验原理如图1-1所示。 图1-1 2、用汇编语言编写好源程序。(在电脑上的编辑器软件中) 3、将源程序(也叫源代码、源文件)编译成目标程序(也叫目标代码、机器码、目标文件、

HEX文件)。 4、用下载软件将目标程序写入到单片机中。 5、写入后会自动运行目标程序。 如果程序运行不正常、可以用人工检查、软件仿真器等技术排除所编程序中存在的各种错误。错误排除后,再重复上面的3、4步骤。 【实验预习要求】 理解该实验单片机开发板的硬件结构,可以预先把程序编好,然后在Keil C51环境下进行软件仿真。 【实验参考程序】 ;放置数据在0100地址以后 ORG 0100 TMP1: DB 01H,02H,04H,08H,10H,20H,40H,80H,81H,82H DB 84H,88H,90H,0A0H,0C0H,0C1H,0C2H,0C4H,0C8H,0D0H DB 0E0H,0E1H,0E2H,0E4H,0E8H,0F0H,0F1H,0F2H,0F4H,0F8H DB 0F9H,0FAH,0FCH,0FDH,0FEH,0FFH,0FFH,00H,0FFH,00H ORG 0000H ;程序的开始 LJMP MAIN ;转入主程序 ORG 0200H ;主程序的开始 MAIN: MOV DPTR,#TMP1 ;得到数据存放的地址 MOV R7,#50 ;设置循环40次 M1: CLR A MOVC A,@A+DPTR ;读取相应地址的数据 CPL A ;因发光二极管采用共阳极,所以将数据取反再输出 MOV P1,A INC DPTR ;进入下一个数据准备 LCALL DELAY ;转入延时子程序 DJNZ R7,M1 ;40次未完成继续 LJMP MAIN ;40次完成回到主程序循环 DELAY: MOV R5,#255 ;延时子程序 D1: MOV R6,#255 DJNZ R6,$ DJNZ R5,D1 RET END ;程序体结束 【实验思考题】 想出几个实现以上功能的编程方法。

单片机实验报告程序

单片机应用技术实验报告 指导教师:王宏波 姓名: 小组成员:

1.延时实验 一、实验题目 (1)设fosc=6MHz,通过多级嵌套循环实现0.5S延时。 (2)通过调整晶振频率fosc,在上述延时程序的基础上实现延时0.25S循环点亮Pl.0口的LED。 二、实验目的 (1)掌握8051汇编指令格式。 (2)掌握延时时间的计算方法。 (3)掌握Keil软件中延时时间的观察方法。 (4)掌握循环结构程序的设计方法。 (5)掌握汇编起始指令ORG、汇编结束指令END、位操作指令的使用方法。(6)掌握8051驱动LED的方法。 (7)掌握示波器、直流电流表、直流电压表的使用方法。 三、实验元件 (1)AT89C51。 (2)AT89C51、POT-HG、LED、DC AMMETER、DC VOLTMETER、OSCILLOSCOPE。 四、硬件设计 六、汇编程序 (1)0.5S 延时程序 ORG0000H ;指令起始地址0000H ;延时子程序,延时机器周期数 1+10+500+500+(248*50*10+500+10+1)*2=250033 DELAY: MOV R4,#10 ;1Tms LP1: MOV R5,#50 ;10Tms LP2: MOV R6,#248 ;50*10Tms NOP;50*10Tms

LP3: DJNZR6,LP3 ;248*50*10Tms DJNZR5,LP2 ;50*10Tms DJNZR4,LP1 ;10Tms RET;1Tms END (2)延时0.25S循环点亮Pl.0 口的LED ;fosc=12 MHz ORG 0000H LOOP: CLR P1.0 LCALL DELAY SETB P1.0 LCALL DELAY LJMP LOOP DELAY: MOV R4,#10 LP1: MOV R5,#50 LP2: MOV R6,#248 NOP LP3: DJNZ R6,LP3 DJNZ R5,LP2 DJNZ R4,LP1 RET END; 七、实验中遇到的问题及解决方法 八、实验总结 2 外部中断实验 一、实验题目

单片机实验指导书2018

《单片机原理与应用》实验指导 桂林电子科技大学 电子工程与自动化学院 2018.10

实验一单片机开发系统的使用方法 一、实验目的 1.学习单片机开发系统和仿真软件的使用及程序调试方法。 2.掌握汇编程序的编写方法及常用技巧。 二、实验内容 1、学习用Keil软件进行51单片机的软件开发; 学习Keil软件的一般操作,步骤为:项目建立、程序录入、添加文件、编译生成HEX文件、(参见附录1) 2、学习用Keil软件基本调试。(参见附录2); 3、学习Proteus仿真软件的使用(参见附录3); 4、熟悉实验用单片机开发系统(参见操作指导书)。 三、实验原理 1、Keil软件使用练习 设(R0)=20H,(R1)=25H,(20H)=80H,(21H)=90H, (22H)=0A0H,(25H)=0A0H,(26H)=6FH,(27H)=76H,执行程序后,问程序完成什么功能,写出运行结果。(见参考程序一) 2、Proteus仿真软件使用练习 电路原理图如下,所需元件为:AT89C51、SW-SPST、LED-RED 图中用单片机的P1口作输出口接8个LED,8个LED按共阳极连接,端口逻辑值为0点亮LED;P3口作输入口接1个SW-SPST开关,P3口内含上拉电阻,当开

关打开时逻辑值为1,开关闭合时逻辑值为0。 编写程序点亮LED (见参考程序二) 3、下载 操作方法见附录1 四、实验预习 1、学习汇编语言编程的有关知识。 2、提前预习KEIL软件的使用方法,写出预习报告。 五、实验报告 1、总结出实验的详细步骤。 2、写出调试正确的程序及运行结果。 六、参考程序: 参考程序一 ORG 0000H MOV R0,#20H MOV R1,#25H MOV 20H,#80H MOV 21H,#90H MOV 22H,#0A0H MOV 25H,#0A0H MOV 26H,#6FH MOV 27H,#76H CLR C MOV R2,#3 LOOP: MOV A,@R0 ADDC A,@R1 MOV @R0,A CLR C INC R0 INC R1 DJNZ R2,LOOP JNC NEXT MOV @R0,#01H SJMP $ NEXT: DEC R0

单片机实验程序(全)

2基本输入输出实验(蜂鸣器控制程序) /******************************************************* 名称:基本输入输出(I/O)程序 说明: ********************************************************/ #include //包含头文件 #define uint unsigned int //宏定义 #define uchar unsigned char sbit buzzer=P3^5; sbit Keyadd=P2^0; sbit Keydec=P2^1; sbit Keycom=P2^2; void Delay(uint z) { uint x; uchar y; for(x=z;x>0;x--) //延时 { for(y=250;y>0;y--); } } void main(void) { uchar voice; voice=3; while(1) { if(Keyadd==0) //按键被按下时为0 voice=1; if(Keydec==0) voice=2; if(Keycom==0) voice=3; if(voice==1) {buzzer=~buzzer; Delay(1); } else if(voice==2) {buzzer=~buzzer; Delay(20); } else buzzer=1; } }

3定时器中断实验 /******************************************************* 名称:实验三作业 说明: ********************************************************/ #include //包含头文件 #define uint unsigned int //宏定义 #define uchar unsigned char uchar counter; uchar voice; sbit buzzer=P3^5; sbit Keyadd=P2^0; sbit Keydec=P2^1; sbit Keycom=P2^2; sbit Keycan=P2^3; //----------------计算计数器初值-----------------// #define T0_TIME1 254 //定时时间us为单位 #define T0ReLoadL1 ((65536-(uint)(T0_TIME1*11.0592/12)) % 256) #define T0ReLoadH1 ((65536-(uint)(T0_TIME1*11.0592/12)) / 256) //----------------计算计数器初值-----------------// #define T0_TIME2 1400 //定时时间us为单位 #define T0ReLoadL2 ((65536-(uint)(T0_TIME2*11.0592/12)) % 256) #define T0ReLoadH2 ((65536-(uint)(T0_TIME2 *11.0592/12)) / 256) /********************************************************* 名称:主程序 说明: **********************************************************/ void main(void) { //-----------------------------初始化TIMER0 TMOD|=0x01; //定时器T0方式1 TH0 =T0ReLoadH1; //装载计数器初值 TL0 =T0ReLoadL1; TR0 =1; //启动Timer0 ET0 =1; //Timer0中断使能 EA =1; //总开关使能 //-----------------------------大循环 counter=0;

相关文档
最新文档