本来打算回家来做点事的,至少把最近的实验做出来一两个(最近的实验超多,有:JSP的,微机的,嵌入式的,数据库的,网络管理的,真的五座大山压下来),但今天7点半起来,9点多又睡过,睡到中午起床吃饭。下午是看了下书,但4点钟又睡,睡到5点多,今天算是把汇编浏览了一遍,但好像也没懂多少。其实我想学好汇编的,想学绝影,他就是汇编高手。我也想成为个程序员。今晚在写微机的实验的代码,其实下个星期实验室应该不会开了,但我仍然想做好这个实验,是关于交通灯的,要利用8255,8253实现发光二极管的定时显示,倒数的时间要用七段数码管显示(30-00)。其实我想了很久还没做出来,原因是:自己基础比较差。以前不够努力,基本功不扎实。现在也不算晚,现在来学虽然有点紧张,但勤能补拙,我相信我可以的!
微机的代码:(未完成)(以备将来自己有个印象)
data segment
ioport equ 0c400h-0280h
io8255_a equ ioport+288h
io8255_c equ ioport+28ah
io8255_con equ ioport+28bh
io8253_0 equ ioport+280h
io8253_1 equ ioport+281h
io8253_con equ ioport+283h
portc1 db 24h,44h,04h,44h,04h,44h,04h ;六个灯可能
db 81h,82h,80h,82h,80h,82h,80h ;的状态数据
db 0ffh ;结束标志
;44h and 82h are yellow light
num db 0,0
led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码
bz dw ?
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov dx,io8255_con
mov al,80h ;1000 0000,设置8255 C口,A口输出
out dx,al
re_on:
mov dx,io8255_c
mov bx,0
on:
mov al,portc1[bx]
cmp al,0ffh
jz re_on
out dx,al ;light up
inc bx
mov cx,5
test al,21h ;if green light up?
jz delay_1s ;no,means all yellow, go to short delay
mov cx,30
delay_1s: ;产生1秒
mov dx,io8253_con ;向8253写控制字
mov al,36h ;使0通道为工作方式3, 00 11 011 0
out dx,al
mov ax,1000 ;写入循环计数初值1000
mov dx,io8253_1
out dx,al ;先写入低字节
mov al,ah
out dx,al ;后写入高字节
mov dx,io8253_con
mov al,70h ;设8253通道1工作方式0,01 11 000 0
out dx,al
mov ax,1000 ;写入循环计数初值1000
mov dx,io8253_1
out dx,al ;先写低字节
mov al,ah
out dx,al ;后写高字节
call digit_show
loop delay_1s
digit_show proc near
push dx
;显示数码管倒数
pop dx
ret
exit:
mov ah,4ch
int 21h
delay endp
code ends
end start