1,控制灯亮灭 5 程序清单 data segment int0 equ 220h int1 equ 221h p8255c equ 21bh p8255a equ 218h p8255b equ 219h tim_c equ 203h timer0 equ 200h timer1 equ 202h kai dw 0 guan dw 0 ji dw 0 data ends stack segment stack db 50 dup(?) top equ length stack stack ends code segment assume cs:code,ss:stack,ds:data start: cli mov ax,0000h mov ds,ax mov ax,offset irq0 add ax,0000h mov si,20h mov [si],ax mov ax,cs mov si,22h mov [si],ax mov ax,0000h mov ds,ax mov ax,offset irq1 add ax,0000h mov si,24h mov [si],ax mov ax,cs mov si,26h mov [si],ax pop ds mov al,13h mov dx,int0 out dx,al mov al,08h mov dx,int1 out dx,al mov al,09h mov dx,int1 out dx,al mov dx,int1 mov al,0fch out dx,al sti %8259初始化 mov dx,p8255c mov al,90h out dx,al %8255初始化 mov dx,tim_c mov al,76h out dx,al mov dx,timer1 mov ax,11900 out dx,al mov al,ah out dx,al %8253初始化 circle: mov dx,int0 mov al,20h out dx,al mov dx,p8255a in al,dx cmp al,00h je chun cmp al,01h je xia cmp al,02h je qiu cmp al,03h je dong dong: jmp don chun: mov ax,1800h mov kai,ax mov ax,2400h mov guan,ax mov dx,tim_c mov al,30h out dx,al kai1: mov ax,0437h mov ji,1800h mov dx,timer0 out dx,al mov al,ah out dx,al guan1: mov ax,0167h mov ji,2400h mov dx,timer0 out dx,al mov al,ah out dx,al jmp circle xia: mov ax,1900h mov kai,ax mov ax,0100h mov guan,ax mov dx,tim_c mov al,30h out dx,al kai2: mov ax,0437h mov ji,1900h mov dx,timer0 out dx,al mov al,ah out dx,al guan2: mov ax,0167h mov ji,0100h mov dx,timer0 out dx,al mov al,ah out dx,al jmp circle qiu: mov ax,1800h mov kai,ax mov ax,2400h mov guan,ax mov dx,tim_c mov al,30h out dx,al kai3: mov ax,0437h mov ji,1800h mov dx,timer0 out dx,al mov al,ah out dx,al guan3: mov ax,0167h mov ji,2400h mov dx,timer0 out dx,al mov al,ah out dx,al jmp circle don: mov ax,1700h mov kai,ax mov ax,2300h mov guan,ax mov dx,tim_c mov al,30h out dx,al kai4: mov ax,0437h mov ji,1900h mov dx,timer0 out dx,al mov al,ah out dx,al guan4: mov ax,0167h mov ji,0100h mov dx,timer0 out dx,al mov al,ah out dx,al jmp circle irq0: %中断0,控制季节 sti jmp circle mov dx,int0 mov al,20h out dx,al iret irq1: %中断1,控制灯亮灭 sti mov ax,ji mov dx,p8255b cmp ax,kai je kaid jmp guand kaid: mov al,0ffh out dx,al jmp next guand: mov al,00h out dx,al next: mov dx,int0 mov al,20h out dx,al iret code ends end start 6 系统调试运行结果说明、分析所出现得问题,设计体会与建议 此实验设计各分程序均可实现预计的功能,但将整个程序连接在一起时,出现了一些问题,导致整个程序未能达到预期效果。主要的问题,问题原因及所设想的解决方法如下: 实验程序计时部分不能够有效地连续运行。原设想程序运行到计数器0时,主程序等待,计时结束时产生中断,中断结束返回主程序继续运行。实验运行时未能实现此功能。主要是程序中未能有效的设置等待功能,若加此项,该功能有望得以实现。 实验中断服务程序1,用来控制灯的亮灭。其中设置一变量用于判断是开灯还是关灯。但程序运行过程中,此设置导致中断程序基本功能未能实现。设若在中断服务程序前进行此比较功能有望使此问题得以解决。 对于中断服务程序0,由于实验过程前述问题的限制,致使此功能未能有效地验证,其中问题有待解决。 7 结论及设计体会 在此程序??设计过程中,对几个芯片的功能有了进一步的了解,能用来实现一些较为简单的功用,但仍有一些不明白之处,需进一步了解。	在设计方面总结以下经验: 写程序时思路一定要明确,程序结构一定要清晰,养成良好的习惯,方便分析问题、查找错误。 在遇到问题时,要先分析程序,通过单步调试,观察,哪个状态和预期结果不同,针对某一点做出判断,而不是在全局中查错。 8 参考文献 张仁杰、秦晓梅编著,《微机原理与接口技术综合实验教程》,大连理工大学出版社,2004.5