单片机实验报告4.docx

上传人:b****3 文档编号:10247374 上传时间:2023-05-24 格式:DOCX 页数:24 大小:94.92KB
下载 相关 举报
单片机实验报告4.docx_第1页
第1页 / 共24页
单片机实验报告4.docx_第2页
第2页 / 共24页
单片机实验报告4.docx_第3页
第3页 / 共24页
单片机实验报告4.docx_第4页
第4页 / 共24页
单片机实验报告4.docx_第5页
第5页 / 共24页
单片机实验报告4.docx_第6页
第6页 / 共24页
单片机实验报告4.docx_第7页
第7页 / 共24页
单片机实验报告4.docx_第8页
第8页 / 共24页
单片机实验报告4.docx_第9页
第9页 / 共24页
单片机实验报告4.docx_第10页
第10页 / 共24页
单片机实验报告4.docx_第11页
第11页 / 共24页
单片机实验报告4.docx_第12页
第12页 / 共24页
单片机实验报告4.docx_第13页
第13页 / 共24页
单片机实验报告4.docx_第14页
第14页 / 共24页
单片机实验报告4.docx_第15页
第15页 / 共24页
单片机实验报告4.docx_第16页
第16页 / 共24页
单片机实验报告4.docx_第17页
第17页 / 共24页
单片机实验报告4.docx_第18页
第18页 / 共24页
单片机实验报告4.docx_第19页
第19页 / 共24页
单片机实验报告4.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机实验报告4.docx

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

单片机实验报告4.docx

单片机实验报告4

大连理工大学实验报告

实验时间:

2013年7月5星期五时间:

13:

00~16:

30

实验室(房间号):

综421实验台号码:

班级:

电医1001姓名:

梅世宇成绩:

实验四ZLG7290B实验:

键盘扫描实验

ZLG7290B实验:

AD转换的十进制显示实验

一、实验仪器

计算机系统、DP-51PROC单片机综合仿真实验台、TKSMonitor51仿真器、软件KeilC51

二、实验目的和要求

1.ZLG7290B实验:

键盘扫描实验

利用中断的方式获取按键操作的信息,并在中断服务程序中完成键值的读取、显示操作。

数码管初始显示为:

“data=“,当有按键操作时,将所读取的键值显示在最右的两位数码管上(如:

当按下S1键时,显示”data=-01“).

2.ZLG7290B实验:

AD转换的十进制显示实验

使用AD转换芯片TLC549CP对模拟电压进行数字转换,将转换的结果处理位3位的十进制数(000-255)并通过ZLG7290B进行显示。

三、实验算法

1.ZLG7290B实验:

键盘扫描实验

DATA_1(30H-37H):

变量缓冲区。

DISDA(20H-27H):

显示缓冲区。

28H-2BH:

装在从ZLG7290B00H单元开始读出的连续4个字节数据,其中29H就是键值。

当有按键操作时,利用ZLG7290B00H的/INT信号引发单片机的一个中断,利用中断服务程序从ZLG7290B00H中连续读取4个字节的数据,其中第二个字节(ZLG7290B00H的01H寄存器)就是键值。

将此值拆分、查表后送显示缓冲区的20H、21H单元。

2.ZLG7290B实验:

AD转换的十进制显示实验

20H开始的单元:

存放N个TLC549采集的数据;

40H-47H显示缓冲区;

4、实验电路图

1.ZLG7290B实验:

键盘扫描实验

图8.16实验电路的连接

2.ZLG7290B实验:

AD转换的十进制显示实验

 

五.实验流程图

1.ZLG7290B实验:

键盘扫描实验

图8.17主程序框图图8.18子程序流程图

2.ZLG7290B实验:

AD转换的十进制显示实验

图8.20主程序框图图8.21主函数流程图

6、程序清单

1.MCS-51与TLC的接口实验

sdabitp1.0

sclbitp1.1

wslaequ70h

rslaequ71h

disdaequ20h;源数据块首地址

disconequ08h;写入数据个数

data_1equ30h;变量区首地址

org8000h

ljmp8100h

org8003h

ljmpint_7290

org8100h

start:

movsp,#60h

clrp1.7;7290复位

lcalldelay

setbp1.7

setbea;开INT0中断

setbex0

setbit0;触发极性位下降沿

movdata_1,#13h;变量缓冲区

movdata_1+1,#13h;注意

movdata_1+2,#13h;变量取值范围0-F

movdata_1+3,#12h

movdata_1+4,#10h

movdata_1+5,#11h

movdata_1+6,#10h

movdata_1+7,#0dh

movdptr,#ledseg;开始对变量查表

movr7,#discon;写入数据个数

movr0,disda;源数据块首地址

movr1,#data_1

loop1:

mova,@r1

movca,@a+dptr;查表得对应的字形码

mov@r0,a;送显示缓冲区

incr1

incr0

djnzr7,loop1

loop:

movr7,#discon

movr2,#10h

movr3,#wsla

movr0,#disda

lcallwrnbyt;调显示子程序

lcalldelay;使显示稳定

sjmploop

ledseg:

db0fch,60h,0dah,0f2h,66h,0b6h,0beh,0e4h;0-7的字形码

db0feh,0f6h,0eeh,3eh,9ch,7ah,9eh,8eh;8-F的字形码

db0fah,1eh,12h,00h;a,t,=和熄灭码

cf:

push02h;将A中的数据拆分为两个思维16进制数并查表

pushdph

pushdpl

movdptr,#ledseg

movr2,a

anla,#0fh

movca,@a+dptr

movr3,a

mova,r2

swapa

anla,#0fh

movca,@a+dptr

movr4,a

popdpl

popdph

pop02

ret

int_7290:

push00h

push02h

push03h

push04h

push07h

pushacc

pushpsw

movr0,#28h;状态数据区首地址

movr7,#01h;取状态数据个数

movr2,#01h;内部数据首地址

movr3,#wsla;取器件地址(写)

movr4,#rsla;取器件地址(读)

lcallrdadd;读出7290的00H-03H数据存于28H-2BH

nop;设定一个断点,以观察独处的4个数据

mova,28h;取键值

lcallcf;拆分、查表

mov20h,r3;送显示缓冲区(最低两位数码管)

mov21h,r4

poppsw

popacc

pop07h

pop04h

pop03h

pop02h

pop00h

reti

delay:

push00h

push01h

movr0,#00h

delay1:

movr1,#00h

djnzr1,$

djnzr0,delay1

pop01h

pop00h

ret

 

WRNBYT:

PUSHPSW

PUSHACC

WRADD:

MOVA,R3;取外围器件地地址(包含r/w=0)

LCALLSTA;发送起始信号S

LCALLWRBYT;发送外围地址

LCALLCACK;检测外围器件的应答信号

JBF0,WRADD;如果应

MOVA,R2

LCALLWRBYT;发送内部寄存器首地址

LCALLCACK;检测外围器件的应答信号

JBF0,WRADD;如果应答不正确返回重来

WRDA:

MOVA,@R0

LCALLWRBYT;发送外围地址

LCALLCACK;检测外围器件的应答信号

JBF0,WRADD;如果应答不正确返回重来

INCR0

DJNZR7,WRDA

LCALLSTOP

POPACC

POPPSW

RET

 

RDADD:

PUSHPSW;从PCF8563的02H单元读入7个参数

PUSHACC;存放于20H-26H单元

RDADD1:

LCALLSTA

MOVA,R3;取器件地址(写)

LCALLWRBYT;发送外围地址

LCALLCACK;检测外围器件的应答信号

JBF0,RDADD1;如果应答不正确返回重来

MOVA,R2;取内部地址

LCALLWRBYT;发送外围地址

LCALLCACK;检测外围器件的应答信号

JBF0,RDADD1;如果应答不正确返回重来

LCALLSTA

MOVA,R4;取器件地址(读)

LCALLWRBYT;发送外围地址

LCALLCACK;检测外围器件的应答信号

JBF0,RDADD1;如果应答不正确返回重来

RDN:

LCALLRDBYT

MOV@R0,A

DJNZR7,ACK

LCALLMNACK

LCALLSTOP

POPACC

POPPSW

RET

ACK:

LCALLMACK

INCR0

SJMPRDN

 

STA:

SETBSDA;启动信号S

SETBSCL

NOP;产生4.7US延时

NOP

NOP

NOP

NOP

CLRSDA

NOP;产生4.7US延时

NOP

NOP

NOP

NOP

CLRSCL

RET

STOP:

CLRSDA;停止信号P

SETBSCL

NOP;产生4.7US延时

NOP

NOP

NOP

NOP

SETBSDA

RET

MACK:

CLRSDA;发送应答信号ACK

SETBSCL

NOP;产生4.7US延时

NOP

NOP

NOP

NOP

CLRSCL

SETBSDA

RET

MNACK:

SETBSDA;发送非应答信号NACK

SETBSCL

NOP;产生4.7US延时

NOP

NOP

NOP

NOP

CLRSCL

CLRSDA

RET

CACK:

SETBSDA;应答位检测子程序

SETBSCL

CLRF0

MOVC,SDA;采样SDA

JNCCEND;应答正确时转CEND

SETBF0;应答错误时F0置一

CEND:

CLRSCL

RET

WRBYT:

PUSH06H

MOVR6,#08H;发送一个字节子程序

WLP:

RLCA;(入口参数A)

MOVSDA,C

SETBSCL

NOP;产生4.7US延时

NOP

NOP

NOP

NOP

CLRSCL

DJNZR6,WLP

POP06H

RET

RDBYT:

PUSH06H

MOVR6,#08H;接收一个字节子程序

RLP:

SETBSDA

SETBSCL

NOP;产生大于15微秒的延时

NOP;注意这是专门为ZLG7290

NOP;添加的20微秒延时部分

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

MOVC,SDA

MOVA,R2

RLCA

MOVR2,A

CLRSCL

DJNZR6,RLP;(出口参数R2)

POP06H

RET

 

end

2.ZLG7290B实验:

数码显示实验

 

SDABITP1.0;7290B的引脚定义

SCLBITP1.1

WSLAEQU070H

RSLAEQU071H

DATBITP1.0;TLC549PC引脚定义

CLKBITP1.1

CSBITP1.4

CUNTEQU20H;每次ADC采集数据个数

SHIFTEQU05H;除数(与采集数据个数有关)

ADDREQU20H;数据缓冲区首地址

DISDAEQU40H;显示缓冲区

DISCUNTEQU08H;显示缓冲区长度

ORG8000H

LJMP8100H

ORG8100H

START:

MOVSP,#60H

CLRP1.7;7290复位

LCALLDELAY

SETBP1.7

 

MOVDISDA+7,#0EEH;a字形

MOVDISDA+6,#7AH;d字形

MOVDISDA+5,#1AH;c字形

MOVDISDA+4,#00H;熄灭

MOVDISDA+3,#12H;“=”

LOOP:

LCALLTLC549;采集N个ADC数据(20H单元)

LCALLADJUST;数据滤波(屏蔽以观察滤波效果)

LCALLBCD_CONT;转换为十进制数

MOVR7,#DISCUNT

MOVR0,#DISDA

MOVR2,#10H

MOVR3,#WSLA

LCALLWRNBYT;7290数字显示

LCALLDELAY

SJMPLOOP

 

TLC549:

PUSH00H;连续采集16次数据

PUSH07H;存放于20H-2FH中

MOVR7,#CUNT

MOVR0,#ADDR

LOOP2:

LCALLTLC549_ADC

MOV@R0,A

INCR0

DJNZR7,LOOP2

POP07H

POP00H

RET

 

ADJUST:

PUSH00H;将20H开始的CUNT个数据

PUSH02H;求平均值

PUSH03H;结果于A中

PUSH07H

MOVR7,#CUNT

MOVR0,#ADDR

CLRA

MOVR2,A

LOOP3:

CLRC;累加

ADDCA,@R0

JNCLOOP4

INCR2

LOOP4:

INCR0

DJNZR7,LOOP3

MOVR3,A

MOVA,R2;除以数据个数CUNT

MOVR7,#SHIFT

LOOP5:

CLRC

MOVA,R2

RRCA

MOVR2,A

MOVA,R3

RRCA

MOVR3,A

DJNZR7,LOOP5

POP07H

POP03H

POP02H

POP00H

RET

 

TLC549_ADC:

PUSH07H

CLRA

CLRCLK

MOVR7,#08H

CLRCS

LOOP1:

SETBCLK

NOP

NOP

NOP

NOP

MOVC,DAT

RLCA

CLRCLK

NOP

NOP

DJNZR7,LOOP1

SETBCS

SETBCLK

POP07H

RET

 

BCD_CONT:

PUSH07H

PUSH06H

PUSH05H

PUSH02H

MOVB,#64H

DIVAB

MOVR7,A;R7中得百位数

MOVR2,B;R2中得余数

MOVA,R2

MOVB,#0AH

DIVAB

MOVR6,A;R6中得十位数

MOVR5,B;R5中得个位数

MOVA,R7

LCALLCF;调拆分子程序(入口A出口R4,R3-字形码)

MOVDISDA+2,R3;高位R4无用

MOVA,R6

LCALLCF;调拆分子程序(入口A出口R4,R3-字形码)

MOVDISDA+1,R3

MOVA,R5

LCALLCF;调拆分子程序(入口A出口R4,R3-字形码)

MOVDISDA+0,R3

POP02H

POP05H

POP06H

POP07H

RET

 

CF:

PUSH02H;将A中的数据拆分为两个独立的BCD码并查表

PUSHDPH

PUSHDPL

MOVDPTR,#LEDSEG

MOVR2,A

ANLA,#0FH

MOVCA,@A+DPTR

MOVR3,A

MOVA,R2

SWAPA

ANLA,#0FH

MOVCA,@A+DPTR

MOVR4,A

POPDPL

POPDPH

POP02H

RET

WRNBYT:

PUSHPSW

PUSHACC

WRADD:

MOVA,R3

LCALLSTA

LCALLWRBYT

LCALLCACK

JBF0,WRADD

MOVA,R2

LCALLWRBYT

LCALLCACK

JBF0,WRADD

WRDA:

MOVA,@R0

LCALLWRBYT

LCALLCACK

JBF0,WRADD

INCR0

DJNZR7,WRDA

LCALLSTOP

POPACC

POPPSW

RET

CACK:

SETBSDA

SETBSCL

CLRF0

MOVC,SDA

JNCCEND

SETBF0

CEND:

CLRSCL

RET

WRBYT:

MOVR6,#08H

WLP:

RLCA

MOVSDA,C

SETBSCL

NOP

NOP

NOP

NOP

CLRSCL

DJNZR6,WLP

RET

STA:

SETBSDA

SETBSCL

NOP

NOP

NOP

NOP

CLRSDA

NOP

NOP

NOP

NOP

CLRSCL

RET

STOP:

CLRSDA

SETBSCL

NOP

NOP

NOP

NOP

SETBSDA

NOP

NOP

NOP

NOP

RET

DELAY:

PUSH00H

PUSH01H

MOVR0,#00H

DELAY1:

MOVR1,#00H

DJNZR1,$

DJNZR0,DELAY1

POP01H

POP00H

RET

LEDSEG:

DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E4H

DB0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH

END

 

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

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2