1、微机原理与接口技术倒计电子时钟课程设计报告微机原理与接口技术课程设计报告倒计电子时钟倒计电子时钟课程设计报告一、设计题目:倒计电子时钟二、设计目的:1、掌握多位计数器相连的设计方法。2、掌握十进制、六十进制、二十四进制计数器的设计方法。3、进一步掌握定时器的使用和编程方法。 4、进一步掌握中断处理程序的编程方法。 5、进一步掌握数码显示电路的驱动方法。三、设计要求:1用时、分、秒计数显示功能,以24小时开始倒计时。格式如下: 24: 60: 60 由左向右分别为:时、分、秒2具有重新调节开始时间为12:60:60,暂停,继续的功能。四、设计环境: 伟福Lab6000通用微控制器实验系统实验仪以
2、及伟福6000仿真模拟软件。五、设计说明:定时器每100us中断一次,在中断服务程序中,对中断次数进行计数,100us计数10000次就是1秒。然后再对秒计数得到分和小时值,并送入显示缓冲区。六、设计连接电路图:1、电路连接图描述:本实验利用8253做定时器,用定时器输出的脉冲控制8259产生中断 在8259中断处理程序中,对时、分、秒进行计数,在等待中断的循 环中用LED显示时间。 8253用定时器/计数器1,8253片选接CS4,地址为0C000H。8253时钟源CLK1接分频电路的F/64输出。分频器的Fin接4MHz时钟。8253的 GATE1接VCC。 8259中断INT0接8253
3、的OUT1,片选接CS5,地址为0D000H。 显示电路的KEY/LED CS 接CS0,地址为08000H。2、电路连接图如下:七、设计程序框架图:八、设计原理和步骤:1设计原理:(1)、数字电路设计理论(2)、时钟倒计数:秒-60进制BCD码计数;分-60进制BCD码计数;时-24进制BCD码计数;开始时计数器显示的是初始化的时钟时间:24:60:60。时钟根据电路连接图时频的不同接法,其运行时间的快慢也会有所不同。按不同的按钮其执行的功能也有所不同,整个计数器具有重新运行自己所设置的时间开始倒计时(这里的按钮键是:9)、暂停(按钮是:7)、继续(按钮是:8)的功能。并且功能键的位置也可根
4、据自己的习惯在代码中进行相应的设置,如:设重新运行设置的时间开始倒计时(按钮键是:4)、暂停(按钮是:5)、继续(按钮是:6)。2.设计步骤:(1)、在有masm软件的计算机上进行设计编码。(2)、对masm上的代码进行调试并进行修改。运行。(3)、把已在masm可运行的程序移植到EDA实验室的计算机wav6000软件上。(4)、对程序进行编译,修改,直至编译通过。并对选择的环境进行相应的设置。编译通过截图如下:(5)、根据电路连接图的描述和对应的连接图在试验箱中进行电路图的连接。(6)、把计算机wav6000软件与试验箱相连接进行通信,可把程序代码导入8086cpu芯片中。(7)、运行程序,
5、在试验箱中按根据已设的按钮,观察其对应的显示信息。看其是否有按预设的功能显示,并记录。(8)、对电路进行不同的连接,并在代码进行相应的修改,看其显示的信息是否有发生相应的变化。(9)、完成设计后,整理实验仪器。书写设计报告。九:设计结论和心得:1 结论:实验达到了实验的要求和目的。(1)、按按钮7可暂停,按按钮8可使已暂停的计数继续倒计时,按按钮9可使正在运行的倒计时从12:60:60开始进行倒计时。(2)、对按钮的位置修改也可达到预期的效果,对倒计时的时频进行修改,也可加快或减慢其倒计时的速度。(3)、对电路图的接口进行修改和相应的代码修改也可达到相同的显示结果。2心得体会: 通过这次倒计电
6、子时钟的设计和实现,掌握了六十进制和二十四进制数字电路的设计,同时复习了wav6000这个软件和试验箱的连接应用。由于汇编原理的有些知识掌握不牢固,实验过程中遇到了很多困难,但在老师和同学的帮助下,顺利完成了此次的设计,同时也借此机会复习了汇编原理的知识,提高了自己动手能力。希望以后能多做一些这样的设来验证已学过知识,达到学以致用的效果。十、附加代码:CONTROL equ 0a003hCOUNT0 equ 0a000hCOUNT1 equ 0a001hCOUNT2 equ 0a002hmd8255 equ 82h ; 8255 工作方式PA8255 equ 8001h ; 8255 PA口输
7、出地址CTL8255 equ 8003h ; 8255 控制口地址OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口IN_KEY equ 08001h ; 键盘读入口ICW1 equ 00010011b ; 单片8259, 上升沿中断, 要写ICW4ICW2 equ 00100000b ; 中断号为20HICW4 equ 00000001b ; 工作在8086/88 方式OCW1 equ 11111110b ; 只响应INT0 中断CS8259A equ 0d000h ; 8259地址CS8259B equ 0d001hdata segmentCN
8、T db 0LEDBuf db 6 dup(?) ; 显示缓冲Num db 1 dup(?) ; 显示的数据DelayT db 1 dup(?)Hour db 0Minute db 0Second db 0LEDMAP: ; 八段管显示码(使用软件译码的方式显示LED数码管) db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hKeyTable: ; 键码定义 db 16h, 15h, 14h, 0ffh db 13h, 12h, 11h, 10h db 0dh, 0ch, 0bh
9、, 0ah db 0eh, 03h, 06h, 09h db 0fh, 02h, 05h, 08h db 00h, 01h, 04h, 07hdata endscode segment assume cs:code, ds: dataDelay proc near push ax ; 延时子程序 push cx mov al, 0 mov cx,ax loop $ pop cx pop ax retDelay endpDisplayLED proc near mov bx, offset LEDBuf mov cl, 6 ; 共6个八段管 mov ah, 00100000b ; 从左边开始显示
10、DLoop: mov dx, OUTBIT mov al, 0 out dx,al ; 关所有八段管 mov al, bx mov dx, OUTSEG out dx,al mov dx, OUTBIT mov al, ah out dx, al ; 显示一位八段管 push ax mov ah, 1 call Delay pop ax shr ah, 1 inc bx dec cl jnz DLoop mov dx, OUTBIT mov al, 0 out dx,al ; 关所有八段管 retDisplayLED endpIEnter proc near push ax push dx d
11、ec Second ;秒数减少1 mov al, Second cmp al, 0 ;比较,若秒数小于0则结束本次中断,若等于0则秒数为60,分数减1 jne Exit mov Second, 0 dec Minute mov al, Minute cmp al, 0 jne Exit mov Minute, 0 dec Hour mov al, Hour cmp al, 0 jne Exit mov Hour, 0Exit: mov dx, CS8259A mov al, 20h ; 中断服务程序结束指令 out dx, al pop dx pop ax iretIEnter endpIIn
12、it proc ;8259A初始化子程序 mov dx, CS8259A mov al, ICW1 out dx, al ;写控制字ICW1 mov dx, CS8259B mov al, ICW2 out dx, al ;写控制字ICW2 mov al, ICW4 out dx, al ;写控制字ICW4 mov al, OCW1 out dx, al ;写控制字OCW1 retIInit endp ;初始化结束 TestKey proc near mov dx, OUTBIT mov al, 0 out dx, al ; 输出线置为0 mov dx, IN_KEY in al, dx ;
13、读入键状态 not al and al, 0fh ; 高四位不用 retTestKey endpGetKey proc near mov ch, 00100000b mov cl, 6KLoop: mov dx, OUTBIT mov al, ch ; 找出键所在列 not al out dx, al shr ch, 1 mov dx, IN_KEY in al, dx not al and al, 0fh jne Goon_ ; 该列有键入 dec cl jnz KLoop mov cl, 0ffh ; 没有键按下, 返回 0ffh jmp Exit1Goon_: dec cl shl cl
14、, 2 ; 键值 = 列 X 4 + 行 mov ch, 4LoopC: test al, 1 jnz Exit1 shr al, 1 inc cl dec ch jnz LoopCExit1: mov dx, OUTBIT mov al, 0 out dx, al mov ch, 0 mov bx, offset KeyTable add bx, cx mov al, bx ; 取出键码 mov bl, alWaitRelease: mov dx, OUTBIT mov al, 0 out dx, al ; 等键释放 mov ah, 10 call Delay call TestKey jn
15、e WaitRelease mov al, bl retGetKey endpstart proc near ;主程序 mov ax, data mov ds, ax mov Hour, 24 ;分别给时,分,秒赋初值 mov Minute, 60 mov Second, 60 cli ;关中断 mov ax, 0 mov ds, ax ;数据段段地址为0 mov al, 76h; 01110110B ;初始化8253 计数器1,16位,方式3,二进制 mov dx, CONTROL out dx, al mov ax, 62500 mov dx, COUNT1 out dx, al ; 计数
16、器低字节 mov al, ah out dx, al ; 计数器高字节 mov al, MD8255 mov dx, CTL8255 out dx, al mov bx, 4*ICW2 ; 中断号 mov ax, code ;获取中断向量段地址cs值 shl ax, 4 ; x 16 add ax, offset IEnter ; 中断入口地址(段地址为0) mov bx, ax mov ax, 0 inc bx inc bx mov bx, ax ; 将cs:ip的地址附给中断向量bx+2:bx call IInit ;初始化8259 mov ax, data mov ds, ax mov
17、CNT, 0 ; 计数值初始为0 mov al, CNT mov dx, PA8255 out dx, al stiLP: call TestKey ;判断是否简易键盘是否有键入,有则转至;set,无则往下执行 jnz Set ; 等待中断,并计数。 mov al, Hour ;把时钟时数为10位和个位 mov ah, 0 mov cl, 10 div cl mov ch, ah mov ah, 0 ;把时数的十位数送到数据缓冲区 mov bx, offset LEDMAP add bx, ax mov al, bx mov LEDBuf, al mov bx, offset LEDMAP ;
18、把时数的个位数送到数据缓冲区 mov al, ch mov ah, 0 add bx, ax mov al, bx or al, 80h mov LEDBuf+1, al mov al, Minute mov ah, 0 mov cl, 10 div cl mov ch, ah mov ah, 0 mov bx, offset LEDMAP add bx, ax mov al, bx mov LEDBuf+2, al mov bx, offset LEDMAP mov al, ch mov ah, 0 add bx, ax mov al, bx or al, 80h mov LEDBuf+3,
19、 al mov al, Second mov ah, 0 mov cl, 10 div cl mov ch, ah mov ah, 0 mov bx, offset LEDMAP add bx, ax mov al, bx mov LEDBuf+4, al mov bx, offset LEDMAP mov al, ch mov ah, 0 add bx, ax mov al, bx or al, 80h mov LEDBuf+5, al call DisplayLED ;调用LED数码管数据显示子程序,使上面的数值显示出来 jmp LPSet: call GetKey cmp al,07h jz pause cmp al,08h jz contiue cmp al,09h jz Reset jmp LPpause: CLI jmp LPcontiue:sti jmp LPReset: cli mov Hour,12 MOV Minute,0 MOV Second,0 sti jmp LPstart endpcode ends end start;按7暂停,8继续,9复位
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1