《安徽工业大学微机原理与接口技术实验报告下.doc》由会员分享,可在线阅读,更多相关《安徽工业大学微机原理与接口技术实验报告下.doc(13页珍藏版)》请在课桌文档上搜索。
1、-微机原理与接口技术实验报告下实验三 8253、8255、8259综合实验18253计数器实验要求:计数器1方式0计数,计满3个数产生中断,中断5次后完毕。实验线路见图6-6:图6-6 8253计数器实验电路图实验程序:INTPORT1 EQU 0FF80H ;8259A的偶地址入口INTPORT2 EQU 0FF81H ;8259A的偶地址入口INTQ3 EQU INTREEUP3;INTREEUP3地址TCONTR0 EQU 0043H ;8253端口地址TCON1 EQU 0041H ;8253端口地址PA EQU 0FF20H ;字位口PB EQU 0FF21H ;字形口PC EQU
2、0FF22H ;键入口code segment assume cs:code ORG 12D0H ;源地址START: JMP START0 ;跳转到START0BUF DB ?,?,?,?,?,? ;六字节缓冲区intt db ? ;一字节的缓冲区data1 db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h db 0a1h,86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH;七段码定义START0:CLD;置方向位 CALL BUF1 ;调用子程序BUF1CALL WRINT
3、VER ;WRITE INTRRUPTMOV AL,13H ;写ICW1,边沿触发,单片,需要ICW4MOV D*,INTPORT1OUT D*,ALMOV AL,08H;ICW2,中断类型号高5位MOV D*,INTPORT2OUT D*,ALMOV AL,09H;写ICW4,BUF位在缓冲方式下工作,8086/8088系统OUT D*,ALMOV AL,0F7HOUT D*,ALMOV intt,01H;TIME=1MOV D*,TCONTR0;指向控制口MOV AL,51H ;8253控制字,通道1,方式0,只读/写低字节,BCD码计数OUT D*,AL;送控制字MOV D*,TCON1
4、;指向控制口MOV AL,03;计数值低字节OUT D*,AL;送控制字MOV D*,0FF23H;指向8255A控制口MOV AL,80;A口方式0,输出,C口上半部输出,B口方式,输出,C口下半部输出OUT D*,AL;送控制字STI; 开中断WATING: CALL DISP ;DISP 825359JMP WATINGWRINTVER:MOV A*,0H MOV ES,A* MOV DI,002CH;目的地址 LEA A*,INTQ3;INTQ3的偏移地址 STOSW;存字 MOV A*,0000h;清零 STOSW RET;中断返回INTREEUP3: push a*;入栈 push
5、 b* push c* push d* MOV D*,TCON1;指向控制口MOV AL,03;计数值低字节OUT D*,ALMOV AL,INTT CALL CONVERS MOV B*,OFFSET BUF MOV AL,10H MOV C*,05H;置循环数INTRE0: MOV B*,AL;将Al中的值存在B*中 INC B*;B*加1 LOOP INTRE0;循环 ADD INTT,01H;循环数是五次 CMP INTT,06H JNA INTRE2 CALL BUF2 ;DISP:goodINTRE1: CALL DISP JMP INTRE1CONVERS: AND AL,0FH
6、;显示次数 MOV B*,offset buf MOV B*+5,AL RETINTRE2: MOV AL,20H MOV D*,INTPORT1 OUT D*,AL pop d* pop c* pop b*pop a* IRET;软中断返回DISP: MOV AL,0FFH ;00HMOV D*,PA;清零OUT D*,ALMOV CL,0DFH ;20H MOV B*,OFFSET BUFDIS1: MOV D*,PC OUT D*,AL MOV AL,B* MOV AH,00HPUSH B*MOV B*,OFFSET DATA1 ADD B*,A* MOV AL,B*POP B*MOV
7、D*,PBOUT D*,ALMOV AL,CLMOV D*,PAOUT D*,ALPUSH C*DIS2:MOV C*,00A0H LOOP $ POP C*CMP CL,0FEH ;01HJZ L*1INC B*ROR CL,1 ;SHR CL,1JMP DIS1L*1: MOV AL,0FFHMOV D*,PBOUT D*,ALRETBUF1: MOV BUF,08H MOV BUF+1,02H MOV BUF+2,05HMOV BUF+3,03H MOV BUF+4,05H MOV BUF+5,09H RETBUF2: MOV BUF,09H MOV BUF+1,00H MOV BUF+
8、2,00H MOV BUF+3,0dH MOV BUF+4,10H MOV BUF+5,10H RETCODE ENDSEND START思考:如果计数器0方式0计数,计满5个数产生中断,中断3次后完毕。硬件软件如何修改?硬件修改:将连接在CLK1,GATE1,OUT1的连线改接到CLK0,GATE0,OUT0上。程序修改:将程序对应局部做如下修改1、TCON1 EQU 0041H改为TCON1 EQU 0040H 2、将8253控制字由MOV AL,51H改为 MOV AL,11H 3、计数值低字节将MOV AL,02改为MOV AL,04 4、将CMP INTT,06H改为CMP INTT
9、,04H;2、8253定时器实验要求:用8253定时器1通道定时,每隔1秒使PA口的指示灯的状态右移一位。主程序反复游走显示8253A。8253定时器实验线路见图6-7:图6-7 8253计数器实验电路图实验程序:CODE SEGMENT ;ASSUME CS:CODEINTPORT1 EQU0FF80H;8259A的偶地址入口INTPORT2 EQU0FF81H;8259A的奇地址入口INTQ3 EQUINTREEUP3TCONTR0 EQU 0043H;8253端口地址TCON1 EQU0041H;8253端口地址IOCONPT EQU0FF2BH;8255A的端口地址IOBPT EQU0
10、FF29H;8255A的端口地址IOAPT EQU 0FF28H;8255A的端口地址PA EQU 0FF20H ;字位口PB EQU 0FF21H ;字形口PC EQU 0FF22H ;键入口 ORG 12D0H;源地址START: JMP START0BUF DB ?,?,?,?,?,?;6字节缓冲区intt db ? ;1字节缓冲区WEIKONG DB ? ;1字节缓冲区data1 db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h db 0a1h,86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,
11、0f3h,0bfh,8FHSTART0:CLD;置方向位 CALL BUF1CALL WRINTVER ;WRITE INTRRUPTMOV AL,13H;写ICW1,边沿触发,单片,需要ICW4MOV D*,INTPORT1OUT D*,ALMOV AL,08H;ICW2,中断类型号高5位MOV D*,INTPORT2OUT D*,ALMOV AL,09H;写ICW4,BUF位在缓冲方式下工作,8086/8088系统OUT D*,ALMOV AL,0F7HOUT D*,ALMOV intt,50 ;软件计数501秒=20ms*50MOV D*,TCONTR0MOV AL,74H;通道1,先读
12、/写低字节,再读/写高字节,方式2,二进制数OUT D*,ALMOV D*,TCON1 ;计数器1定时20msMOV A*,40000OUT D*,AL MOV AL,AH;读入计数值的高字节 OUT D*,ALMOV D*,0FF2BHMOV AL,82H;A口方式0,输出,C口上半部输出,B口方式,输入,C口下半部输出OUT D*,AL MOV WEIKONG, 0FEH ;初始PA0对应位亮 MOV AL, WEIKONG MOV D*, 0FF29H OUT D*,ALSTI ;开中断WATING: CALL DISP ;DISP 8253-AJMP WATINGWRINTVER:MO
13、V A*,0H MOV ES,A* MOV DI,002CH;目的地址 LEA A*,INTQ3;INTQ3的偏移地址 STOSW MOV A*,0000h STOSW RETINTREEUP3: DEC INTT;INTT减1 JNZ INTRE2 MOV INTT, 50 ROL WEIKONG, 1 MOV D*, IOAPT MOV AL, WEIKONG OUT D*,ALINTRE2: MOV AL,20H MOV D*,INTPORT1 OUT D*,AL IRET;软中断返回DISP: MOV AL,0FFH ;00HMOV D*,PAOUT D*,ALMOV CL,0DFH
14、;20H MOV B*,OFFSET BUFDIS1: MOV D*,PC OUT D*,AL MOV AL,B* MOV AH,00HPUSH B*MOV B*,OFFSET DATA1 ADD B*,A* MOV AL,B*POP B*MOV D*,PBOUT D*,ALMOV AL,CLMOV D*,PAOUT D*,ALPUSH C*DIS2:MOV C*,0000H LOOP $ POP C*CMP CL,0FEH ;01HJZ L*1;相等转L*1INC B*ROR CL,1 ;循环右移一位,指示灯又移变亮JMP DIS1L*1: MOV AL,0FFH;指示灯全灭MOV D*,P
15、BOUT D*,ALRETBUF1: MOV BUF,08H MOV BUF+1,02H MOV BUF+2,05H MOV BUF+3,03H MOV BUF+4,17H MOV BUF+5,0AH RETCODE ENDS END START思考:硬件修改:将连接在CLK1,GATE1,OUT1的连线改接到CLK0,GATE0,OUT0上。接在PB口的线与接在PA口的线互换。软件修改:按照下面对相应局部修改1、TCON1 EQU 0041H改为TCON1 EQU 0040H2、将MOV AL,74H改为MOV AL,34H;3、将MOV AL,82H改为MOV AL,90H4、将MOV W
16、EIKONG, 0FEH 改为MOV WEIKONG, 07FH5、将MOV INTT, 50改为MOV INTT, 1006、将MOV AL, WEIKONG改为MOV AL, WEIKONG 7、将ROL WEIKONG, 1改为ROR WEIKONG, 18、将ROR CL,1 改为ROL CL,19、将MOV BUF+5,0AH改为MOV BUF+5,0BH五、本次实验总结实验过程中把学过的计算机编译原理以及操作系统的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。实验五 A/D转换实验一、实验目的了解模/数转换根本原理,掌握ADC0809的使用方法;
17、掌握定时数据采集程序的编制方法。二、实验容1、A/D转换实验利用实验系统上电位器提供的可调电压作为0809模拟信号的输入,编制程序,将模拟量转换为数字量,通过数码管显示出来。(1) 实验接线图ADC0809接线见图6-9图6-9 ADC0809接线图2编程指南ADC0809的START端为A/D转换启动信号,ALE端为通道选择地址的锁存信号,实验电路中将其相连,以便同时锁存通道地址并开场A/D采样转换,其输入控制信号为CS和WR,故启动A/D转换只须如下两条指令:MOV D*,ADPORT;ADC0809端口地址OUT D*,AL;发CS和WR信号并送通道地址用延时方式等待A/D转换结果,使用
18、下述指令读取A/D转换结果。MOV D*,ADPORT ;ADC0809端口地址 INAL,D*循环不断采样A/D转换的结果,边采样边显示A/D转换后的数字量。3实验程序框图A/D转换流程见图6-10图6-10 A/D转换流程4实验步骤将0809 CS4插孔连到译码输出FF80H插孔。将通道0模拟量输入端IN0连电位器W1的中心插头AOUT1(05V)插孔,8MHZT。运行实验程序,系统上显示“0809 *。“*表示输入模拟量转换后的数字量。调节电位器Wl, 显示器上会不断显示新的转换结果。模拟量和数字量对应关系的典型值为:0V00H+2.5V80H+5VFFH按RST键退出。5实验程序清单.
19、 z.-CODE SEGMENT ;ASSUME CS:CODEADPORT EQU 0FF80h ;8259A偶地址入口PA EQU 0FF20H ;字位口PB EQU 0FF21H ;字形口PC EQU 0FF22H ;键入口 ORG 1000H ;源地址START: JMP START0 ;跳转到START0BUF DB ?,?,?,?,?,? ;定义6字节缓冲区data1:db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h ;定义七段码 db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8c
20、h,0f3h,0bfh,8FHSTART0: CALL BUF1 ;调用BUF1子程序ADCON: MOV A*,00 MOV D*,ADPORT ;ADC0809端口地址 OUT D*,AL ;发CS和WR信号并送通道地址MOV C*,0500H ;置循环数;DELAY: LOOP DELAY ;空循环,延时 MOV D*,ADPORT ;ADC0809端口地址 IN AL,D* CALL CONVERS;调用子程序CONVERS CALL DISP ;调用显示子程序DISP JMP ADCON ;跳转到ADCONCONVERS: MOV AH,AL;将 a*中的低字节赋给高字节 AND A
21、L,0FH ;保存al中的低四位 MOV B*,OFFSET BUF;buf的偏移地址 MOV B*+5,AL;将al中的值给B*+5 MOV AL,AH ;取al中的高四位 AND AL,0F0H MOV CL,04H ;值移位数 SHR AL,CL;右移四位 MOV B*+4,Al ;将Al中的值给B*+4 RET;返回DISP: MOV AL,0FFH ;PA端口全置1,使其灯无显示 MOV D*,PAOUT D*,ALMOV CL,0DFH ;将0DFH给CL MOV B*,OFFSET BUF;取BUF的偏移地址给B*DIS1: MOV AL,B*;将B*中的容取出给Al MOV A
22、H,00HPUSH B*;B*入栈MOV B*,OFFSET DATA1;取DATA1的偏移地址给B* ADD B*,A*;B*与A*相加 MOV AL,BPB*;将B*的容取到AL中POP B*;B*出栈MOV D*,PB;Al中得容在PB端口输出OUT D*,ALMOV AL,CL;显示MOV D*,PAOUT D*,ALPUSH C*;C*入栈DIS2: MOV C*,00A0H;循环00A0H次,延时 LOOP $ POP C*;C*出栈CMP CL,0FEH;Cl 与0FEH比拟JZ L*1 ;Cl与00A0H相等,则程序跳转到L*INC B*;B*自加ROR CL,1;Cl循环左移
23、1位JMP DIS1;循环显示L*1: MOV AL,0FFH;PB端口清零MOV D*,PBOUT D*,ALRET;中断返回BUF1: MOV BUF,00H MOV BUF+1,08H MOV BUF+2,00H MOV BUF+3,09H MOV BUF+4,00H MOV BUF+5,00H RETCODE ENDSEND START. z.-2、数据采集实验要求:用8253定时器1通道定时,每隔半秒使从ADC0809的0通道IN0采集一个数据,假设模拟电压在0-2V围0-102,则使LED显示器L7-L4亮;假设模拟电压大于2V,小于3V,则使L5-L2亮;假设模拟电压大于等于3V
24、,则使LED显示器L3-L0亮。(主程序重复所采集的数据)1实验接线图数据采集实验系统接线图见图6-11图6-11 数据采集系统接线图2程序流程图主程序流程见图6-12图6-12 主程序流程图中断效劳程序流程见图6-13图6-13 中断效劳程序流程3实验程序清单. z.-CODE SEGMENT ;ASSUME CS:CODEINTPORT1 EQU0FF80H ;8259A偶地址入口INTPORT2 EQU0FF81H ;8259A奇地址入口INTQ3 EQUINTREEUP3 ;中断源IR3地址TCONTR0 EQU 0043H;8253端口地址TCON1 EQU0041H;8253端口地
25、址IOCONPT EQU0FF2BHIOBPT EQU0FF29HIOAPT EQU 0FF28HPA EQU 0FF20H ;字位口PB EQU 0FF21H ;字形口PC EQU 0FF22H ;键入口ADPORT EQU 0FE00H ;ADC0809端口地址ORG 12D0H;源地址START: JMP START0;跳转到START0BUF DB ?,?,?,?,?,?;定义6字节的缓冲区intt db ?RES DB ?data1 db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h db 0a1h,86h,8eh
26、,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH;定义七段码START0: CLD;置方向位 CALL BUF1;调用BUF1CALL WRINTVER ;调用 WRINTVER MOV AL,13H;初始化ICW1,单片,边沿触发,设置ICW4MOV D*,INTPORT1OUT D*,ALMOV AL,08H;写ICW2,允许IR3中断MOV D*,INTPORT2OUT D*,ALMOV AL,09H;写ICW4,8259A在缓冲方式下工作,8086/8088系统OUT D*,ALMOV AL,0F7H;写OCW1,允许中断源IR3,其余均被屏蔽OUT
27、D*,ALMOV intt,25 MOV D*,TCONTR0MOV AL,74H;8253工作通道1,先读(写)低字节,再读写高字节,方式4,二进制计数OUT D*,ALMOV D*,TCON1 MOV A*,40000;8253初始值40000OUT D*,AL MOV AL,AH;写初值的高字节 OUT D*,ALMOV D*,0FF2BH;8255初始化,PA口方式0,输出MOV AL,82HOUT D*,AL STI;开中断WATING: CALL DISP;调用显示程序JMP WATING;循环,延时WRINTVER:MOV A*,0HMOV ES,A*;ES指向A* MOV DI
28、,002CH;置DI初值为CH LEA A*,INTQ3;取INTQ3的初值 STOSW MOV A*,0000h STOSW RET;中断返回INTREEUP3: DEC INTT;INTT自减1 JNZ INTRE2;不相等跳转到INTRE2 MOV INTT, 25ADCON: MOV A*,00;设定输入电压值 MOV D*,ADPORT OUT D*,AL MOV C*,0500H;循环值,延时DELAY: LOOP DELAY MOV D*,ADPORT;读电压值 IN AL,D* MOV RES,AL;将Al中值存入到RES中 CALL CONVERS;调用CONVERSMOV
29、AL,RES CMP AL, 66H;Al与66H比拟 JA NE*T1;假设大于,跳转到NE*T1 MOV AL, 0F0H MOV D*, IOAPT;输出 OUT D*,AL JMP INTRE2;跳转到INTRE2NE*T1: CMP AL, 99H;AL与99H比拟 JA NE*T2;跳转到NE*T2灯L7-L10亮 MOV AL, 0C3H MOV D*, IOAPT OUT D*,AL JMP INTRE2;跳转到INTRE2NE*T2: MOV AL, 0FH MOV D*, IOAPT OUT D*,ALINTRE2: MOV AL,20H;中断MOV D*,INTPORT1
30、 OUT D*,AL IRET;中断返回CONVERS: MOV AH, AL;取Al中得低四位 AND AL, 0FH MOV B*, OFFSET BUF;取BUF的偏移地址给B* MOV B*+5, AL;将Al中得值给B*+5 MOV AL,AH;取Al中的高四位 AND AL, 0F0H MOV CL, 04H SHR AL, CL;Al中的容右移4位 MOV B*+4, AL;将Al中的容给B*+4 RET;中断返回DISP: MOV AL, 0FFH ;PA端口清零MOV D*, PAOUT D*, ALMOV CL, 0DFH ;显示MOV B*, OFFSET BUF;取BU
31、F的偏移地址DIS1: MOV D*, PC;将Al中的容输出到PC端口 OUT D*, AL MOV AL, B* MOV AH, 00HPUSH B*;B*入栈MOV B*, OFFSET DATA1;取DATA得偏移地址 ADD B*, A* MOV AL, B*;将对应的七段码给AlPOP B*;B*出栈MOV D*, PB;输出到PB口OUT D*, ALMOV AL, CL显示MOV D*, PAOUT D*, ALPUSH C*;C*出栈DIS2: MOV C*, 00A0H;空循环,延时 LOOP $ POP C*CMPCL,0FEH JZ L*1INC B*ROR CL, 1
32、 JMP DIS1L*1: MOV AL, 0FFH;PB口清零MOV D*, PBOUT D*, ALRET;中断返回BUF1: MOV BUF, 00H MOV BUF+1, 08H MOV BUF+2, 00H MOV BUF+3 ,09H MOV BUF+4, 00H MOV BUF+5, 00H RETCODE ENDS END START. z.-思考题:如果改用DAC0832的输出比方:产生近似正弦输出作为ADC0809的输入,并将采集值在数码管上显示出来。硬件和软件应如何修改?解决方案:1.硬件修改:将DAC0832采用单缓冲方式工作,Vout接ADC0809的IN0。2.程序
33、修改:给DAC0832设定地址,根据连线可以设定为。设为DAC1,DAC2,在程序头部声明.设置正弦数据区:BUFSIN db 128,88,53,24,6,06,24,53,88,128,168,203,232, db 250,255,232,203,168最后再在主程序后添加如下程序:. z.- GENERATESINWAVE: Mov si,offset buf MOV D*,DAC1 Mov c*,20 OUTPUT: MOV AL,SI OUT D*,AL INC SI LOOP OUTPUT JMP GENERATESINWAVE总结:1. 实验过程中在芯片编程方面,特别是在初始化方面是我们最大的困难,或许是我的汇编语言学得不够好,我只能借助参考资料,查每一条指令的作用与功能,这样一来又稳固了我的对汇编语言的了解,而且在设计中,把死板的课本知识变得生动有趣,激发了学习的积极性。把学过的计算机编译原理的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。2. 加深了各个专业学科间的联系。3. 最后还是感谢教师同学们的帮助。4. 祝教师身体安康,天天开心。. z.
链接地址:https://www.desk33.com/p-9986.html