ercircle
发表于 2025-6-5 12:25:09
463175571qqcom 发表于 2025-6-5 12:13
STC8Gxxx.h这个头文件也是你们官方的吧,一直用的
报错的这些地址在汇编里可以用,但是转C,这些地址被编译器接管了就不要用了。
头文件直接 #include "STC8A8K64D4.H"
调用的就是最新导入的头文件,没必要用本地的。
463175571qqcom
发表于 2025-6-5 12:46:24
但我想IDATA里的数据能用的话,尽量不用XDATA的数据,程序运行快啊,
ercircle
发表于 2025-6-5 13:12:14
463175571qqcom 发表于 2025-6-5 12:46
但我想IDATA里的数据能用的话,尽量不用XDATA的数据,程序运行快啊,
可以用的,定义在编译器认可的范围就行了,位寻址使用20H~2FH
也可以这样定义,内存编译器自己分配
463175571qqcom
发表于 2025-6-5 14:25:05
u8 bdata system_flag1 _at_ 0x20;
sbit B_1ms = system_flag1 ^ 0; //1ms周期标志
sbit B_DLH_RX_GZ = system_flag1 ^ 1;//电流环通讯故障//LY
sbit XSDP = system_flag1 ^ 3;
sbit GP3 = system_flag1 ^ 4;
sbit ZDWBBZ = system_flag1 ^ 5;
sbit SLOWBZ = system_flag1 ^ 6;
sbit PBNZ = system_flag1 ^ 7;
我是这样定义的啊,和你定义的一样啊
463175571qqcom
发表于 2025-6-5 14:26:53
现在问题是KEIL中,IDATA定义的数据是不是不能占据00--1F的地址?
ercircle
发表于 2025-6-5 14:38:02
463175571qqcom 发表于 2025-6-5 14:26
现在问题是KEIL中,IDATA定义的数据是不是不能占据00--1F的地址?
不要占用工作寄存器组地址也就是00~1F.
用C,直接声明bit 变量,地址交给编译器去决定。
463175571qqcom
发表于 2025-6-5 14:49:42
2个问题:1)C语言中,如果寄存器组我选择了0,也就是00-07地址被使用了。是不是08--1f地址也不能使用?
463175571qqcom
发表于 2025-6-5 14:51:58
2)KEIL C51中,程序中我设置了sp=0x80,为什么.M51文件中,栈指针仍然指向0X30
21cnsound
发表于 2025-6-5 15:15:35
C:\TEST\8a8k64d4>dir
驱动器 C 中的卷是 System
卷的序列号是 8C87-78DE
C:\TEST\8a8k64d4 的目录
2025/06/0515:14 <DIR> .
2025/06/0515:05 <DIR> ..
2025/06/0515:06 96 main.c
2025/06/0515:07 11,506 register_definitions.c
2025/06/0511:25 9,195 register_definitions.H
2025/06/0515:07 108,864 STC8Gxxx.h
5 个文件 130,314 字节
2 个目录 124,316,860,416 可用字节
C:\TEST\8a8k64d4>D:\Software\单片机\编译\C51_V961\C51 main.c
C51 COMPILER V9.60.7.0 - SN: K1DZC-EN58KC
COPYRIGHT Copyright (C) 2012 - 2022 ARM Limited or its Affiliates. All rights reserved.
C51 COMPILATION COMPLETE.0 WARNING(S),0 ERROR(S)
C:\TEST\8a8k64d4>D:\Software\单片机\编译\C51_V961\LX51 main.obj
LX51 LINKER/LOCATER V4.66.100.0 - SN: K1DZC-EN58KC
COPYRIGHT Copyright (C) 1995-2021, Arm Limited or its Affiliates. All rights reserved.
main.obj
Program Size: data=9.0 xdata=0 const=0 code=19
LX51 RUN COMPLETE.0 WARNING(S),0 ERROR(S)
C:\TEST\8a8k64d4>D:\Software\单片机\编译\C51_V961\OHX51 main
Extended 8051/251 Object to Hex File Converter V1.47.0.0
COPYRIGHT ARM Germany GmbH 2000 - 2018
GENERATING INTEL HEX FILE: main.hex
C:\TEST\8a8k64d4>dir
驱动器 C 中的卷是 System
卷的序列号是 8C87-78DE
C:\TEST\8a8k64d4 的目录
2025/06/0515:14 <DIR> .
2025/06/0515:05 <DIR> ..
2025/06/0515:14 653 MAIN
2025/06/0515:06 96 main.c
2025/06/0515:14 77 main.hex
2025/06/0515:14 935 main.LST
2025/06/0515:14 2,870 MAIN.MAP
2025/06/0515:14 256 main.OBJ
2025/06/0515:07 11,506 register_definitions.c
2025/06/0511:25 9,195 register_definitions.H
2025/06/0515:07 108,864 STC8Gxxx.h
9 个文件 134,452 字节
2 个目录 124,314,529,792 可用字节
C:\TEST\8a8k64d4>
我用命令行编译,是正常的
463175571qqcom
发表于 2025-6-5 15:47:19
好的,我自己再研究以下吧,谢谢