导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→初学者:大家有空帮我看看这个程序,怎么一运行就死机[ghostiq]

 *第4468篇: 初学者:大家有空帮我看看这个程序,怎么一运行就死机

  
楼 主:ghostiq 2002年8月11日00:39
 初学者:大家有空帮我看看这个程序,怎么一运行就死机
是pc跟51机232通信的,三根线的那种
是从《msc-51系列单片机实用接口技术》上抄的
协议是:
pc的键盘做输入,将其发给51,51接收到pc机发来的数据后,回送同一数据给pc,并在屏幕
上显示出来。下面是pc机端的程序,一运行就死,键盘上一个数都输不进


         db       256 dup(0)
STACK       ends
CODE        Segment  para public 'code'
start       proc     far
         assume   cs:code,ss:stack
         PUSH     DS
            MOV      AX,0
         PUSH       AX
         CLI
INITOUT: MOV      DX,3FBH   ;通讯线控制寄存器第7位置1(DLAB=1),以便设置波特率
         MOV      AL,80H
     OUT      DX,AL
     MOV      DX,3F8H   ;设置除数锁存器低位
     MOV       AL,30H
     OUT      DX,AL
     MOV      DX,3F9H   ;设置除数锁存器高位
     MOV      AL,0
     OUT       DX,AL
     MOV      DX,3FBH   ;设定数据格式,8个数据位,一个停止位,无校验
     MOV      AL,03H
     OUT      DX,AL
     MOV       DX,3FCH   ;设置MODEM控制信号
     MOV      AL,03H
     OUT      DX,AL
     MOV       DX,3F9H   ;禁止所有8250中断(四种类型)
     MOV      AL,0
     OUT      DX,AL
FOREVER: MOV      DX,3FDH     ;发送保持寄存器不空则循环等待
     IN       AL,DX
     TEST      AL,20H
     JZ      FOREVER
WAITWAIT:MOV      AH,01H    ;检查键盘缓冲区,无字符则循环等待    
     INT      16H
     JZ       WAITWAIT
     MOV      AH,0        ;若有则取键盘字符    
     INT      16H
SENDCHAR: MOV      DX,3F8H    ;发送键入的字符
     OUT      DX,AL
RECEIVE: MOV      DX,3FDH    ;检查接受数据是否准备好,未准备好继续查询
     IN          AL,DX
     TEST       AL,01H
     JZ          RECEIVE
     TEST      AL,1AH    ;判接受的数据是否出错,有错则转错误处理
     JNZ      ERROR
            MOV      DX,3F8H        ;从接受寄存器中读取数据
     IN          AL,DX
     AND      AL,7FH        ;去掉无效位,得到数据
         PUSH    AX
         MOV    BX,0        ;显示接受到的字符
         MOV    AH,14
         INT    10H
     POP    AX
     CMP    AL,0DH        ;得到的数据不是回车符则返回
     JNZ    FOREVER
     MOV    AL,0AH        ;是回车符则回车换行
     MOV     BX,0
     MOV    AH,14
     INT    10H
     JMP    FOREVER
ERROR:   MOV    DX,3F8H        ;读接受寄存器,清除错误字符
     IN    AL,DX
     MOV    AL,'?'        ;功能调用,显示?+
     MOV    BX,0
     MOV    AH,14
     INT    10H
     JMP    FOREVER        ;继续循环
Start     endp
Code     ends
     end      start

  
2楼:gdtyy 2002年8月11日02:19
 短路串口收发,重新试一下程序,看是否正常。
    看样子不是死机,只是串口收发不正常。
    1。看看收发是否接错,收接发,发接收,千万别弄成一顺儿;
    2。短路串口收发,重新试一下程序,看是否正常。若正常那就是单片机的问题;
    3。PC上串口可能坏了,你用超级终端测一下(收发短接);
    4。建议:用超级终端而不用此程序,波特率设成单片机的值。超级终端是双工的比这个程序
好许多。
  
3楼:天涯倦客 2002年8月11日07:28
 建议改用高级语言写。
  
4楼:ghostiq 2002年8月11日09:39
 谢谢,超级终端在哪有下载
  
5楼:erickill 2006年5月23日11:04
 hehe
hjh
  
6楼:gdtyy 2002年8月11日17:30
 系统盘自带,用控制面板添加/删除项从启动盘安装一下即可。

>>>>>>对该主题发表你的看法

本主题贴数6,分页: [第1页]


[上一篇主题]:C51编程:如何将C文件翻译成A51文件?我编了两个c文件,想把其翻译成.a51文件,然后直接另建一

[下一篇主题]:C51编程:ASM转学C51怎样?