lzl
lzl
驱动大牛
驱动大牛
  • 注册日期2001-09-11
  • 最后登录2010-06-22
  • 粉丝1
  • 关注0
  • 积分127分
  • 威望48点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
阅读:2727回复:8

有高手吗?

楼主#
更多 发布于:2005-01-14 12:24
问个问题:
在INTRINS.H声明的函数原形如下
extern void  _nop_(void);
keil c 文档提示如下:
#include <intrins.h>
void _nop_ (void);

Description:
The _nop_ routine inserts an 8051 NOP instruction into the program. This routine can be used to pause for 1 CPU cycle. This routine is implemented as an intrinsic function. The code required is included in-line rather than being called.

Return Value:
None.

Attributes:
reentrant, intrinsic

Example
#include <intrins.h>
#include <stdio.h>                      /* for printf */

void tst_nop (void)  {

  P1 = 0xFF;

  _nop_ ();                     /* delay for hardware */
  _nop_ ();
  _nop_ ();

  P1 = 0x00;

}
可是我引用该函数后编译器却说missing function-prototype
why?

[编辑 -  1/14/05 by  lzl]
l=z=l 我听说,灌水是使分数快速增长的有效方法
lsn_061
驱动老牛
驱动老牛
  • 注册日期2002-05-09
  • 最后登录2006-10-06
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望261点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-14 15:01
Example
#include <intrins.h>
#include <stdio.h> /* for printf */
#define _Nop_() _nop_()

void tst_nop (void) {

P1 = 0xFF;

_Nop_() ;
_Nop_() ;

P1 = 0x00;

}

不知道对不对......
[img]http://bbs.zndev.com/image/medal/5.gif[/img]
lsn_061
驱动老牛
驱动老牛
  • 注册日期2002-05-09
  • 最后登录2006-10-06
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望261点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-14 15:02
老大,你看看对不对啊,串口接受:
      org   0000h
      jmp   start
      org   0023h
      jmp   server
      org   0100h
start:
      jmp   startio
server:
      clr   ea
      clr   ri
      push  dph
      push  dpl
      mov   a,sbuf
      mov   sbuf,a
wait:
      jnb   ti,wait
      clr   ti
      pop   dpl
      pop   dph
      setb  ea
      reti
startio:
      nop
      nop
      mov  tmod,#20h
      mov  th1,#0ffh
      mov  tl1,#0ffh
      mov  scon,#50h
      mov  pcon,#80h
      setb tr1
      setb ea
      setb es
      nop
      nop
main:
      nop
      nop
      jmp   main
      end
[img]http://bbs.zndev.com/image/medal/5.gif[/img]
lzl
lzl
驱动大牛
驱动大牛
  • 注册日期2001-09-11
  • 最后登录2010-06-22
  • 粉丝1
  • 关注0
  • 积分127分
  • 威望48点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-15 09:05
老大,你看看对不对啊,串口接受:
      org   0000h
      jmp   start
      org   0023h
      jmp   server
      org   0100h
start:
      jmp   startio
server:
      clr   ea
      clr   ri
      push  dph
      push  dpl
      mov   a,sbuf
      mov   sbuf,a
wait:
      jnb   ti,wait
      clr   ti
      pop   dpl
      pop   dph
      setb  ea
      reti
startio:
      nop
      nop
      mov  tmod,#20h
      mov  th1,#0ffh
      mov  tl1,#0ffh
      mov  scon,#50h
      mov  pcon,#80h
      setb tr1
      setb ea
      setb es
      nop
      nop
main:
      nop
      nop
      jmp   main
      end

什么意思!
l=z=l 我听说,灌水是使分数快速增长的有效方法
lsn_061
驱动老牛
驱动老牛
  • 注册日期2002-05-09
  • 最后登录2006-10-06
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望261点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-01-15 09:15
    org 0000h
    jmp start
    org 0023h
    jmp server               串口中断
    org 0100h
start:
    jmp startio

////////////////////////////////////////////////////////////////////////////////////////
server:                      串口中断子程序
    clr ea
    clr ri
    push dph
    push dpl
    mov a,sbuf
    mov sbuf,a
wait:
    jnb ti,wait              发送一个数据
    clr ti
    pop dpl
    pop dph
    setb ea
    reti                     串口中断结束

/////////////////////////////////////////////////////////////////////////////////////
startio:
    nop
    nop
    mov tmod,#20h            串口中断初始化   t1工作于2模式

    mov th1,#0ffh
    mov tl1,#0ffh            22.1184M的晶振,设置为115200
    mov scon,#50h      

    mov pcon,#80h            置位scon
    setb tr1                 开时钟中断
    setb ea                  开串口中断
    setb es                  总中断使能
    nop
    nop
main:
    nop
    nop                      进入死循环等待串口中断        
jmp main

/////////////////////////////////////////////////////////////////////////////////
end

说明:我是这样调试的,1、直接把仿真头插到已经成功运行了的引用电路上,行么?

2、仿真器是连接的并口,然后我们通过串口调试程序往下发数据,用的是com1口

问题:上面的程序能够调通但进不了串口中断

.............  
[img]http://bbs.zndev.com/image/medal/5.gif[/img]
lzl
lzl
驱动大牛
驱动大牛
  • 注册日期2001-09-11
  • 最后登录2010-06-22
  • 粉丝1
  • 关注0
  • 积分127分
  • 威望48点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-01-15 16:01
   org 0000h
    jmp start
    org 0023h
    jmp server               串口中断
    org 0100h
start:
    jmp startio

////////////////////////////////////////////////////////////////////////////////////////
server:                      串口中断子程序
    clr ea
    clr ri
    push dph
    push dpl
    mov a,sbuf
    mov sbuf,a
wait:
    jnb ti,wait              发送一个数据
    clr ti
    pop dpl
    pop dph
    setb ea
    reti                     串口中断结束

/////////////////////////////////////////////////////////////////////////////////////
startio:
    nop
    nop
    mov tmod,#20h            串口中断初始化   t1工作于2模式

    mov th1,#0ffh
    mov tl1,#0ffh            22.1184M的晶振,设置为115200
    mov scon,#50h      

    mov pcon,#80h            置位scon
    setb tr1                 开时钟中断
    setb ea                  开串口中断
    setb es                  总中断使能
    nop
    nop
main:
    nop
    nop                      进入死循环等待串口中断        
jmp main

/////////////////////////////////////////////////////////////////////////////////
end

说明:我是这样调试的,1、直接把仿真头插到已经成功运行了的引用电路上,行么?

2、仿真器是连接的并口,然后我们通过串口调试程序往下发数据,用的是com1口

问题:上面的程序能够调通但进不了串口中断


.............  




用仿真器单步执行就知道你为何进不了串口中断,好像你的程序也进不了
中断。。。。。

中断进入条件:Ti or Ri=1你看你的programme有这个条件吗!

[编辑 -  1/15/05 by  lzl]
l=z=l 我听说,灌水是使分数快速增长的有效方法
lsn_061
驱动老牛
驱动老牛
  • 注册日期2002-05-09
  • 最后登录2006-10-06
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望261点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-01-15 17:21
中断进入条件:Ti or Ri=1你看你的programme有这个条件吗!

难道是我的思维有问题?
我以为中断是上位机发送下来一个数据之后单片机自动置位Ti or Ri=1的吧,怎么还要人工进入啊,不是很明白....我都找不到北了....

还有:
如果baud rate不一致的话,那么是不是能接受但是是乱码啊

全双工调试是什么意思,需要做那些设置啊,老大能详细的看一下我的代码么,我找不到错误啊,关键是....我找不到错误........

我的串口是从计算机上窃电得.....整个开发板没有外加电源.........
然后我把我把仿真头插到板子上去,串口也接到板子上去,上位机用的串口调试帮手做的.........
然后运行上面的程序,串口没反应..............

老大您明白我的意思了么?
[img]http://bbs.zndev.com/image/medal/5.gif[/img]
lzl
lzl
驱动大牛
驱动大牛
  • 注册日期2001-09-11
  • 最后登录2010-06-22
  • 粉丝1
  • 关注0
  • 积分127分
  • 威望48点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-01-16 11:11
server: 串口中断子程序
clr ea
clr ri
push dph
push dpl
mov a,sbuf
mov sbuf,a
wait:
jnb ti,wait 发送一个数据
clr ti
pop dpl
pop dph
setb ea
reti 串口中断结束


程序好像没问题,你是接收后又直接发回去,如果进不了中断就说明主机端没来信号。波特率不对是无法通信的
l=z=l 我听说,灌水是使分数快速增长的有效方法
lsn_061
驱动老牛
驱动老牛
  • 注册日期2002-05-09
  • 最后登录2006-10-06
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望261点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-01-16 19:03
恩,搞定了,原来是电路出了点毛病 :P
[img]http://bbs.zndev.com/image/medal/5.gif[/img]
游客

返回顶部