单片机Keil问题

在keil中模拟,单步运行的时候,总在这里循环:
IDATALOOP: MOV @R0,A
DJNZ R0,IDATALOOP
我运行的是简单的流水灯程序,程序如下:
ORG 0000H
AJMP DIS1
ORG 030H
DIS1: MOV P1,#0FEH
ACALL DEL
MOV P1,#0FDH
ACALL DEL
MOV P1,#0FBH
ACALL DEL
MOV P1,#0F7H
ACALL DEL
MOV P1,#0EFH
ACALL DEL
MOV P1,#0DFH
ACALL DEL
MOV P1,#0BFH
ACALL DEL
MOV P1,#07FH
ACALL DEL
DIS3: MOV P1,#0FFH
MOV P3,#0FEH
ACALL DEL
MOV P3,#0FDH
ACALL DEL
MOV P3,#0FBH
ACALL DEL
MOV P3,#0F7H
ACALL DEL
MOV P3,#0EFH
ACALL DEL
MOV P3,#0DFH
ACALL DEL
MOV P3,#0BFH
ACALL DEL
MOV P3,#07FH
ACALL DEL
DIS2: MOV P3,#0FFH
MOV P2,#0FEH
ACALL DEL
MOV P2,#0FDH
ACALL DEL
MOV P2,#0FBH
ACALL DEL
MOV P2,#0F7H
ACALL DEL
MOV P2,#0EFH
ACALL DEL
MOV P2,#0DFH
ACALL DEL
MOV P2,#0BFH
ACALL DEL
MOV P2,#07FH
ACALL DEL
DIS0: MOV P2,#0FFH
MOV P0,#07FH
ACALL DEL
MOV P0,#0BFH
ACALL DEL
MOV P0,#0DFH
ACALL DEL
MOV P0,#0EFH
ACALL DEL
MOV P0,#0F7H
ACALL DEL
MOV P0,#0FBH
ACALL DEL
MOV P0,#0FDH
ACALL DEL
MOV P0,#0FEH
ACALL DEL
MOV P0,#0FFH
AJMP DIS1
DEL: MOV R5,#04H
DEL1: MOV R6,#0FFH
DEL2: MOV R7,#0FFH
DEL3: DJNZ R7, DEL3
DJNZ R6, DEL2
DJNZ R5, DEL1
RET
END
请问问题出在哪?怎么改正。谢谢!

先回答你第一个问题:
DATALOOP: MOV @R0,A
DJNZ R0,IDATALOOP
第一条是将A中的内容放入R0所指的地址中,如果R0的数值比较大的话,用单步运行就需要很长时间。有个方法可以解决,即在KEIL调试时,修改R0里的数值,将它变成1或者01H,就可以出循环了。

第二个问题:
你的程序是实现P1循环→P3循环→P2循环→P0循环,然后又返回P1循环,连续往复。
你的程序,我用软件调试了,逻辑上没问题,能实现。
不过建议你用移位指令来完成。这样更简单。

回答完毕,谢谢。
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-07-10
单片机Keil
uvision问题,比如有个数组是a[10],写代码的时候只定义了未给该数组中的元素赋值,如何在调试的时候给数组中的元素赋值?
这就是数组的使用方法,很简单的。
unsigned
char
a[10];
void
main(void)
{
a[0]=1;
a[9]=0xf8;
}
第2个回答  2019-11-05
int
m,i[8];
long
c,q;
c=883434;
q=100000000;
for(m=7;m>=0;m--)
{
i[m]=(c%q)/(q/10);
q=q/10;
}
这样就可以了,关键问题是你的pow函数不对
第3个回答  2019-04-02
你看错了吧?
如果是Keil编译器,那只是说一个C文件包含了main()函数,别的C文件中的函数被这个main()调用,最后生成的只是一个HEX文件,不论51还是ARM单片机都这样。
如果是ARM9或者11甚至Cortex-A系列的ARM处理器,要操作系统支持才能运行,这操作系统本身就是很多个可执行代码组成的,比如WinCE,你可以往这个系统中加入几十个可执行程序,然后根据自己的选择来运行其中某一个。普通的51单片机和Cortex-M系列的单片机是没法做到的,这不是我们的水平低,而是单片机本身不允许这样。
第4个回答  2019-06-17
首先告诉你一个单片机只能下载一个可执行代码文件,如果你看到的那个单片机可以做两个功能的事儿,那是因为它的程序里写了两个不同的功能在一起,当某个条件下执行功能一,某个条件下执行功能二罢了(可通过软件或硬件控制)。
一般一个单片机在烧写前,都会执行擦除,清空里面之前的内容。不过现在有一些单片机支持升级,就是在烧写的时候只烧写里面有改动的部分程序代码。

Keil使用中遇到的问题
在使用Keil C51过程中,可能会遇到一系列问题。首先,安装Keil C51后,为打开项目,务必下载Keil MDK-ARM并安装配套的pack,可通过官网keil.com获取(需梯子)。遇到报错"Target 'STM32F429_439xx' uses ARM-Compiler 'Default Compiler Version 5' which is not available"时,解决方法是进入Options f...

STM32单片机在Keil5下仿真的问题解决
经过多次迭代和测试,这款编程器最终取得了用户的一致好评。它不仅适用于STM32系列、LPC系列、K60系列、HT32系列、NV32系列、EFM32系列等众多ARM Cortex-M系列单片机的调试,还能兼容市面上绝大多数ARM Cortex-M系列单片机。在稳定性、兼容性以及成本控制方面,这款编程器都展现出了优秀的表现。随着这款...

Keil4怎样编写单片机的程序?
1、首先在电脑桌面中,双击“Keil4”图标打开软件。2、点击上部菜单栏中的“工程”,在下拉菜单中选择“新建工程文件”。3、把工程文件保存到目标文件夹里去,工程文件命名可以随意写入一些数字。4、选择单片机类型,根据实际情况进行选择,例如“Atmel”中的“89C52”。5、点击“文件”,在“文件”的下拉...

keil编译没有错误为什么烧进单片机不运行
Keil没有报错只能说明逻辑没有错误,但是不能运行有两方面原因:第一是你的程序设计有问题。第二是单片机硬件电路的问题。请在单片机可以正常工作的情况下,检查程序中各个子程序,引脚定义等等。

keil选错单片机型号有什么影响
keil选错单片机型号的影响有程序无法下载、编译错误。1、程序无法下载:当设计的程序与所选单片机不匹配时,会导致程序无法正确下载到芯片中,从而无法工作。2、编译错误:Keil提供了单片机的头文件、库文件、启动文件等一系列支持文件,当选择错误的单片机型号时,这些文件和程序之间的联系就会出现问题,从而...

keilc开发单片机程序有哪些优缺点
keilc开发单片机程序会大大缩短开发周期,其优点是可读性好,移植容易,使用是普遍的,因为它同时兼顾了多种高级语言的特点,运算速度非常快。缺点是占用资源较多,因为指定在编码之后会变成很多条机器码,就很容易导致空间不足。keilc开发单片机程序要注意寄存器不能重复使用,否则程序的运行会变得不正常。

单片机汇编语言keil文件错误error A46: CODE-ADDRESS EXPECTED
1、错误提示:代码地址错误,代码可能越界,超过代码区容量,或者,非法的不支持的变量定义。2、数据地址错误:可能越界,超过单片机数据容量,建议看看单片机型号是否选择正确。3、没有定义的变量,查看包含文件是否正确,可能单片机型号和包含文件不相符。4、指令不支持数据格式类型,查看指令说明,将数据格式...

我在keil软件 用c语言写51单片机的时候发现?
其实,C语音的变量并不直接定义到寄存器,而是定义到内存单元,寄存器算是个中介,数据从内存取出临时存放到寄存器,然后将当时用不上的数据又从寄存器回写到内存,这样就解决了寄存器共享问题了;另外,你在调试时,再打开个反汇编窗口,跟踪C语音程序的汇编代码,就更清楚了;...

用于开发STM32、开发keil软件和开发C51的keil软件相冲突怎么解决?_百度...
\\r\\n打开stm32工程当然没有问题.\\r\\n \\r\\n第二个方法: 让keilMDK兼容51的工程,只要一个keil就都能编译51和stm32的工程了:\\r\\n1、安装keilC51,安装目录 C:\\keilC51\\\\r\\n2、安装keilMDK,安装目录 C:\\keilMDK\\\\r\\n3、把 C:\\keilC51\\ 里面的 C51 文件夹复制到 C:\\keilMDK\\ 里\\r\\...

单片机Keil问题
先回答你第一个问题:DATALOOP: MOV @R0,A DJNZ R0,IDATALOOP 第一条是将A中的内容放入R0所指的地址中,如果R0的数值比较大的话,用单步运行就需要很长时间。有个方法可以解决,即在KEIL调试时,修改R0里的数值,将它变成1或者01H,就可以出循环了。第二个问题:你的程序是实现P1循环→P3循环→...

相似回答