阅读:2727回复:8
有高手吗?
问个问题:
在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] |
|
|
沙发#
发布于: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; } 不知道对不对...... |
|
|
板凳#
发布于: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 |
|
|
地板#
发布于:2005-01-15 09:05
老大,你看看对不对啊,串口接受: 什么意思! |
|
|
地下室#
发布于: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口 问题:上面的程序能够调通但进不了串口中断 ............. |
|
|
5楼#
发布于:2005-01-15 16:01
org 0000h 用仿真器单步执行就知道你为何进不了串口中断,好像你的程序也进不了 中断。。。。。 中断进入条件:Ti or Ri=1你看你的programme有这个条件吗! [编辑 - 1/15/05 by lzl] |
|
|
6楼#
发布于:2005-01-15 17:21
中断进入条件:Ti or Ri=1你看你的programme有这个条件吗!
难道是我的思维有问题? 我以为中断是上位机发送下来一个数据之后单片机自动置位Ti or Ri=1的吧,怎么还要人工进入啊,不是很明白....我都找不到北了.... 还有: 如果baud rate不一致的话,那么是不是能接受但是是乱码啊 全双工调试是什么意思,需要做那些设置啊,老大能详细的看一下我的代码么,我找不到错误啊,关键是....我找不到错误........ 我的串口是从计算机上窃电得.....整个开发板没有外加电源......... 然后我把我把仿真头插到板子上去,串口也接到板子上去,上位机用的串口调试帮手做的......... 然后运行上面的程序,串口没反应.............. 老大您明白我的意思了么? |
|
|
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 串口中断结束 程序好像没问题,你是接收后又直接发回去,如果进不了中断就说明主机端没来信号。波特率不对是无法通信的 |
|
|
8楼#
发布于:2005-01-16 19:03
恩,搞定了,原来是电路出了点毛病 :P
|
|
|