




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
;clock.asm;386以上微机适用;纯dos下才能使用;tasm4.1或以上编译;*;* clock in 82 55LED *;*; io_plx_device_idequ 05406h;TPC卡设备ID io_plx_vendor_idequ 010b5h;TPC卡厂商ID IO_PLX_SUB_IDEQU 0905410B5H;TPC卡子设备及厂商ID -8253,8255,LED的端口地址- pa55 equ 218h-200H;8255端口地址 pb55 equ 219h-200H p55ctl equ 21bh-200H PORTSEG EQU 211H-200H;led端口地址 PORTBIT EQU 210H-200H TIM_CTL EQU 203H-200H;8253端口地址 TIMER0 EQU 200H-200H TIMER1 EQU 201H-200H MODE03 EQU 36H MODE12 EQU 74H - data segment csregdw? ipregdw?;旧中断向量保存空间 io_9054base_addressdb 4 DUP(0);TPC卡PCI接口芯片I/O基地址暂存空间 io_base_addressdb 4 DUP(0);TPC卡I/O基地址暂存空间 interrupt_linedb 2 DUP(0);TPC卡中断号暂存空间 pcicardnotfinddb 0dh,0ah,TPC pci card not find or address/interrupt error !,0dh,0ah,$ io9054baseaddressdb 0dh,0ah,TPC pci card 9054 Chip I/O Base Address : ,$ iobaseaddressdb 0dh,0ah,TPC pci card I/O Base Address : ,$ intnumberdb 0dh,0ah,TPC pci card Interrupt Line : ,$ enter_returndb 0dh,0ah,$ MESS DB 8253A TIMER0 IN MODE3! COUNT=0200H,0AH,0DH DB 8253A TIMER1 IN MODE2! COUNT=0aH infact it is better to be 0003h,0AH,0DH,$ irq_vectdb 08h,09h,0ah,0bh,0ch,0dh,0eh,0fh,70h,71h,72h,73h,74h,75h,76h,77h;新的中断向量,中断0-7的向量为:08h-0fh,中断8-15的向量为:70h-77h irq_mask_0_7_tabledb 011111110b,011111101b,011111011b,011110111bdb 011101111b,011011111b,010111111b,001111111bdb 011111011b,011111011b,011111011b,011111011bdb 011111011b,011111011b,011111011b,011111011b;新的中断掩码,中断0-7时从低至高相应位为零,中断8-15时第2位为零 irq_mask_8_15_tabledb 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffhdb 011111110b,011111101b,011111011b,011110111bdb 011101111b,011011111b,010111111b,001111111b;新的中断掩码,中断0-7时全一,中断8-15时从低至高相应位为零; -与用户有关的数据寄存区域-COUNT DB 50 ;jishu50 times TIME1 DB 00H,00H,00H,00H,00H,00H ; TIMER DATA WAITNG TO BE PRINTEDCHAR1 DB ? ;save the char that u have inputed from the keybordINTMASK DB ?CONST1 DW ?LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H,79H,00HTABLE1 DW 0101H,0201H,0401H,0801H,1001H,2001H,4001H,8001H DW 0102H,0202H,0402H,0802H,1002H,2002H,4002H,8002H DW 0104H,0204H,0404H,0804H,1004H,2004H,4004H,8004H CHAR DB CDEFBA9845673210 RPMGMES DB -IN SMALL KEYBORD-,0AH,0DH DB C-DISPLAY 00,00,00 ; G-GO ON SHOW THE TIME ,0AH,0DH DB D-STOP TO DISPLAY ; E-EXIT TO DOS,0AH,0DH ;DB P-POSITION THE THE RIGHT TIME,0AH,0DH,$ DB P-POSITION THE THE RIGHT TIME,0AH,0DH DB -JUST HAVE A TRY-,0AH,0DH,$ data endsstacks segment db 100 dup (?) STA DW 512 DUP (?) TOP EQU LENGTH STAstacks endscode segment assume cs:code,ds:data,ss:stacks,es:datastart:;Enable Local Interrupt Input.386 cli mov ax,data mov ds,ax mov es,ax mov ax,stacks mov ss,axcallfindtpc;查找TPC卡资源并显示 ;-主程序开始时的初始化工作-MOV DX,word ptr io_base_address;初始化8253add dx,TIM_CTLMOV AL,MODE03 ;计数器0工作在模式三 00 11 011 0;OUT DX,ALMOV DX,word ptr io_base_addressadd dx,TIMER0MOV AL,00hOUT DX,AL MOV AL,02HOUT DX,ALMOV DX,word ptr io_base_addressadd dx,TIM_CTLMOV AL,MODE12OUT DX,ALMOV DX,word ptr io_base_addressadd dx,TIMER1 MOV AL,03H ;本来是000ah 但程序中有很多延时。OUT DX,AL MOV AL,00hOUT DX,ALMOV DX,OFFSET MESMOV AH,09INT 21Hmov dx,word ptr io_9054base_addressadd dx,68h ;设置 tpc 卡中9054芯片io口,使能中断 in ax,dx or ax,0900h out dx,ax mov bx,word ptr interrupt_line;保存原中断向量mov al,byte ptr irq_vect+bxmov ah,35h int 21hmov ax,esmov csreg,axmov ipreg,bx mov bx,word ptr interrupt_line;设置新中断向量 mov al,byte ptr irq_vect+bx mov cx,cs mov ds,cxmov dx,offset int_procmov ah,25h int 21hmov ax,datamov ds,axmov es,ax in al, 21h ;设置中断掩码 mov bx,word ptr interrupt_linemov ah,byte ptr irq_mask_0_7_table+bxandal,ah out 21h, al in al, 0a1h mov bx,word ptr interrupt_linemov ah,byte ptr irq_mask_8_15_table+bxandal,ah out 0a1h, alsti ;开中断LKEY: CALL KEY MOV DL,CHAR1 CMP DL,C JNZ LGY CALL CPRO JMP LKEYLGY: CMP DL,G JNZ LDY CALL GPRO JMP LKEYLDY: CMP DL,D JNZ LPY CALL DPRO JMP LKEYLPY: CMP DL,P JNZ LEY CALL PPRO JMP LKEYLEY: CMP DL,E JNZ LKEYexit: cli mov bx,word ptr interrupt_line;恢复中断掩码mov ah,byte ptr irq_mask_0_7_table+bxnot ahinal, 21horal, ahout21h, al mov bx,word ptr interrupt_linemov ah,byte ptr irq_mask_8_15_table+bxnot ahinal, 0a1horal, ahout0a1h, al mov bx,word ptr interrupt_line;恢复原中断向量mov al,byte ptr irq_vect+bx mov dx,ipregmov cx,csregmov ds,cxmov ah,25h int 21hmov ax,data;设置 tpc 卡中9054芯片io口,关闭中断 mov ds,axmov dx,word ptr io_9054base_addressadd dx,68hin ax,dx and ax,0f7ffhout dx,axmov ax,4c00hint 21h;退出;-中断服务程序;每秒钟将会进入50次-int_proc proc far cli push ax PUSH BX PUSH CX push dx PUSH SI PUSH DI push ds mov ax,data ;Interrupt to do mov ds,ax DEC COUNT JNZ DDD ; SMALLER THAN 50 JUMP TO NEXT GENERATION MOV COUNT,50 ;NEW INTRRUPT IS BEGINMOV DI,OFFSET TIME1CMP BYTE PTR DI+5,09HJE DDD1 ;先进性比较 如果是9则跳到ddd1产生进位 否则加一INC BYTE PTR DI+5 ;50 TIMES TO MAKE AN INC OF second highJMP DDD DDD1: mov byte ptr DI+5,00HINC BYTE PTR DI+4 ; 产生进位:CMP DI+4,06HJNZ DDDmov byte ptr DI+4,00HINC BYTE PTR DI+3 ; 产生进位:CMP DI+3,0AHJNZ DDDmov byte ptr DI+3,00HINC BYTE PTR DI+2 ; 产生进位:CMP DI+2,06hJNZ DDDmov byte ptr DI+2,00HINC BYTE PTR DI+1 ; 产生进位:CMP DI+1,04hJNZ DDDmov byte ptr DI+1,00HINC BYTE PTR DI ; 产生进位:CMP DI,03hJNZ DDDmov byte ptr DI,00HDDD: mov al,20h ;Send EOI out 0a0h,al out 20h,al mov cx,0ffffhloopx: nop loop loopx ;延时 pop ds POP DI POP SI pop dx POP CX POP BX pop ax sti iretint_proc endp;-键盘扫描的程序 主程序中被调用-KEY PROC NEAR PUSH CXKST: MOV AL,82HMOV DX,word ptr io_base_addressadd dx,P55CTL OUT DX,AL MOV AL,00HMOV DX,word ptr io_base_addressadd dx,PA55 OUT DX,ALMOV DX,word ptr io_base_addressadd dx,PB55 IN AL,DX OR AL,0F8H CMP AL,0FFH JZ DELAY PUSH AX MOV CX,0a00HDLY: MOV AX,word ptr CONST1DLY1: DEC AX JNZ DLY1 DEC CX JNZ DLY POP AX MOV CL,08H MOV AH,0FEHSCAN1:MOV DX,word ptr io_base_addressadd dx,PA55 MOV AL,AH OUT DX,ALMOV DX,word ptr io_base_addressadd dx,PB55 IN AL,DX OR AL,0F8H CMP AL,0FFH JNZ KEYN ROL AH,1 DEC CL JNZ SCAN1 JMP KSTKEYN: PUSH AXMOV DX,word ptr io_base_addressadd dx,PB55RELEA: IN AL,DX OR AL,0F8H CMP AL,0FFH JNZ RELEA POP AX NOT AX MOV SI,OFFSET TABLE1 MOV DI,OFFSET CHAR MOV CX,24TT: CMP AX,SI JZ NN DEC CX JZ KST ADD SI,02 INC DI JMP TTNN: MOV DL,DI MOV CHAR1,DL MOV AH,02H INT 21H POP CX JMP YANGDELAY: CALL DISPLY JMP KSTYANG: RETKEY ENDP;-LED数码管显示-DISPLY PROC NEAR PUSH CX MOV BX,OFFSET LED MOV CX,0006 ;STANDS FOR 6 LEDS MOV SI,OFFSET TIME1 MOV AH,01HDISPLY1: CLD ;LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H,79H,00H LODSB ;AL=BX+AL XLAT ;AL= MOV DX,word ptr io_base_address add dx,PORTSEG OUT DX,AL MOV AL,AH MOV DX,word ptr io_base_address add dx,PORTBIT OUT DX,AL SHL AH,1 ;ZUOYI MOV AL,00 ;EVERY TIME WE INISIAT IT WITH 00 WHEN FINISHED OUT DX,AL LOOP DISPLY1 POP CX RETDISPLY ENDP;-按下各种键盘时相应的操作-CPRO PROC NEAR CLI MOV WORD PTR WORD PTR TIME1,0000H ;PRINT LED 00:00:00 MOV WORD PTR TIME1+2,0000H MOV WORD PTR TIME1+4,0000H RETCPRO ENDP;-GPRO PROC NEAR ;START THE CLOCK; STI RETGPRO ENDP;-DPRO PROC NEAR ;STOP TO DISPLAY CLI RETDPRO ENDP;-PPRO PROC NEAR CLI PUSH AX PUSH BX MOV WORD PTR TIME1,0C0CH ;led off MOV WORD PTR TIME1+2,0C0CH MOV WORD PTR TIME1+4,0C0CH CALL DISPLY CALL KEY MOV DL,CHAR1 CMP DL,2 JNG NEXT1 ;SMALLER THAN 9 hhexit2 SMALLER THAN 9 hh=4 JMP ERR1NEXT2: SUB DL,30H ;MOV YEAR1+1,DL MOV TIME1+1,DL CALL DISPLY CALL KEY MOV DL,CHAR1 CMP DL,6 JNG NEXT3 ; SMALLER THAN 9 mh=6 JMP ERR1NEXT3: SUB DL,30H MOV TIME1+2,DL CALL DISPLY CALL KEY MOV DL,CHAR1 CMP DL,9 JNG NEXT4 ; SMALLER THAN 9 ml=9 JMP ERR1NEXT4: SUB DL,30H mov TIME1+3,DL CALL DISPLY CALL KEY MOV DL,CHAR1 CMP DL,6JNG NEXT5 ; SMALLER THAN 9 ml=9 SH=5 JMP ERR1NEXT5: SUB DL,30H MOV TIME1+4,DL CALL DISPLY CALL KEY MOV DL,CHAR1 CMP DL,9 JG ERR1 SUB DL,30H MOV TIME1+5,DL CALL DISPLY JMP WWERR1: MOV WORD PTR TIME1,0A0BH MOV WORD PTR TIME1+2,0A0AH MOV WORD PTR TIME1+4,0A0AH CALL DISPLYWW: POP BX POP AX RETPPRO ENDP;-tpc card-findtpc proc near;查找TPC卡资源并显示pushadpushfdMOVAX,0B101HINT1AHJCfindtpc_notfind;检查PCI BIOS是否存在MOVAX,0B102HMOVCX,io_plx_device_idMOVDX,io_plx_vendor_idMOVSI,0INT1AHJCfindtpc_notfind;检查TPC卡是否安装,设备号、厂商号MOVAX,0B10AHMOVDI,02CHINT1AHJCfindtpc_notfindCMPECX,IO_PLX_SUB_IDJNZfindtpc_notfind;检查TPC卡是否安装,子设备号、厂商号MOVAX,0B10AHMOVDI,14HINT1AHJCfindtpc_notfind;读TPC卡9054芯片I/O基址信息movdword ptr io_9054base_address,ecxandecx,1jzfindtpc_notfind;检查是否为i/o基址信息 movecx,dword ptr io_9054base_addressandecx,0fffffffeh movdword ptr io_9054base_address,ecx ;去除i/o指示位并保存MOVAX,0B10AHMOVDI,18HINT1AHJCfindtpc_notfind;读TPC卡I/O基址信息movdword ptr io_base_address,ecxandecx,1jzfindtpc_notfind;检查是否为i/o基址信息movecx,dword ptr io_base_addressandecx,0fffffffehmovdword ptr io_base_address,ecx;去除i/o指示位并保存MOVAX,0B10AHMOVDI,3CHINT1AHJCfindtpc_not
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025北京航空航天大学化学学院聘用编实验室与保密安全员F岗招聘1人模拟试卷完整参考答案详解
- 2025辽宁锦州市教育局所属学校赴高校招聘24人(教师)考前自测高频考点模拟试题及答案详解(历年真题)
- 2025年湖南省烟草专卖局系统公开考试聘用工作人员模拟试卷及一套参考答案详解
- 2025年甘肃天水清水县人民法院面向社会招聘拟聘用人员暨后备库人员考前自测高频考点模拟试题及一套完整答案详解
- 2025年河北唐山市消防救援支队政府专职消防队员招聘113人考前自测高频考点模拟试题及答案详解(易错题)
- 2025江苏港辉建筑工程有限公司招聘13人考前自测高频考点模拟试题有完整答案详解
- 2025江苏衢州市常山县招聘专职社区工作者12人模拟试卷(含答案详解)
- 2025福建福州市马尾区琅岐镇殡仪服务站招聘工作人员1人考前自测高频考点模拟试题及答案详解(各地真题)
- 2025安康市石泉县幼儿园招聘(2人)考前自测高频考点模拟试题及一套答案详解
- 2025第十四师昆玉市二二四团玉龙幼儿园自聘教师招聘(1人)模拟试卷附答案详解(模拟题)
- 质量月报范本
- FZ/T 52051-2018低熔点聚酯(LMPET)/聚酯(PET)复合短纤维
- 【精品】2020年职业病诊断医师资格培训考试题
- 日本产业发展及文化讲义课件
- 派车单(标准样本)
- 广东省建筑施工安全管理资料统一用表2021年版(原文格式版)
- 浦东机场手册
- JGJ保温防火复合板应用技术
- 幼儿园绘本:《闪闪的红星》 红色故事
- 山区二级公路施工组织设计(共60页)
- 小学生符号意识与模型思想的发展与培养
评论
0/150
提交评论