1、单片机实验报告4大连理工大学实验报告实验时间: 2013 年 7 月 5 星期 五 时间 : 13 : 00 16 : 30实验室(房间号): 综 421 实验台号码: 班级: 电医 1001 姓名: 梅世宇 成绩: 实验四 ZLG7290B实验:键盘扫描实验 ZLG7290B实验:AD转换的十进制显示实验一、 实验仪器计算机系统、DP-51PROC单片机综合仿真实验台、TKSMonitor 51仿真器、软件KeilC51二、 实验目的和要求1.ZLG7290B实验:键盘扫描实验利用中断的方式获取按键操作的信息,并在中断服务程序中完成键值的读取、显示操作。数码管初始显示为:“data= “,当
2、有按键操作时,将所读取的键值显示在最右的两位数码管上(如:当按下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信号引发单片机的一
3、个中断,利用中断服务程序从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转换的十进制显示实验图
4、8.20主程序框图 图8.21主函数流程图6、程序清单1. MCS-51与TLC的接口实验 sda bit p1.0 scl bit p1.1 wsla equ 70h rsla equ 71h disda equ 20h;源数据块首地址 discon equ 08h;写入数据个数 data_1 equ 30h;变量区首地址 org 8000h ljmp 8100h org 8003h ljmp int_7290 org 8100hstart: mov sp,#60h clr p1.7;7290复位 lcall delay setb p1.7 setb ea;开INT0中断 setb ex0
5、setb it0;触发极性位下降沿 mov data_1,#13h;变量缓冲区 mov data_1+1,#13h;注意 mov data_1+2,#13h;变量取值范围0-F mov data_1+3,#12h mov data_1+4,#10h mov data_1+5,#11h mov data_1+6,#10h mov data_1+7,#0dh mov dptr,#ledseg;开始对变量查表 mov r7,#discon;写入数据个数 mov r0,disda;源数据块首地址 mov r1,#data_1loop1: mov a,r1 movc a,a+dptr;查表得对应的字形码
6、 mov r0,a;送显示缓冲区 inc r1 inc r0 djnz r7,loop1loop: mov r7,#discon mov r2,#10h mov r3,#wsla mov r0,#disda lcall wrnbyt;调显示子程序 lcall delay;使显示稳定 sjmp loopledseg: db 0fch,60h,0dah,0f2h,66h,0b6h,0beh,0e4h;0-7的字形码 db 0feh,0f6h,0eeh,3eh,9ch,7ah,9eh,8eh;8-F的字形码 db 0fah,1eh,12h,00h;a,t,=和熄灭码cf: push 02h;将A中的
7、数据拆分为两个思维16进制数并查表 push dph push dpl mov dptr,#ledseg mov r2,a anl a,#0fh movc a,a+dptr mov r3,a mov a,r2 swap a anl a,#0fh movc a,a+dptr mov r4,a pop dpl pop dph pop 02 retint_7290: push 00h push 02h push 03h push 04h push 07h push acc push psw mov r0,#28h;状态数据区首地址 mov r7,#01h;取状态数据个数 mov r2,#01h ;内
8、部数据首地址 mov r3,#wsla;取器件地址(写) mov r4,#rsla;取器件地址(读) lcall rdadd;读出7290的00H-03H数据存于28H-2BH nop;设定一个断点,以观察独处的4个数据 mov a,28h;取键值 lcall cf;拆分、查表 mov 20h,r3;送显示缓冲区(最低两位数码管) mov 21h,r4 pop psw pop acc pop 07h pop 04h pop 03h pop 02h pop 00h retidelay: push 00h push 01h mov r0,#00hdelay1: mov r1,#00h djnz r
9、1,$ djnz r0,delay1 pop 01h pop 00h ret WRNBYT: PUSH PSW PUSH ACC WRADD: MOV A,R3 ;取外围器件地地址(包含r/w=0) LCALL STA ;发送起始信号S LCALL WRBYT ;发送外围地址 LCALL CACK ;检测外围器件的应答信号 JB F0,WRADD ;如果应 MOV A,R2 LCALL WRBYT ;发送内部寄存器首地址 LCALL CACK ;检测外围器件的应答信号 JB F0,WRADD ;如果应答不正确返回重来 WRDA: MOV A,R0 LCALL WRBYT ;发送外围地址 LCA
10、LL CACK ;检测外围器件的应答信号 JB F0,WRADD ;如果应答不正确返回重来 INC R0 DJNZ R7,WRDA LCALL STOP POP ACC POP PSW RET RDADD: PUSH PSW ;从PCF8563的02H单元读入7个参数 PUSH ACC ;存放于20H-26H单元 RDADD1: LCALL STA MOV A,R3 ;取器件地址(写) LCALL WRBYT ;发送外围地址 LCALL CACK ;检测外围器件的应答信号 JB F0,RDADD1 ;如果应答不正确返回重来 MOV A,R2 ;取内部地址 LCALL WRBYT ;发送外围地址
11、 LCALL CACK ;检测外围器件的应答信号 JB F0,RDADD1 ;如果应答不正确返回重来 LCALL STA MOV A,R4 ;取器件地址(读) LCALL WRBYT ;发送外围地址 LCALL CACK ;检测外围器件的应答信号 JB F0,RDADD1 ;如果应答不正确返回重来RDN: LCALL RDBYT MOV R0,A DJNZ R7,ACK LCALL MNACK LCALL STOP POP ACC POP PSW RETACK: LCALL MACK INC R0 SJMP RDN STA: SETB SDA ;启动信号S SETB SCL NOP ;产生4.
12、7US延时 NOP NOP NOP NOP CLR SDA NOP ;产生4.7US延时 NOP NOP NOP NOP CLR SCL RET STOP: CLR SDA ;停止信号P SETB SCL NOP ;产生4.7US延时 NOP NOP NOP NOP SETB SDA RET MACK: CLR SDA ;发送应答信号ACK SETB SCL NOP ;产生4.7US延时 NOP NOP NOP NOP CLR SCL SETB SDA RETMNACK: SETB SDA ;发送非应答信号NACK SETB SCL NOP ;产生4.7US延时 NOP NOP NOP NOP
13、 CLR SCL CLR SDA RETCACK: SETB SDA ;应答位检测子程序 SETB SCL CLR F0 MOV C,SDA ;采样SDA JNC CEND ;应答正确时转CEND SETB F0 ;应答错误时F0置一CEND: CLR SCL RETWRBYT: PUSH 06HMOV R6,#08H ;发送一个字节子程序 WLP: RLC A ;(入口参数A) MOV SDA,C SETB SCL NOP ;产生4.7US延时 NOP NOP NOP NOP CLR SCL DJNZ R6,WLP POP 06H RETRDBYT: PUSH 06H MOV R6,#08H
14、 ;接收一个字节子程序RLP: SETB SDA SETB SCL NOP ;产生大于15微秒的延时 NOP ;注意这是专门为ZLG7290 NOP ;添加的20微秒延时部分 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP MOV C,SDA MOV A,R2 RLC A MOV R2,A CLR SCL DJNZ R6,RLP ;(出口参数R2) POP 06H RET end 2. ZLG7290B实验:数码显示实验SDA BIT P1.0;7290B的引脚定义SCL BIT P1.1WSLA EQU 070HRSLA EQU 071HDAT
15、 BIT P1.0;TLC549PC引脚定义CLK BIT P1.1CS BIT P1.4CUNT EQU 20H;每次ADC采集数据个数SHIFT EQU 05H;除数(与采集数据个数有关)ADDR EQU 20H;数据缓冲区首地址DISDA EQU 40H;显示缓冲区DISCUNT EQU 08H;显示缓冲区长度 ORG 8000H LJMP 8100H ORG 8100HSTART: MOV SP,#60H CLR P1.7;7290复位 LCALL DELAY SETB P1.7 MOV DISDA+7,#0EEH;a字形 MOV DISDA+6,#7AH;d字形 MOV DISDA+
16、5,#1AH;c字形 MOV DISDA+4,#00H;熄灭 MOV DISDA+3,#12H;“=”LOOP: LCALL TLC549;采集N个ADC数据(20H单元) LCALL ADJUST;数据滤波(屏蔽以观察滤波效果) LCALL BCD_CONT;转换为十进制数 MOV R7,#DISCUNT MOV R0,#DISDA MOV R2,#10H MOV R3,#WSLA LCALL WRNBYT;7290数字显示 LCALL DELAY SJMP LOOPTLC549: PUSH 00H;连续采集16次数据 PUSH 07H;存放于20H-2FH中 MOV R7,#CUNT MO
17、V R0,#ADDRLOOP2: LCALL TLC549_ADC MOV R0,A INC R0 DJNZ R7,LOOP2 POP 07H POP 00H RETADJUST: PUSH 00H;将20H开始的CUNT个数据 PUSH 02H;求平均值 PUSH 03H;结果于A中 PUSH 07H MOV R7,#CUNT MOV R0,#ADDR CLR A MOV R2,ALOOP3: CLR C;累加 ADDC A,R0 JNC LOOP4 INC R2LOOP4: INC R0 DJNZ R7,LOOP3 MOV R3,A MOV A,R2;除以数据个数CUNT MOV R7,#
18、SHIFTLOOP5: CLR C MOV A,R2 RRC A MOV R2,A MOV A,R3 RRC A MOV R3,A DJNZ R7,LOOP5 POP 07H POP 03H POP 02H POP 00H RETTLC549_ADC: PUSH 07H CLR A CLR CLK MOV R7,#08H CLR CSLOOP1: SETB CLK NOP NOP NOP NOP MOV C,DAT RLC A CLR CLK NOP NOP DJNZ R7,LOOP1 SETB CS SETB CLK POP 07H RETBCD_CONT: PUSH 07H PUSH 06
19、H PUSH 05H PUSH 02H MOV B,#64H DIV AB MOV R7,A;R7中得百位数 MOV R2,B;R2中得余数 MOV A,R2 MOV B,#0AH DIV AB MOV R6,A;R6中得十位数 MOV R5,B;R5中得个位数 MOV A,R7 LCALL CF;调拆分子程序(入口A出口R4,R3-字形码) MOV DISDA+2,R3;高位R4无用 MOV A,R6 LCALL CF;调拆分子程序(入口A出口R4,R3-字形码) MOV DISDA+1,R3 MOV A,R5 LCALL CF;调拆分子程序(入口A出口R4,R3-字形码) MOV DISD
20、A+0,R3 POP 02H POP 05H POP 06H POP 07H RETCF: PUSH 02H;将A中的数据拆分为两个独立的BCD码并查表 PUSH DPH PUSH DPL MOV DPTR,#LEDSEG MOV R2,A ANL A,#0FH MOVC A,A+DPTR MOV R3,A MOV A,R2 SWAP A ANL A,#0FH MOVC A,A+DPTR MOV R4,A POP DPL POP DPH POP 02H RETWRNBYT: PUSH PSW PUSH ACCWRADD: MOV A,R3 LCALL STA LCALL WRBYT LCALL
21、 CACK JB F0,WRADD MOV A,R2 LCALL WRBYT LCALL CACK JB F0,WRADDWRDA: MOV A,R0 LCALL WRBYT LCALL CACK JB F0,WRADD INC R0 DJNZ R7,WRDA LCALL STOP POP ACC POP PSW RETCACK: SETB SDA SETB SCL CLR F0 MOV C,SDA JNC CEND SETB F0CEND: CLR SCL RETWRBYT: MOV R6,#08HWLP: RLC A MOV SDA,C SETB SCL NOP NOP NOP NOP C
22、LR SCL DJNZ R6,WLP RETSTA: SETB SDA SETB SCL NOP NOP NOP NOP CLR SDA NOP NOP NOP NOP CLR SCL RETSTOP: CLR SDA SETB SCL NOP NOP NOP NOP SETB SDA NOP NOP NOP NOP RETDELAY: PUSH 00H PUSH 01H MOV R0,#00HDELAY1: MOV R1,#00H DJNZ R1,$ DJNZ R0,DELAY1 POP 01H POP 00H RETLEDSEG: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E4H DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH END
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2