⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8250'.htm

📁 8250扩展串口的单片机C51例程和相关资料。
💻 HTM
📖 第 1 页 / 共 2 页
字号:
                 ;保存在双字变量中 <BR>                  MOV  INT-SEG,BX <BR>            
            CLI                ;修改中断向量前关中断 <BR>                  MOV  AL,0CH 
                 ;指定中断号 <BR>                  MOV  AH,25H           ;修改中断0CH向量 
      <BR>                  MOV  DX,SEG INSEV        ;DS:DX指向新中断向量 <BR>         
               MOV  DS,DX            ;DS指向新段址 <BR>                  MOV 
       DX,OFFSET INTSEV      ;DX指向偏移量 <BR>                  INT  21H<BR>         
               MOV  AX ,DATA           ;恢复数据段寻址 <BR>                  MOV  DS,AX 
         <BR>              ;8250重新初始化 <BR>                  MOV  DX,3FBH 
                ;LCR口地址 <BR>                  MOV  AL, 80H 
                ;DLAB位置1,允许访问DLR <BR>                  OUT  DX,AL <BR>         
               MOV  DX,3F8H           ;DLL口地址 <BR>                  MOV  AL, 
      0CH           ;送除数低字节 <BR>                  OUT  DX,AL <BR>               
         MOV  DX,3F9H           ;DLH口地址 <BR>                  MOV  AL 00H 
                  ;送除数高字节 <BR>                  OUT  DX ,AL <BR>               
         MOV  DX ,3FBH           ;LCR 口地址 <BR>                  MOV  AL, 
      0BH           ;通信数据格式 <BR>                  OUT  DX,AL <BR>               
         MOV  DX,3FCH            ;MCR口地址 <BR>                  MOV  AL, 
      08H           ;OUT2位置"1",打开COM1中断 <BR>                  OUT  DX,AL <BR>   
                     MOV   DX ,3F9H           ;IER口地址 <BR>                  MOV 
       AL ,03H            ;允许收/发中断 <BR>                  OUT  DX,AL <BR>         
               IN  AL, 21H             ;开放IRQ4中断请求 <BR>                  AND 
       AL,0EFH <BR>                  OUT  21H,AL            ; 
      8259A(OCW1)开放<BR>                  MOV CX,RV-BYTE           ;取字节数<BR>   
      L:          STI                  ;开中断 <BR>                  
      HLT                ;等待中断<BR>                  CLI                  ;关中断 
      <BR>                  DEC  CX              ;字节数减1 <BR>                  
      CMP  CX,0000H            ;接收/发送完毕?<BR>                  JNZ  L 
                     ;未完,继续;已完,恢复<BR>                  ;恢复中断向量<BR>               
         MOV  AL,0CH           ;指定中断号<BR>                  MOV  AH,25H 
                ;恢复中断0CH原向量<BR>                  MOV  DX,INT-OFF 
               ;DS:DX指向原向量 <BR>                  MOV  BX,INT-SEG 
               ;DX指向向量偏移量 <BR>                  MOV  DS,BX           ;DS指向向量段址 
      <BR>                  INT 21H <BR>                  IN 
      AL,21H            ;8259A屏蔽IR0。 <BR>                  OR AL,10H 
                  ;中断请求<BR>                  OUT 21H,AL <BR>                  
      STI <BR>                  MOV AX,4C00H           ;终止退出<BR>               
         INT 21H                ;返回DOS    <BR>             ;通信中断服务程序 <BR>   
      INTSEV    PROC   FAR <BR>                  PUSH  AX 
                   ;寄存器进栈,保护现场 <BR>                  PUSH  CX <BR>               
         PUSH  DX <BR>                  PUSH  SI <BR>                  PUSH  DI 
      <BR>                  PUSH  DS<BR>                  PUSH  ES<BR>         
               STI                 ;开中断<BR>                  MOV  DX,3FAH 
                ;IIR口地址<BR>                  IN  AL,DX             ;查中断源 <BR>   
                     CMP  AL,02H            ;是发送中断(THRE=1)? <BR>               
         JE SEND              ;是,则转发送子程序入口 <BR>    接收子程序 
                            ;不是,为接收 <BR>   REC:            MOV  DX,3F8H 
                ;RBR口地址 <BR>                  IN  AL,DX              ;从RBR读入1个字节 
      <BR>                  MOV  DX,RV-POINT <BR>                  MOV  [DI],AL 
                 ;读入的字节送接收区 <BR>                  INC  DI 
                    ;修改接收区的地址指针 <BR>                  INC  DI ; <BR>            
            MOV  RV-POINT,DI <BR>                  JMP  RETURN<BR>   ;发送子程 
      <BR>   SEND:          MOV SI,TR-POINT <BR>                  MOV DX,3F8H 
                 ;THR口地址 <BR>                  MOV AL,[SI] <BR>                  
      OUT DX,AL             ;发送1个字节 <BR>                  INC SI 
                     ;修改发送区地址指针 <BR>                  INC SI <BR>               
         MOV TR-POINT,SI <BR>   ;返回 <BR>  RETURN:          CLI<BR>               
         POP ES <BR>                  POP DS <BR>                  POP DI <BR>   
                     POP SI<BR>                  POP DX <BR>                  
      POP CX <BR>                  POP AX <BR>                  MOV AL,20H 
                  ;向8259送EOI(不指定返回) <BR>                  OUT 20,AL 
                    ;OCw2口地址 <BR>                  IRET                 ;中断返回 
      <BR>   INTSEV   ENDP<BR>   CODE   ENDS<BR>   END   
    START</FONT></P></DIV></TD></TR></TBODY></TABLE></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -