找回密码
 立即注册
查看: 309|回复: 3

关于STC15F104W程序移植到STC8G1K08A提示地址设置无效的问题

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:375
  • 最近打卡:2025-05-08 00:21:59
已绑定手机

2

主题

19

回帖

1612

积分

金牌会员

积分
1612
发表于 2024-4-29 10:19:10 | 显示全部楼层 |阅读模式

我有原来用STC15F104W制作的一个24C串口存储器复制器,用STC15F104W一切正常,最近有学习8G和8H系列Stc芯片的应用,就想把这个程序移植到STC8G1K08A上看可不可以正常运行,结果发现只要复制开关和LED指示只要设置为P5.5和P5.4编译就会提示“stc15F104W 24C02存储器的示莞粗破髟闯绦?asm(35): error A17: INVALID BYTE BASE IN BIT ADDRESS EXPRESSION”,只要改为P3.5和P3.4就可以正常编译,可是8G1K08A-SOP8上没有这两个端口只有P5.5和P5.4,搞不清这个到底问题出在哪里,希望哪位大侠指点一下。



;==============================
;24C02存储器的数据复制器源程序
;STC8g1k08a
;11.0592M
;P3.3 SDA
;P3.2 SCL
;P5.4 LED
;P5.5 复制开关
;
;==============================
; $NOMOD51
;$INCLUDE (stc8g.h)
P0M0        DATA    094H
P0M1        DATA    093H
P1M0        DATA    092H
P1M1        DATA    091H
P2M0        DATA    096H
P2M1        DATA    095H
P3M0        DATA    0B2H
P3M1        DATA    0B1H
P4M0        DATA    0B4H
P4M1        DATA    0B3H
P5M0        DATA    0CAH
P5M1        DATA    0C9H
P6M0        DATA    0CCH
P6M1        DATA    0CBH
P7M0        DATA    0E2H
P7M1        DATA    0E1H

sda EQU p3.3
scl EQU p3.2
fz bit p5.5
led bit p5.4
address EQU 08H
i2cdate EQU 09H

org 0000H
ljmp start
;======================== 存储器写
i2c_write:
i2c_write_a:
lcall i2c_start
mov a,r6
lcall i2c_send
lcall i2c_ack
Jc i2c_write_a
mov a,address
lcall i2c_send
lcall i2c_ack
mov a,i2cdate
lcall i2c_send
lcall i2c_ack
lcall i2c_stop
ret
;========================存储器读
i2c_read:
i2c_read_a:
lcall i2c_start
mov a,r2
lcall i2c_send
lcall i2c_ack
Jc i2c_read_a
mov a,address
lcall i2c_send
lcall i2c_ack
i2c_read_b:
lcall i2c_start
mov a,r4
lcall i2c_send
lcall i2c_ack
Jc i2c_read_b
i2c_rece:
lcall i2c_receive
mov i2cdate,a
lcall i2c_ack
lcall i2c_stop
ret
;=======================总线启动
i2c_start:         
setb scl
setb sda
lcall delay5us
nop
nop
nop
nop
nop
clr sda
lcall delay5us
nop
nop
nop
nop
nop
clr scl
ret
;=======================总线停止
i2c_stop:
clr sda
lcall delay5us
nop
nop
nop
nop
nop
setb scl
lcall delay5us
nop
nop
nop
nop
nop
setb sda
ret
;======================存储器应答
i2c_ack:
setb sda
lcall delay5us
nop
nop
nop
nop
nop
setb scl
Jb sda,i2c_ack0
clr c
sjmp i2c_ack_end
i2c_ack0:
setb c
i2c_ack_end:
lcall delay5us
nop
nop
nop
nop
nop
clr scl
ret
;=====================发送八位数据
i2c_send:
mov b,#08H
i2c_send1:
rlc a
mov sda,c
setb scl
lcall delay5us
nop
nop
nop
nop
nop
clr scl
djnz b,i2c_send1
ret
;====================接收八位数据
i2c_receive:
mov b,#08H
clr a
setb sda
i2c_receive_a:
setb scl
lcall delay5us
nop
nop
nop
nop
nop
mov c,sda
rlc a
clr scl
djnz b,i2c_receive_a
ret
;=======================延时程序
delay:
mov r1,#255
djnz r1,$
ret
;=======================延时程序
delay5us:                        ;@11.0592MHz

        NOP
        NOP
        PUSH        30H
        MOV                30H,#15
NEXT:
        DJNZ        30H,NEXT
        POP                30H
        RET


;===============256字节数据复制程序
copy:
mov r5,#0
s:
mov r2,#10100010b
mov r4,#10100011b
call i2c_read
mov i2cdate,a
setb led

mov r6,#10100000b
call i2c_write
inc address
djnz r5, s
clr led

ret
;=========================主程序
start:
MOV     SP, #5FH

            MOV     P0M0, #00H
            MOV     P0M1, #00H
            MOV     P1M0, #00H
            MOV     P1M1, #00H
            MOV     P2M0, #00H
            MOV     P2M1, #00H
            MOV     P3M0, #00H
            MOV     P3M1, #00H
            MOV     P4M0, #00H
            MOV     P4M1, #00H
            MOV     P5M0, #00H
            MOV     P5M1, #00H


mov p3,#255
clr led
mov address,#00H
wai:
jb fz,$
call delay
jnb fz,$
call copy
ljmp wai

end



回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:416
  • 最近打卡:2025-05-06 08:57:51
已绑定手机

39

主题

2010

回帖

6859

积分

论坛元老

积分
6859
发表于 2024-4-29 10:40:46 | 显示全部楼层
使用官方头文件,或者参考官方头文件方法定义P5试试:
  1. P5          DATA        0C8H
  2. P50         BIT         P5.0
  3. P51         BIT         P5.1
  4. P52         BIT         P5.2
  5. P53         BIT         P5.3
  6. P54         BIT         P5.4
  7. P55         BIT         P5.5
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:375
  • 最近打卡:2025-05-08 00:21:59
已绑定手机

2

主题

19

回帖

1612

积分

金牌会员

积分
1612
发表于 2024-4-29 11:15:49 | 显示全部楼层
乘风*** 发表于 2024-4-29 10:40
使用官方头文件,或者参考官方头文件方法定义P5试试:

官方头文件加载后会一直报错端口重复设置A10错误,把你发的这个复制加载到端口设置后可以正常编译通过了,实际烧写后测试24C复制也是正常工作的。原来主要是用89C和12C 及15系列的,8G和8H的最近才开始用,发现这个端口设置真的非常重要,设置不正确根本不要想用,不想原来的那些基本默认是双向口。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:375
  • 最近打卡:2025-05-08 00:21:59
已绑定手机

2

主题

19

回帖

1612

积分

金牌会员

积分
1612
发表于 2024-4-29 11:28:35 | 显示全部楼层
微信图片_20240429112310.jpg

112a5f598bd9dd123f0220a232075016.mp4

2.56 MB, 下载次数: 40

工作录像

回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-8 02:11 , Processed in 0.136369 second(s), 69 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表