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

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

[复制链接]
  • TA的每日心情
    开心
    7 小时前
  • 签到天数: 52 天

    [LV.5]常住居民I

    2

    主题

    12

    回帖

    240

    积分

    中级会员

    积分
    240
    发表于 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



    回复 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    10 小时前
  • 签到天数: 144 天

    [LV.7]常住居民III

    27

    主题

    1356

    回帖

    4217

    积分

    论坛元老

    积分
    4217
    发表于 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
    复制代码
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    7 小时前
  • 签到天数: 52 天

    [LV.5]常住居民I

    2

    主题

    12

    回帖

    240

    积分

    中级会员

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

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

    使用道具 举报

  • TA的每日心情
    开心
    7 小时前
  • 签到天数: 52 天

    [LV.5]常住居民I

    2

    主题

    12

    回帖

    240

    积分

    中级会员

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

    112a5f598bd9dd123f0220a232075016.mp4

    2.56 MB, 下载次数: 0

    工作录像

    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-20 19:41 , Processed in 0.063405 second(s), 43 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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