单片机实验1

更新时间:2024-06-06 19:53:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Keil C51集成开发环境的应用

一、 实验目的

1、 熟悉Keil C51集成开发环境的基本操作。 2、 掌握简单C51和汇编程序的编写、调试。 二、 实验内容

1、 掌握Keil C51集成开发环境的基本功能。

2、 分别用汇编语言和C51编写置1程序,把片外RAM中的

7000H-70FFH单元内容置1。

3、 分别用汇编语言和C51编写查找相同数个数程序。统计片外RAM

7000H-700FH中“00H”的个数并保存在片内RAM 30H单元。 三、 实验原理及步骤 1、置1程序

(1) 汇编语言程序设计框图

开始 R0=0 00送到7000H DPTR+1,R0-1 R0=0? 结束?

(2) 实验原理

? 置1程序的C51程序:把指针指向片外数存0x7000单元,定义一个整型变量a用来计数,使指针依次从7000H指向70FFH,同时指针赋0x01,从而使7000H-70FFH内存单元置1。

? 置1程序的汇编语言:首先给寄存器R0赋一个值01H,将DPTR指向片外7000H所在的内存单元。在循环体中,将累加器A送入立即数#01,然后将A中的内容送入DPTR所指的内存单元中,DPTR自加1,只要R0不等于0,就一直循环,直到把7000H-70FFH中的内容全部置1。 (3) 实验步骤

用连续或单步方式运行程序,检查7000H-70FFH单元中执行程序前后内容的变化。

(4) 假使把7000H-70FFH中的内容改成FF,如何修改程序? (5) 用C51重新编写该置1程序,运行程序并查询结果。(重点) 2、查找相同数个数

(1) 汇编语言程序设计框图

开始 字节数送R0,查找字节送R1 7000H-->DPTR 从DPTR中取数 判和被查数相同否 R1+1 DPTR+1 字节数到吗? R1送30H

(2) 实验原理

? C51程序:设置片外数存指针*P1指向0x7000单元,片内数存指针*P2指向0x30单元,即将查询得到的相同的数的个数放入0x30单元中。设置for循环,依次从7000H到700FH,只要指针P1所指单元中内容为0,则sum加1,然后将sum中的内容赋给P2所指的内存单元。

? 汇编语言:将7000H的地址赋给DPTR,然后将DPTR中的内容赋给寄存器A,然后,将A中内容与0比较,若相等,R0加1,DPTR加1,若不相等则R1加1,知道加满16次,将R1的内容赋给30H所在的内存单元。

结束 (3) 实验步骤

1) 在7000H-700FH单元中放入随机数,其中几个单元输入0; 2) 用连续或单步方式运行程序;

3) 观察片内RAM 30H的内容,应显示“00H”的个数。 (4) 用C51重新编写该程序,运行程序并查看结果。(重点) 四、 电路设计及调试 (1) 程序设计与调试 ? 置1程序的C51程序 #include main () {

char xdata *p=0x7000; int a=0x7100-0x7000; while(a--) { *p=0x01; p++; } }

? 置1程序的汇编语言 ORG 0000H MAIN:MOV R0,01H

MOV DPTR,#7000H LOOP:MOV A,#01H MOVX @DPTR,A INC DPTR DJNZ R0,LOOP SJMP $ END

? 查找相同数个数C51程序 #include #include void main() {

char sum=0;

char xdata *p1=0x7000; char data *p2=0x30; char a=0x10; for(a=0x10;a>0;a--) {

if(*p1==0) sum++; p1++; }

本文来源:https://www.bwwdw.com/article/4xf6.html

Top