微机原理课程设计报告 下载本文

内容发布更新时间 : 2024/5/13 3:29:17星期一 下面是文章的全部内容请认真阅读。

三星NAND型FLASH数据纠错模块设计

六、程序模块划分及各模块程序流程图

?主程序模块:对8254、8259A等芯片进行初始化,设置中断向量,扫描键盘,根据按键值

作相应的处理。流程图参见图

?注意:设置初始时间时要考虑边界,时间的最大值为23:59:59,不能超出此范围。 ?8254中断服务程序:刷新一遍数码管,计时时间到一秒,修改当前时间,整点报时。流程

图参见图

页脚内容

5

三星NAND型FLASH数据纠错模块设计

七、实验中遇到的问题,解决办法及实验心得体会

这次课程设计有一定的难度,期间遇到了种种困难,卡住了很久,比如在做显示的时候,先要全熄数码管,然后扫描按键,还要很好地控制延时去抖动,这是件挺繁琐的事,另外,按键之后需要给按键一个扫描码,接着转化成字形码,能够识别并在数码管上显示,也花了很多时间,再比如在设置时间的时候,对于延时时间的拿捏也很难,需要在buf缓冲区存放值,修改时,让修改位熄灭,其余位为0,若超出规定位数,则不修改,显示原值。老师在我完成规定任务后也设下了一个小挑战,将8255的一根接线调换了位置,要求仍正确显示,最后我想出的解决的方法是段位码改共阳极,键盘扫描里修改相应端口,开头输入部分修改8255初始化控制字即可。

这次课程设计对于这门课的认知的提升很有帮助,本来只是理解了理论,对于亲自动手实现还是感到茫然,甚至不相信自己能完成,但是在一步一步实现各个功能模块后,发现点连成了线,线动成面,知识点是能够串联起来的,只要自己愿意动手,愿意思考,没有什么是做不成的,当然期间必然会遇到各种各样的问题,只要肯向老师或同学请教,他们也一定会给你的思维一些启发。这次的课程设计虽然只是做了一个看似简单的电子钟,但是它几乎涵盖了我们这学期所学的大部分内容,完成这项课程设计必然要深入理解课本上的知识,这就起到了查漏补缺,融会贯通的作用,我想这对日后学习其他硬件方面的知识都是很有益的,也很大程度上激发了我对硬件方面课程的更大热情。

八、源程序清单

页脚内容

6

三星NAND型FLASH数据纠错模块设计

.MODEL TINY

EQU 260H EQU

;计数器0的端口地址

;计数器1的端口地址

;计数器2的端口地址 ;控制端口的端口地址

C0_8253 C1_8253

261H

C2_8253 EQU CTRL_8253 EQU PA_8255 PB_8255 PC_8255

262H 263H

EQU 270H ;端口A的地址 EQU 271H EQU 272H

;端口B的地址 ;端口C的地址 ;控制端口的端口地址

CTRL_8255 EQU 273H

EVEN_8259 EQU 250H ODD_8259

.STACK 100 .DATA

EQU 251H

BUFFER DB 0,0,0,0,0,0 ;数码上显示的内容 KEY DB 0 FLAG BUF

DB 1 DB 0,?

SEG_TAB DB 03FH, 06H,05BH,04FH, 66H, 6DH, 7DH,07H,7FH,6FH;0~9的段码表 SEG_TAB2

.CODE

DB 0BFH, 86H,0DBH,0CFH, 0E6H, 0EDH, 0FDH,87H,0FFH,0EFH

START: MOV AX,@DATA

MOV DS,AX

MOV ES,AX

页脚内容

7

三星NAND型FLASH数据纠错模块设计

NOP

MOV AL,30H

;00110000B,计数器0,方式0,二进制计数

MOV DX,CTRL_8253 OUT DX,AL

MOV DX,C0_8253 MOV AL,0DH

;Fout=1/25ms=40Hz,Fclk=31250Hz,N=Fclk/Fout=31250Hz/40Hz=781,N=781

OUT DX,AL MOV AL,03H OUT DX,AL

MOV DX,CTRL_8253 MOV AL,76H OUT DX,AL MOV DX,C1_8253 MOV AL,12H

;31250Hz

;01110110B,计数器1,方式3,二进制计数

OUT DX,AL MOV AL,7AH

OUT DX,AL

CALL SET_VECTOR ;设置中断向量 CALL INIT_8259

MOV AL,11111110B ;开放IR0请求的屏蔽位

页脚内容

8

三星NAND型FLASH数据纠错模块设计

MOV DX,ODD_8259

OUT DX,AL

L1: STI

MOV DX,CTRL_8255

;8255初始化

MOV AL,80H ;10000000B,端口A方式0输出,端口B方式0输

出,C输出

LP: 入,C输出

L2: CALL DIR

OUT DX,AL

LEA SI,BUFFER MOV CX,8

CALL DIR

LOOP LP

MOV DX,CTRL_8255

MOV AL,82H ;10000010B,OUT DX,AL

KEYSCAN

JMP L1 JMP $

PROC NEAR PUSH AX PUSH BX PUSH DX

MOV AL,BUFFER[0]

;8255初始化

端口A方式0输出,端口B方式0输

页脚内容

9