8255实现秒表
来源:互联网 发布:域名赎回期是多久 编辑:程序博客网 时间:2024/05/20 02:27
我们做的是秒表
下面是我们的代码:
LWLC.ASM
<span style="font-size:18px">DATA SEGMENT;8255各个端口地址IO8255AEQU1460HIO8255BEQU1461HIO8255CEQU1462HIO8255KEQU1463H;8254各个端口地址IO82540EQU1440HIO82541EQU1441HIO82542EQU1442HIO8254KEQU1443HLEDDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;段码0---9COUNT DW ? ;交替显示次数COUNTINDW?;延迟函数内循环循环次数NUMADB?;十位数NUMBDB?;个位数DATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DATASTART:;初始化DSMOVAX,DATAMOVDS,AX;初始化8255;8255写入控制字98H---->10011000B;PB,PC0--PC3口均输出,A口,PC4----PC7为输入MOVAL,98H;10011000BMOVDX,IO8255KOUT DX,ALMOVNUMA,00HMOVNUMB,00HDISPLY: MOV COUNT, 500 MOV BX, OFFSET LED MOVBP,COUNT ;交替显示十位(A)和个位(B) SHOW: ;显示十位数 MOV AL, NUMA XLAT ;查表MOV DX, IO8255B OUT DX, AL ;将该数的LED数码管字形代码送到B口 MOV DX, IO8255C ;接通8段代码管的第一位,在LED上显示十位数 MOV AL, 11111011B OUT DX, AL CALL DELAY CALL DECIDE ;显示个位数 MOV AL, NUMB XLAT MOV DX, IO8255B OUT DX, AL MOV DX, IO8255C MOV AL, 11111101B OUT DX, AL CALL DELAY CALL DECIDE DEC COUNT JZ SHOW JMP CHANGEB ;该数字显示完,对其+1 ;B+1操作的代码段为:CHANGEB: INCNUMB;个位自加 CMP NUMB, 09H ;个位与9比较 JG CHANGEB;如果个位大于9,那么进入改变十位(CHANGEA)代码段 JMP DISPLY;否则,显示数字;A+1操作的代码段为:CHANGEA: MOV NUMB,00H;个位置0 INC NUMA;十位自加 CMP NUMA,09H;十位与9比较 JG RESET JMP DISPLY;否则,显示数字;A,B置数为0RESET:MOVNUMA,00HJMPDISPLY;软延时函数为:DELAY PROC NEAR MOV CX, 5000 ;上次过程次数缓存DELAY0: MOV COUNTIN, 5DELAY1: DEC COUNTIN JNZ DELAY1 LOOP DELAY0 RET DELAY ENDP;Press any key to exit DECIDE PROC MOV AH, 0BH ;11号功能判断是否有键按下 INT 21H CMP AL, 0FFH JE EXIT RETEXIT: MOVAH,4CHINT 21HDECIDE ENDPCODE ENDSEND START</span>
<span style="font-size:18px">DATA SEGMENT;8255各个端口地址IO8255AEQU1460HIO8255BEQU1461HIO8255CEQU1462HIO8255KEQU1463H;8254各个端口地址IO82540EQU1440HIO82541EQU1441HIO82542EQU1442HIO8254KEQU1443HLEDDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;段码0---9COUNT DW ? ;交替显示次数COUNTINDW?;延迟函数内循环循环次数NUMADB?;十位数NUMBDB?;个位数DATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DATASTART:;初始化DSMOVAX,DATAMOVDS,AX;初始化8255;8255写入控制字98H---->10011000B;PB,PC0--PC3口均输出,A口,PC4----PC7为输入MOVAL,98H;10011000BMOVDX,IO8255KOUT DX,ALMOVNUMA,00HMOVNUMB,00HDISPLY: MOV COUNT, 500 MOV BX, OFFSET LED MOVBP,COUNT ;交替显示十位(A)和个位(B) SHOW: ;显示十位数 MOV AL, NUMA XLAT ;查表MOV DX, IO8255B OUT DX, AL ;将该数的LED数码管字形代码送到B口 MOV DX, IO8255C ;接通8段代码管的第一位,在LED上显示十位数 MOV AL, 11111011B OUT DX, AL CALL DELAY CALL DECIDE ;显示个位数 MOV AL, NUMB XLAT MOV DX, IO8255B OUT DX, AL MOV DX, IO8255C MOV AL, 11111101B OUT DX, AL CALL DELAY CALL DECIDE DEC COUNT JZ SHOW JMP CHANGEB ;该数字显示完,对其+1 ;B+1操作的代码段为:CHANGEB: INCNUMB;个位自加 CMP NUMB, 09H ;个位与9比较 JG CHANGEB;如果个位大于9,那么进入改变十位(CHANGEA)代码段 JMP DISPLY;否则,显示数字;A+1操作的代码段为:CHANGEA: MOV NUMB,00H;个位置0 INC NUMA;十位自加 CMP NUMA,09H;十位与9比较 JG RESET JMP DISPLY;否则,显示数字;A,B置数为0RESET:MOVNUMA,00HJMPDISPLY;软延时函数为:DELAY PROC NEAR MOV CX, 5000 ;上次过程次数缓存DELAY0: MOV COUNTIN, 5DELAY1: DEC COUNTIN JNZ DELAY1 LOOP DELAY0 RET DELAY ENDP;Press any key to exit DECIDE PROC MOV AH, 0BH ;11号功能判断是否有键按下 INT 21H CMP AL, 0FFH JE EXIT RETEXIT: MOVAH,4CHINT 21HDECIDE ENDPCODE ENDSEND START</span>
电路图:
额,之所以命名为LWLC.ASM,是因为这是我的小伙伴们自己亲自完成的,很有纪念,于是用我们的首字母来命名。细心阅读代码和电路图的同学,肯定注意到,电路图上连接的某些元件并没有用上,是的,你没有看错,当然,我也没错。只是我的代码并没写完全(故意的),你只要在自己的理解上进行添加就行,当然,就这样用的话,也不会出问题,只要注意下端口地址就行了。
提示:端口地址需要根据实际情况修改,不过还好(使用了宏),8254定时功能另加(这里只是使用了简单的模拟延时函数,不准确),开关功能需另加。
资料:
DOS和BIOS功能调用
可编程并行接口芯片8255A及其应用
可编程定时/计数器8254及其应用
Tdpit实验室做汇编实验时用到的软件
ISIS7 Professional一个模拟硬件环境的软件
其他一些书籍,就有劳各位自己查找
- 8255实现秒表
- 实现秒表
- 使用setTimeOut实现秒表
- java秒表/计时器实现
- 秒表类的实现
- 秒表功能实现
- Tkinter实现秒表功能
- swift秒表的实现
- 实现简易秒表功能
- 独立按键实现秒表
- 单片机实现秒表功能
- Javascript实现秒表倒计时
- J2ME实现精确秒表计时
- java线程方式实现秒表
- js定时循环实现秒表
- 自定义 View 实现秒表功能
- 秒表
- 秒表
- 前端MVC学习体会
- 股票软件开发总体方案
- 2013.10.07
- POJ 2096 Collecting Bugs
- Ubuntu中安装Eclipse Java EE的方法
- 8255实现秒表
- 计算机会议级别
- Linux内核的异步通知
- 二级指针
- twitter 因api版本更新造成的 unknown error
- 我的samba配置
- STL内存分配器
- So cute are you python 1
- 6410的存储空间分配