单片机原理实验指导书张自友083.docx

上传人:b****6 文档编号:5950634 上传时间:2023-01-02 格式:DOCX 页数:17 大小:40.79KB
下载 相关 举报
单片机原理实验指导书张自友083.docx_第1页
第1页 / 共17页
单片机原理实验指导书张自友083.docx_第2页
第2页 / 共17页
单片机原理实验指导书张自友083.docx_第3页
第3页 / 共17页
单片机原理实验指导书张自友083.docx_第4页
第4页 / 共17页
单片机原理实验指导书张自友083.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

单片机原理实验指导书张自友083.docx

《单片机原理实验指导书张自友083.docx》由会员分享,可在线阅读,更多相关《单片机原理实验指导书张自友083.docx(17页珍藏版)》请在冰豆网上搜索。

单片机原理实验指导书张自友083.docx

单片机原理实验指导书张自友083

51系列单片机实验

指导书

张自友

乐山师院物电系实验室编印

2008年3月

第一章实验系统介绍

1.1.系统组成

AEDK5196ET单片机实验系统包括:

1.AEDK5196ET实验系统主板(已插上8032CPU芯片);

2.U5196ETF测试板(已联接60芯短接电缆);

3.

9芯标准串行通讯电缆:

1根;

4.4芯电源联接电缆:

1根;

5.40芯仿真联接电缆:

1根;

6.实验用线束:

20根;

7.外部电源:

选配件;

8.AEDK机电实验平台:

选配件;

9.系统软件安装盘:

5张;

实验系统连接如右图所示:

1.2基本实验项目

1.软件编程实验,提供MCS-51、MCS-96算术子程序库;

2.单片机本身并行口、串行口、定时/计数器、A/D转换、中断系统等实验;

3.扩展8位存储器实验;

4.扩展简单输入、输出口实验;

5.扩展可编程并行口(8155/8255)实验;

6.扩展可编程串行口(8251)实验;

7.扩展可编程键盘显示控制器(8279)实验;

8.扩展A/D(0809),D/A(0832)转换实验;

9.双色灯显示实验(交通灯);

10.扫描键盘,LED数码管显示实验;

11.计算机音响实验;

12.继电器控制实验;

13.步进电机,直流电机控制实验;

14.标准(CENTRONIC)并行打印机实验;

1.3系统快速入门

用户使用本系统进行实验时一般包括以下步骤:

启动运行环境->编写实验程序->调试实验程序->进行实验

1.启动运行环境

正确连接实验系统,确认各个开关处于正确位置,打开实验机电源。

运行LCAET软件,进入调试环境。

选取主菜单的Options菜单进行通讯设置(串行口、波特率的设置)和模式设置(CPU类型、实验机状态),与实验机建立通信联系。

2.编写实验程序

新建文件,保存成.asm(汇编)或者.c(c51)即可。

3.调试

打开源语句调试窗口并将目标码加载到实验机。

然后用户就可以运用本系统提供的各种工具和方法进行调试。

主要是观察程序的运行是否正常、有无走飞、各主要参数中间值是否与设计吻合。

4.进行实验

根据实验有关说明和用户编制的程序,完成连线(最好先关闭实验机电源,再进行)。

通过调试软件加载、运行程序,观察实验有关现象。

若现象与设计不符,则返回第三步,重新进行。

1.4其它

未尽事宜,请查看系统软件帮助文挡。

第二章MCS51系列单片机实验

实验一I/O口输入输出实验

任务:

1,实现用p1口输出控制发光二极管亮灭和延时闪烁、左右移动等。

2,实现用拨动开关K0~K7控制控制发光二极管L0~L7。

实验二定时器及中断实验

任务:

1,实现计数实验,如果按键5次则点亮发光二极管。

2,实现3秒和5秒定时,并用此信号控制交通灯。

3,外部中断实验:

按下按键时,停止发光二极管的闪烁。

实验三串口应用实验

任务:

1,串并转换实验

2.串口通信实验

实验四c51编程实验

任务:

1,控制L0~L7左右移动闪烁。

2,对10次ad采样结果排序,输出其平均值

说明:

1。

本指导书不直接提供实验源代码,请实验前先自己根据实验任务编写实验程序。

2.基本实验任务完成后,有时间可自己把附录的综合设计实验调试。

附录:

综合设计实验参考

1.AD转换实验,用中断方法读结果,并在数码管上显示

;CS8255----F228H,CS0809----F230H,P3.2----EOC,,IN0---0~5V(硬件连线)

;PC3~5-----LEDSA~LEDSC,PC2-------LEDSELECT(通过短路套接好)

;PA0~7-----LEDA~LEDDP(通过短路套接好)

;-------符号定义-------------------------------------------

C8255EQU0F22BH;8255命令口地址

P8255AEQU0F228H;8255PA口地址

P8255BEQU0F229H;8255PB口地址

P8255CEQU0F22AH;8255PC口地址

C0809EQU0F230H;ADC0809片选信号

LED0DATA50H;显存区

LED1DATA51H

LED2DATA52H

;--------主程序---------------------------------------

ORG0000H

AJMPMAIN

ORG0003H

AJMPFX0

ORG0030H

MAIN:

MOVSP,#60H

MOVLED0,#00H;置显示初始值

MOVLED1,#00H

MOVLED2,#00H

MOVDPTR,#C8255;8255初始化

MOVA,#80H;8255PA,PB,PC口输出

MOVX@DPTR,A

CLRIT0

SETBEX0

SETBEA;开中断

MOVDPTR,#C0809

MOVX@DPTR,A;启动AD转换

LOOP:

ACALLDISP;显示子程序

AJMPLOOP;主循环

;-------------8255驱动数码管显示子程序-------------------------------

DISP:

MOVDPTR,#P8255C

MOVA,#00H

MOVX@DPTR,A;通过8255C口选种第一个数码管

MOVDPTR,#LEDSEG

MOVA,LED0

MOVCA,@A+DPTR

MOVDPTR,#P8255A;显示键值

MOVX@DPTR,A;送显示段选码

ACALLDELAY;延时,增加显示亮度

CLRA;带了锁存器,送下一个数据前将数据撤消

MOVX@DPTR,A

MOVDPTR,#P8255C

MOVA,#08H

MOVX@DPTR,A;通过8255C口选种第二个数码管

MOVDPTR,#LEDSEG

MOVA,LED1

MOVCA,@A+DPTR

MOVDPTR,#P8255A;显示键值

MOVX@DPTR,A;送显示段选码

ACALLDELAY

CLRA

MOVX@DPTR,A

MOVDPTR,#P8255C

MOVA,#10H

MOVX@DPTR,A;通过8255C口选种第三个数码管

MOVDPTR,#LEDSEG

MOVA,LED2

MOVCA,@A+DPTR

ORLA,#80H;加个小数点在最高位后面

MOVDPTR,#P8255A;显示键值

MOVX@DPTR,A;送显示段选码

ACALLDELAY

CLRA

MOVX@DPTR,A

RET

;-----------;中断服务程序----------------------------------------------

FX0:

MOVDPTR,#C0809

MOVXA,@DPTR;读转换结果

MOVB,#5

MULAB;相乘结果为16位,再右移8位,则B刚好为整数部分

MOVLED2,B

MOVB,#10

MULAB;小数部分放大10倍

MOVLED1,B

MOVB,#10

MULAB

MOVLED0,B

FX0_RET:

MOVDPTR,#C0809

MOVX@DPTR,A;启动AD下一次转换

RETI

;----延时子程序-----------------------------------------

DELAY:

MOVR7,#5

DJNZR7,$

RET

;---LED显示常数表---------------------------------------

LEDSEG:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

;---------------------------------------------------------

END

2.简易函数信号发生器,通过按PULSE+键,切换波形输出

;P3.2----PULSE+

;CS0832-;-F218

;VOUT,AGND---示波器

D_APORTEQU0F218H;0832口地址

ORG0000H

AJMPSTART

ORG0003H

AJMPFX0

ORG0030H

START:

MOVSP,#60H

MOVR1,#1

SETBEX0

SETBIT0

SETBEA

LOOP:

ACALLSCAN

SJMPLOOP

;------方波生成-----------------

FANGBO:

MOVA,#0FFH

MOVDPTR,#D_APORT

MOVX@DPTR,A

ACALLDELAY

MOVA,#00H

MOVX@DPTR,A

ACALLDELAY

ACALLSCAN

SJMPFANGBO

;------锯齿波生成---------------

JUCHI:

MOVA,#00H

MOVDPTR,#D_APORT

J_L:

MOVX@DPTR,A

INCA

JNZJ_L

ACALLSCAN

SJMPJUCHI

;-----正弦波生成------------------

SINE:

MOVR0,#0

S_L:

MOVDPTR,#TABLE

MOVA,R0

MOVCA,@A+DPTR

MOVDPTR,#D_APORT

MOVX@DPTR,A

INCR0

CJNER0,#65,S_L

ACALLSCAN

SJMPSINE

;---中断服务子程序--------------

FX0:

INCR1

RETI

;----按键扫描--------

SCAN:

CJNER1,#0,N1

AJMPFANGBO

N1:

CJNER1,#1,N2

AJMPSINE

N2:

CJNER1,#2,N3

AJMPJUCHI

N3:

MOVR1,#0

RET

;----延时--------

DELAY:

MOVR7,#80

DJNZR7,$

RET

;----正弦波数据表-----------------

TABLE:

DB141,153,165,177,188,199,209,218,227,234,241,246,250,254

DB255,256,255,254,251,246,241,235,227,219,209,199,188,177

DB165,153,141,128,116,103,91,79,68,57,47,38,29,22,15,10,6

DB3,1,0,1,2,5,10,15,21,29,37,47,57,67,79,90,103,115,128

;--------------------------------------

END

 

3,键盘扫描与数码管显示实验

;CS8255----F228H

;PB0~7------LINE1~8(键盘列线)已接好

;PC0~1------KEYIN1~2(键盘行线)已接好

;PC3~5-----LEDSA~LEDSC,PC2-------LEDSELECT(通过短路套已接好)

;PA0~7-----LEDA~LEDDP(数码管数据线通过短路套已接好)

;---------------------------------------------------------

C8255EQU0F22BH;8255命令口地址

P8255AEQU0F228H;8255PA口地址

P8255BEQU0F229H;8255PB口地址

P8255CEQU0F22AH;8255PC口地址

LED0DATA50H;显存区,同时也是键值存放区

;---------------------------------------------------------

ORG0000H

AJMPMAIN

ORG0030H

MAIN:

MOVSP,#60H;堆栈初始化

MOVLED0,#10H;置显示初始值

MOVDPTR,#C8255;8255初始化

MOVA,#82H;PB口输入,PA,PC口输出

MOVX@DPTR,A

SETBEX0

SETBIT0;设置为边沿触发,避免重复多次触发

SETBEA;开中断

LOOP:

ACALLDISP;显示子程序

ACALLKEY

AJMPLOOP;循环扫描

;---------------------------------------------------------

DISP:

MOVDPTR,#P8255C

MOVA,#00H;00000000B,LEDSA~SC,LEDSELECT=0

MOVX@DPTR,A;通过8255C口选种第一个数码管

MOVDPTR,#LEDSEG

MOVA,LED0

MOVCA,@A+DPTR;查段选码

MOVDPTR,#P8255A

MOVX@DPTR,A;送段选码

PUSH1

POP1

NOP;短暂延时

CLRA

MOVX@DPTR,A;消除显示

RET

;---键盘扫描子程序-----------------------

KEY:

MOVA,#00H;先判断是否有键按下,行线PC0PC1送00

MOVDPTR,#P8255C

MOVX@DPTR,A

MOVDPTR,#P8255B

MOVXA,@DPTR;读列线,读到0,说明按了键

CJNEA,#0FFH,KEY_NEXT;判键是否按下,有键转KEY_NEXT

RET;无键返回

KEY_NEXT:

ACALLD10MS;消除抖动

MOVA,#02H;键盘扫描第一行(输出行选码)

MOVDPTR,#P8255C

MOVX@DPTR,A

MOVDPTR,#P8255B

MOVXA,@DPTR;读列线

CJNEA,#0FFH,KEY_L0;判键是否按下,有键转KEY_L0

AJMPKEY_NEXT2;无键转第二行

KEY_L0:

MOVR5,#0;保存行号

AJMPLIE;转列识别

KEY_NEXT2:

MOVA,#01H;扫描第二行

MOVDPTR,#P8255C

MOVX@DPTR,A

MOVDPTR,#P8255B

MOVXA,@DPTR

CJNEA,#0FFH,KEY_L1;判键是否按下,有键转KEY_L1

RET;无键转结束

KEY_L1:

MOVR5,#1;保存行号

AJMPLIE;转列识别

LIE:

MOVR0,#08H;控制循环移位8次,依次扫描列

MOVR6,#0;保存列号,初值0

LIE_LOOP:

RRCA

JNCCALC

INCR6

DJNZR0,LIE_LOOP

CALC:

MOVA,R5;计算键值,行*号8+列号

RLA

RLA

RLA

ADDA,R6

MOVLED0,A;将键值保存到显存区

KEYWAIT:

MOVDPTR,#P8255B;等待键释放

MOVXA,@DPTR

CJNEA,#0FFH,KEYWAIT

KEYEXIT:

RET

;---------------------------------------------------------

D10MS:

MOVR0,#100;延时10MS子程序

D1:

MOVR1,#50

DJNZR1,$

DJNZR0,D1

RET

;---------------------------------------------------------

;LED显示常数表

LEDSEG:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

DB77H,7CH,39H,5EH,79H,71H,00H

;---------------------------------------------------------

END

 

4.8255简易数字钟

;CS8255----F228H

;PC3~5-----LEDSA~LEDSC,PC2-------LEDSELECT(通过短路套已接好)

;PA0~7-----LEDA~LEDDP(通过短路套已接好)

;---------------------------------------------------------

C8255EQU0F22BH;8255命令口地址

P8255AEQU0F228H;8255PA口地址

P8255BEQU0F229H;8255PB口地址

P8255CEQU0F22AH;8255PC口地址

LSLDATA50H;秒个位

LSHDATA51H;秒十位

LLLDATA52H;分隔符"-"

LMLDATA53H;分个位

LMHDATA54H;分十位

LLHDATA55H;分隔符"-"

LHLDATA56H;时个位

LHHDATA57H;时十位

TIME1DATA58H;辅助计数变量1

TIME2DATA59H;辅助计数变量2

;---------------------------------------------------------

ORG0000H

AJMPMAIN

ORG000BH

AJMPFT0

ORG0030H

MAIN:

MOVSP,#60H

ACALLINI

LOOP:

ACALLDISP;显示子程序

AJMPLOOP;循环扫描

INI:

MOVLSL,#00H;置显示初始值

MOVLSH,#00H

MOVLLL,#0AH;"-"段选码位于段选码表中第10个位置

MOVLML,#00H

MOVLMH,#00H

MOVLLH,#0AH;"-"

MOVLHL,#00H

MOVLHH,#00H;初始值00-00-00

MOVDPTR,#C8255;8255初始化

MOVA,#80H;8255PA,PB,PC口输出

MOVX@DPTR,A

MOVTMOD,#02H;定时器初始化,定时,方式2(8位自动重装初值)

MOVTH0,#164;100微妙定时

MOVTL0,#164

MOVTIME1,#100;辅助计时变量,让100us发生10000次就是1秒

MOVTIME2,#100

SETBET0

SETBEA;开中断

SETBTR0;启动定时器

RET

;------显示子程序--------------------------------------

DISP:

MOVR5,#00H;存放数码管位选码(00H,08,10H,,,+8)

MOVR0,#50H;第一个数码管显存地址(50H,51H,52H,,,57H)

D_LOOP:

MOVDPTR,#P8255C

MOVA,R5;数码管位选码

MOVX@DPTR,A;通过8255C口选种第一个数码管

MOVDPTR,#LEDSEG

MOVA,@R0;送显示内容

MOVCA,@A+DPTR;查段选码

MOVDPTR,#P8255A;

MOVX@DPTR,A;送出显示

ACALLDELAY;延时,增加显示亮度;LED0

MOVA,R5

ADDA,#08H

MOVR5,A;回送R5

INCR0;变量修正

CJNER0,#58H,D_LOOP;8个没显示完,继续显示

RET

;---------------------------------------------------------

FT0:

;中断服务程序

DJNZTIME1,S0

MOVTIME1,#100

DJNZTIME2,S0

MOVTIME2,#100;统计100*100次

INCLSL

MOVA,LSL

CJNEA,#10,S0

MOVLSL,#0

INCLSH

MOVA,LSH

CJNEA,#6,S0

MOVLSH,#0;秒

INCLML

MOVA,LML

CJNEA,#10,S0

MOVLML,#0

INCLMH

MOVA,LMH

CJNEA,#6,S0

MOVLMH,#0;分

INCLHL

MOVA,LHL

CJNEA,#10,S0

MOVLHL,#0

INCLHH

MOVA,LHH

MOVB,#10

MULAB

ADDA,LHL;判断是否到24时,LHH*10+LHL

CJNEA,#24,S0

MOVLHH,#0

MOVLHL,#0;时

S0:

RETI

DELAY:

MOVDPTR,#P8255A;带了锁存器,送下一个数据前将数据撤除

CLRA

MOVX@DPTR,A

RET

;---------------------------------------------------------

;LED显示常数表

LEDSEG:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1