keil5和Protues8联合仿真的时候在主函数里运行在调用外部函数时打断点不停下,直接就跳转到外部函数内了,每个函数都一样,问人结果他让我重装系统
这是仿真一开始
这是点击了全速跑一次之后直接到了主函数
这个是代码,
#include<regx52.h>
#define u8 unsigned char
#define u16 unsigned int
u8 code weixuan[]={1,2,4,8,16,32,64,128};
//0 1 2 3 4 5 6 7 8 9 a b c d e f
u8 code duanxuan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
u8 chushi[8]={0,0,0,0,0,0,0,0};
u8 gewei=0,shiwei=0,baiwei=0,qianwei=0,wanwei=0,shiwan=0;
void delayms(u8 t)
{
u8 k;
u8 j;
for(k=0;k<t;k++)
for(j=0;j<124;j++);
}
void XianShi()
{
u8 i;
chushi[7]=duanxuan[gewei];
chushi[6]=duanxuan[shiwei];
chushi[4]=duanxuan[baiwei];
chushi[3]=duanxuan[qianwei];
chushi[2]=duanxuan[wanwei];
chushi[0]=duanxuan[shiwan];
for(i=0;i<8;i++)
{
P2=weixuan[i];
delayms(2);
P3=chushi[i];
delayms(2);
}
}
void TimerInit()
{
TL0=0Xb0;
ET0=1;
EA=1;
TR0=1;
}
void Timer() interrupt 1
{
u8 m=0;
TH0 =(65536-50000)/256;
TL0 =(65536-50000)%256;
m++;
if(m==20);
{
m=0;
gewei++;
if(gewei==15);
{
gewei=0;
shiwei++;
if(shiwei==15)
{
shiwei=0;
baiwei++;
if(baiwei==15)
{
baiwei=0;
qianwei++;
if(qianwei==15)
{
qianwei=0;
wanwei++;
if(wanwei==15)
{
wanwei=0;
shiwan++;
if(shiwan==15)
{
shiwan=0;
wanwei=0;
qianwei=0;
baiwei=0;
shiwei=0;
gewei=0;
}
}
}
}
}
}
}
}
void main()
{
TimerInit();
while(1)
{
delayms(2);
XianShi();
delayms(2);
}
}
在主函数中调用外部函数时打断点不停下,直接跳转到外部函数内,原因是在主函数中调用外部函数时,主函数和外部函数之间的代码没有被正确地链接在一起
解题思路:确保主函数和外部函数之间的代码在同一个程序文件中,并且在主函数中调用外部函数时,使用“调用”语句将主函数和外部函数链接在一起
不要在中断中加断点,中断服务函数中的断点可能会造成系统运行失败或故障。
你好,使用keil5的纯软件仿真有些问题,很少用仿真,要仿真也要有个硬件进行仿真,纯软件仿真容易出各种乱七八糟的事情好像
STM32+Keil 5+proteus 8 编程、仿真方法汇总
可以借鉴下
https://blog.csdn.net/baibai_CSDN/article/details/108837311
可能是由于Keil5和Proteus8联合仿真时出现了一些问题,可尝试以下方法:
如果以上方法都不能解决问题,重装系统是最后的解决方案
电路部分 | 器件 | 个数 | ||||
---|---|---|---|---|---|---|
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
在Keil5和Proteus8联合仿真时,如果在主函数里调用外部函数时打断点不停下,一般是由于两个软件版本不匹配或者仿真设置有问题引起的。可以尝试以下几种方法来解决这个问题:
检查Keil5和Proteus8是否是最新版本,并且确认它们是兼容的版本。可以去官网或者相关论坛确认最新的版本信息和兼容性。
检查仿真设置是否正确。需要在Proteus8中设置仿真选项,在Keil5中设置串口调试选项。
尝试在Keil5中设置“Software Only”选项。在菜单栏中选择“Options”-“Debug”-“Use”-“Use Simulator”,然后勾选上“Software Only”选项。
如果以上方法都不能解决问题,建议重新搭建环境,即重新安装Keil5和Proteus8,然后按照官方文档或者相关教程来进行设置和调试。
以下是修正后的代码:
#include<regx52.h>
#define u8 unsigned char
#define u16 unsigned int
u8 code weixuan[] = {1, 2, 4, 8, 16, 32, 64, 128};
u8 code duanxuan[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e};
u8 chushi[8] = {0, 0, 0, 0, 0, 0, 0, 0};
u8 gewei = 0, shiwei = 0, baiwei = 0, qianwei = 0, wanwei = 0, shiwan = 0;
void delayms(u8 t) {
u8 k;
u8 j;
for(k = 0; k < t; k++) {
for(j = 0; j < 124; j++);
}
}
void display() {
u8 i;
chushi[7] = duanxuan[gewei];
chushi[6] = duanxuan[shiwei];
chushi[4] = duanxuan[baiwei];
chushi[3] = duanxuan[qianwei];
chushi[2] = duanxuan[wanwei];
chushi[0] = duanxuan[shiwan];
for(i = 0; i < 8; i++) {
P2 = weixuan[i];
delayms(2);
P3 = chushi[i];
delayms(2);
}
}
void timerinit() {
TMOD = 0x01;
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
ET0 = 1;
EA = 1;
TR0 = 1;
}
void timer() interrupt 1 {
u8 m = 0;
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
m++;
if(m == 20) {
m = 0;
gewei++;
if(gewei == 15) {
gewei = 0;
shiwei++;
if(shiwei == 15) {
shiwei = 0;
baiwei++;
if(baiwei == 15) {
baiwei = 0;
qianwei++;
if(qianwei == 15) {
qianwei = 0;
wanwei++;
if(wanwei == 15) {
wanwei = 0;
shiwan++;
if(shiwan == 15) {
shiwan = 0;
wanwei = 0;
qianwei = 0;
baiwei = 0;
shiwei = 0;
gewei = 0;
}
}
}
}
}
}
}
}
void main() {
timerinit();
while(1) {
display();
}
}
如果我的回答解决了您的问题,请采纳!
以下答案由GPT-4.5Plus大模型(语音)与博主A努力中.......共同编写:
Keil MDK和Proteus是常用的ARM开发工具,可以实现仿真调试ARM单片机程序。将这两个工具联合使用可以实现更加真实的仿真效果。
但是,在联合使用Keil MDK和Proteus进行仿真调试时,可能会遇到一些问题,主要有:
解决:这通常是软件版本、设置参数等不兼容导致的问题:
除此之外,可以参考Keil官方文档中关于和第三方仿真工具联合使用的说明,帮助解决相关问题。