单片机实验报告.docx

上传人:b****3 文档编号:26473559 上传时间:2023-06-19 格式:DOCX 页数:26 大小:153.20KB
下载 相关 举报
单片机实验报告.docx_第1页
第1页 / 共26页
单片机实验报告.docx_第2页
第2页 / 共26页
单片机实验报告.docx_第3页
第3页 / 共26页
单片机实验报告.docx_第4页
第4页 / 共26页
单片机实验报告.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

单片机实验报告.docx

《单片机实验报告.docx》由会员分享,可在线阅读,更多相关《单片机实验报告.docx(26页珍藏版)》请在冰豆网上搜索。

单片机实验报告.docx

单片机实验报告

微型计算机原理与实验实验报告

王海东1201210458

一、实验目的

1.定时器的使用,了解定时器T1,T0的工作原理

2.外部中断的使用,学会使用51单片机的两个外部中断口,并掌握优先级的设定

3.了解8279的硬件电路及软件控制程序,学会利用51单片机控制8279进行显示和键盘输入。

4.了解键盘及数码管显示原理,4x4键盘的输入输出方式,8位数码管显示数字的控制方法。

5.利用51单片机编写简单电子表、日历并实现显示功能。

6.学会利用51单片机编写或改写程序,掌握综合应用的能力。

二、实验设备

1.PC一台

2.单片机仿真器一台

3.单片机实验板一块

主要器件:

AT89C51,8279,数码管,键盘等

4.Medwin仿真软件

三、实验内容要求

1.定时/计数器T0、T1互换使用,并改变时钟显示格式

2.利用外部中断,实现可调时钟

3.在时钟基础上,增加日历功能

4.外部ram0000h——00ffh256个单元写入55h。

5.将外部ram0100h——01ffh256个单元清0。

6.显示器实现1/100秒显示功能(百米赛计时器)。

7.显示器实现12分钟1/100秒倒计时功能(NBA计时器)。

8.实现年、月、日与时、分、秒交替显示。

四、实验原理

1.试验原理简介

利用51单片机控制命令,实现时钟显示,键盘输入功能,主要是靠控制8279芯片实现显示功能及键盘输入控制。

89C51有五个中断源,中断可以设置为两个优先级。

我们主要利用定时器中断和外部中断实现实验内容中的功能。

 

2.8279原理图

图18279

Intel8279是一种通用的可编程的键盘/显示器接口器件,可以自动扫描键盘接口,并储存相应的信息,可以向CPU请求中断,加快CPU工作效率。

图1中可以看到,RL0—RL3为扫描输出,键盘输入则通过138译码器译码后,在SL0-SL2扫描输入。

图2为键盘的电路图,

图2键盘

图3数码管

图3的8位数码显示,与8279输出OA0-OA3,OB0-OB3,相连,实现显示功能,8数码管上又有8个发光二级管,分别标号a,b,c,d,e,f,g,dp,显示原理就是控制8个发光管的亮暗,显示数字形状,达到显示目的。

3.流程图

图4流程图

 

4.所用的CPU资源

定时器:

用于时钟的T0和T1定时器

中断源:

定时器T0、T1中断、外部中断0、中断1。

RAM包含00H~1FH的工作寄存器区、20H~2FH的位寻址区。

5.功能介绍

1、功能:

时钟和日期显示,校准功能。

第一次按下F1键进行时钟调整。

第二次按下F1键进行日期调整,第三次按下F1显示调整好的时钟。

2、按一下F2键,显示百米秒表计时,F3键此时为暂停键,再按F2还原。

3、按下F4键,显示12分钟NBA倒计时,秒表开始显示,F3键为暂停。

4、按下F3键是时钟显示与日期交替显示,此时要确保F2和F4都没用按下。

5、#键按下是外部ram0000h——00ffh256个单元写入55h。

6、*键按下是将外部ram0100h——01ffh256个单元清0。

 

附件

程序代码(所用寄存器地址用符号进行了替代)

fsecequ0f0h

fmsecequ04h

fkeyequ0f1h

fl5equ05h

fl6equ06h

fl7equ07h

fl8equ08h

ff0equ10h

ff1equ11h

ff2equ12h

ff3equ13h

ff4equ14h

ff5equ15h

ff6equ16h

ff7equ17h

ff8equ18h

ff9equ19h

 

org0;主函数入口地址

sjmpmain

org03h;外部0中断入口地址

ljmpkey_int

org0bh;T0中断入口地址

ljmpt0_int

org13h;外部1中断入口地址

reti

org1bh;T1中断入口地址

ljmpt1_int

org23h;串行口中断入口地址

reti

org30h

main:

movsp,#60h

movtmod,#11h;定义T0、T1工作于方式1状态,即16位的定时器

movth0,#0d8h

movtl0,#0f0h;10ms

movth1,#0d8h

movtl1,#0f0h

movr0,#20h;清零ram20h-5fh

clra

lp:

mov@r0,a

incr0

cjner0,#60h,lp

mov17h,#00

lcallini8279

setbea;CPU开放中断

setbex0;允许外部0中断

setbit0;外部0中断电平触发

setbet1;T1溢出中断允许

setbtr1;允许T1中断

setbpx0;键盘中断优先级最高

lcallini8279

lcalldis8279

lpa:

jbcfsec,add_1s

jbcfkey,lpb

jbcff0,key_F1;直接寻址的位是1则转移,且位清0

jbcff1,key_F2;对应的地址见书32页

jbcff2,key_F3

jbcff4,key_F4

jbcff5,key_F5

jbcff6,key_F6

jbcfmsec,add_1ms;循环10ms后进入中断

sjmplpa

key_F1:

lcalltime_date_F1

sjmplpa

key_F2:

lcallbaimi_F2

sjmplpa

key_F3:

lcalletd_F3

sjmplpa

key_F4:

lcallnba_F4

sjmplpa

key_F5:

lcallwaibu_F5

sjmplpa

key_F6:

lcallqingling_F6

sjmplpa

add_1s:

jbfl5,lpa;直接寻址的位是1则转移,回到主循环

jbff9,lpa

LCALLxianshi

lcalldis8279

ljmplpa

add_1ms:

LCALLxianshi1

lcalldis8279

ljmplpa

lpb:

mova,60h

lcallconvert;调用键盘字符转换

part1:

cjnea,#0ah,T0_9;判断F1

setbff0

ljmpabc

part2:

cjnea,#0bh,part3;判断F2

jbff8,pingbi_1;按下一次F4后,F2被屏蔽无效

setbff1

cplfl5

cplfl7

pingbi_1:

ljmpabc

part3:

cjnea,#0ch,part4;判断F3

setbff2

ljmpabc

part4:

cjnea,#0dh,part5;判断F4

jbfl7,pingbi_2;按下一次F2后,F4被屏蔽无效

setbff4

cplff9

cplff8

pingbi_2:

ljmpabc

part5:

cjnea,#0eh,part6;判断F5

setbff5

ljmpabc

part6:

setbff6;判断F6

cplff7

ljmpabc

T0_9:

jncpart2;判断是不是数字键按下(0-9),是,则向下执行

jnbfl6,abc

jbfl8,c_date

cjner1,#78h,abcd1;判断78h位的值,只能是0,1,2

cjnea,#0,abcd0

ljmpabcd1

abcd0:

cjnea,#1,abcd

ljmpabcd1

abcd:

cjnea,#2,abc

ljmpabcd1

abcd1:

cjner1,#7ah,abc1;显示并可更改时钟模块,不等于7a,7d(时间显示的-)时直接往下运行;等于7a,7d时寄存器+1再运行

incr1

abc1:

cjner1,#7dh,c_time

incr1

c_time:

mov@r1,a

incr1

lcalldis8279

mova,78h

anla,#0fh

swapa

adda,79h

mov52h,a

mova,7bh

anla,#0fh

swapa

adda,7ch

mov51h,a

mova,7eh

anla,#0fh

swapa

adda,7fh

mov50h,a

ljmpabc

c_date:

cjner1,#7ah,abc3;显示并可更改日期,不等于7a,7d(时间显示的-)时直接往下运行;等于7a,7d时寄存器+1再运行

incr1

abc3:

cjner1,#7dh,abc4

incr1

abc4:

mov@r1,a

incr1

LCALLdis8279

mova,78h

anla,#0fh

swapa

adda,79h

mov5bh,a

mova,7bh

anla,#0fh

swapa

adda,7ch

mov5ah,a

mova,7eh

anla,#0fh

swapa

adda,7fh

mov59h,a

abc:

ljmplpa

sjmp$

time_date_F1:

incr6;F1按下一次更改时钟;第二次更改日期;第三次跳出

cjner6,#1,M_data

clrtr1;cpl取反,暂停t1中断

setbfl6;默认06h初值是0,为锁住数字键;为1时,打开数字键

movr1,#78h

ret

M_data:

cjner6,#2,M_exit

setbfl8

movr1,#78h

LCALLxianshi2

LCALLdis8279

ret

M_exit:

movr6,#0

setbtr1

clrfl6

clrfl8

ret

baimi_F2:

jnbfl7,clear_0;F2第一次按下启动,此时按下F3是暂停,二次按下F2退出,直接寻址为0转移

setbet0;开t0中断,直接寻址为1,即07H为1

setbtr0

ret

clear_0:

clret0;定时器T0中断截止

clrtr0

mov40h,#0

mov41h,#0

mov42h,#0

ret

etd_F3:

jbff9,t0_break;是否之前按下F4

jbfl5,t0_break;是否之前按下F2,都没按下循环显示时钟,有按下则暂停

loop_t_d:

;循环显示日期和时钟

jb13h,dis_date;为1转移显示日期

lcallxianshi;显示时间

lcalldis8279

sjmploop_t_d

dis_date:

lcallxianshi2;显示日期

lcalldis8279

jnbfkey,loop_t_d;判断无键按下转移

clrfkey

mova,60h

lcallconvert

cjnea,#0ch,loop_t_d;再次按下F3跳出循环显示

ret

t0_break:

cpltr0;暂停t0中断

ret

nba_F4:

jnbff8,clear_1;F4从12.00.00到计时

mov40h,#0

mov41h,#0

mov42h,#12h

setbet0

setbtr0

ret

clear_1:

clret0;再次按下跳出清零

clrtr0

mov40h,#0

mov41h,#0

mov42h,#0

ret

waibu_F5:

jnbff7,clr_0;按下f5,17h取反

pushacc

pushpsw

pushdph

pushdpl

movdptr,#0000h

movr6,#0ffh

mova,#55h

movx@dptr,a;按下#键外部ram0000h-00ffh256个单元写入55h

loop_1:

incdptr

movx@dptr,a

djnzr6,loop_1

popdpl

popdph

poppsw

popacc

ret

qingling_F6:

pushacc

pushpsw

pushdph

pushdpl

movdptr,#0100h

movr6,#0ffh

mova,#00h

movx@dptr,a;再次按下*键将外部ram0100h-01ffh256个单元清0

loop_2:

incdptr

movx@dptr,a

djnzr6,loop_2

popdpl

popdph

poppsw

popacc

ret

 

xianshi:

mova,50h;显示时钟

anla,#0fh

mov53H,a

mova,50h

anla,#0f0h

swapa

mov54H,a

mova,51h

anla,#0fh

mov55H,a

mova,51h

anla,#0f0h

swapa

mov56H,a

mova,52h

anla,#0fh

mov57H,a

mova,52h

anla,#0f0h

swapa

mov58H,a

mov78h,58h

mov79h,57h

mov7ah,#12h

mov7bh,56h

mov7ch,55h

mov7dh,#12h

mov7eh,54h

mov7fh,53h

ret

xianshi1:

;显示秒表

mova,40h

anla,#0fh

mov43H,a

mova,40h

anla,#0f0h

swapa

mov44H,a

mova,41h

anla,#0fh

mov45H,a

mova,41h

anla,#0f0h

swapa

mov46H,a

mova,42h

anla,#0fh

mov47H,a

mova,42h

anla,#0f0h

swapa

mov48H,a

mov78h,48h

mov79h,47h

mov7ah,#12h

mov7bh,46h

mov7ch,45h

mov7dh,#13h

mov7eh,44h

mov7fh,43h

ret

xianshi2:

;显示日期

mova,59h

anla,#0fh

mov30H,a

mova,59h

anla,#0f0h

swapa

mov31H,a

mova,5ah

anla,#0fh

mov32H,a

mova,5ah

anla,#0f0h

swapa

mov33H,a

mova,5bh

anla,#0fh

mov34H,a

mova,5bh

anla,#0f0h

swapa

mov35H,a

mov78h,35h

mov79h,34h

mov7ah,#12h

mov7bh,33h

mov7ch,32h

mov7dh,#12h

mov7eh,31h

mov7fh,30h

ret

 

t0_int:

pushacc;中断10ms计时,100次为1s

pushpsw

movth0,#0d8h

movtl0,#0f0h

setbfmsec;置1方便显示

jbfl7,add_1;转移到正计时

jbff8,sub_1;转移到倒计时

sjmprt0_int;结束

add_1:

mova,40h;正计时

adda,#1

daa

mov40h,a

cjnea,#100h,rt0_int;毫秒,比较跳出,04h为1后可以去显示

mov40h,#0

mova,41h

adda,#1

daa

mov41h,a

cjnea,#60h,rt0_int;秒

mov41h,#0

mova,42h

adda,#1

daa

mov42h,a

cjnea,#60h,rt0_int;分钟

mov42h,#0

sjmprt0_int

sub_1:

mova,40h;倒计时

adda,#99h

daa

mov40h,a

cjnea,#99h,rt0_int

mova,41h

cjnea,#0,sub_2

mova,#60h

sub_2:

adda,#99h

daa

mov41h,a

cjnea,#59h,rt0_int

mova,42h

cjnea,#0,sub_3

mova,#60h

sub_3:

adda,#99h

daa

mov42h,a

cjnea,#00h,rt0_int

rt0_int:

poppsw

popacc

reti

t1_int:

pushacc

pushpsw

movth1,#0d8h

movtl1,#0f0h

mova,4fh

adda,#1

daa

mov4fh,a

cjnea,#100h,rt1_int

setbfsec

cplff3

movr7,#00

mova,50h

adda,#1

daa

mov50h,a

cjnea,#60h,rt1_int

mov50h,#0

mova,51h

adda,#1

daa

mov51h,a

cjnea,#60h,rt1_int

mov51h,#0

mova,52h

adda,#1

daa

mov52h,a

cjnea,#24h,rt1_int

mov52h,#0

mova,59h

adda,#1

daa

mov59h,a

cjnea,#31h,rt1_int

mov59h,#1

mova,5ah

adda,#1

daa

mov5ah,a

cjnea,#13h,rt1_int

mov5ah,#1

mova,5bh

adda,#1

daa

mov5bh,a

cjnea,#100h,rt1_int

mov5bh,#0

mova,5ch

adda,#1

daa

mov5ch,a

cjnea,#100h,rt1_int

mov5ch,#0

rt1_int:

poppsw

popacc

reti

 

ini8279:

movdptr,#8001h

mova,#0d1h;清除命令6

movx@dptr,a

lp2:

movxa,@dptr

jbacc.7,lp2;等待160us清除

mova,#0;8279命令字0

movx@dptr,a

mova,#34h;100khz命令字1

movx@dptr,a

ret

dis8279:

movdptr,#8001h

mova,#90h

movx@dptr,a

movr0,#78h

movr4,#08

movdptr,#8000h

lp3:

mova,@r0

adda,#5

movca,@a+pc

movx@dptr,a

incr0

djnzr4,lp3

ret

seg1:

db3fh,06h,5bh,4fh,66h;0,1,2,3,4

db6dh,7dh,07h,7fh,6fh;5,6,7,8,9

db77h,7ch,39h,5eh,79h;A,B,C,D,E

db71h,73h,3eh,40h,80h;F,P,U,-,黑

;小系统板键盘按键ASC11码

seg2:

db06h,5bh,4fh,77h;1.2.3.A

db66h,6dh,7dh,7ch;4,5,6,B

db07h,7fh,6fh,39h;7,8,9,C

db71h,3fh,73h,5eh;F,0,P,D

DB40h,00h;-.黑

convert:

adda,#1;键号转换0、1、...

movca,@a+pc;...9键的键号是01

ret;......9

db1,2,3,0ah;F1=0ah,F2=0bh

db4,5,6,0bh;F3=0ch,F4=0dh

db7,8,9,0ch;*=0fh,#=0eh

db0fh,0,0eh,0dh;

key_int:

pushacc

pushpsw

pushdph

pushdpl

setbrs0

movdptr,#8001h

movxa,@dptr

anla,#0fh

jzkeyrtn

mova,#40h

movx@dptr,a

movdptr,#8000h

movxa,@dptr

movr2,a

anla,#18h

rra

xcha,r2

anla,#03h

adda,r2

mov60h,a

setbfkey

keyrtn:

popdpl

popdph

poppsw

popacc

reti

end

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

当前位置:首页 > 工程科技 > 城乡园林规划

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

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