打印

定义变量

[复制链接]
1415|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ousj|  楼主 | 2021-10-10 11:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
<span style="background-color: rgb(255, 255, 255);">今天刚开始自学pic的汇编,点了个小灯,在延时里我想用三个变量,为什么不能像这样用</span>tm0 db 0;tm1 dw 0;tm2 dw 0;初始化三个变量,再MOVWF到这三个变量的地址。

使用特权

评论回复
沙发
zwll| | 2021-10-10 11:31 | 只看该作者
不妨贴个完整点的代码片段,

使用特权

评论回复
板凳
xxrs| | 2021-10-10 11:33 | 只看该作者
嗯,以及你用的汇编器版本

使用特权

评论回复
地板
jiahy| | 2021-10-10 11:35 | 只看该作者
</span>tm0 db 0;tm1 dw 0;tm2 dw 0;这个语句汇编支持?

使用特权

评论回复
5
ousj|  楼主 | 2021-10-10 11:36 | 只看该作者

就是不支持,所以想问一下,汇编里局部变量全局变量是怎么定义的

使用特权

评论回复
6
ousj|  楼主 | 2021-10-10 11:38 | 只看该作者
#INCLUDE"p18F45K22.inc"
; TODO INSERT CONFIG CODE HERE USING CONFIG BITS GENERATOR
;???
LED_OFF EQU   01H
LED_ON EQU    08H
;????
TMO   EQU   20H
TM1   EQU   22H
TM2   EQU   24H
;tm0  db    0
;tm1  dw    0
;tm2  dw    0

RES_VECT  CODE    0x0000            ; processor reset vector
    ORG 0x0000
    NOP
    BCF TRISC ,3,0  ;PORTC.RC3?????
    ;CLRF TRISE   ;PORTE?????
    CLRF PORTC  ;PORTC??

    MOVLW 6CH
    MOVWF OSCCON    ;?????0b00111100
    CLRF OSCTUNE
    BSF OSCCON2 ,2 ,1;?????????
    GOTO    START                   ; go to beginning of program
DELAY_1S  
        MOVLW 06H ;??????06H??W
        MOVWF TMO ;?????????

LOOP1   MOVLW 0EBH ;?????????W
        MOVWF TM1 ;?????????
         
LOOP2   MOVLW 0ECH ;?????????W
        MOVWF TM2 ;?????????
        
LOOP3   DECFSZ TM2
        GOTO LOOP3
        DECFSZ TM1
        GOTO LOOP2
        DECFSZ 20H
        GOTO LOOP1
        RETURN
;TODO ADD INTERRUPTS HERE IF USED

MAIN CODE                      ; let linker place main program

START
       ; LOOP ; BCF LATC ,3 ,0
LOOP
        MOVLW LED_ON
        MOVWF LATC
        CALL DELAY_1S
        MOVLW LED_OFF
        MOVWF LATC
        CALL DELAY_1S
        GOTO LOOP                        ; loop forever
        END

使用特权

评论回复
7
ousj|  楼主 | 2021-10-10 11:43 | 只看该作者
编译器是mplab自带的mpasm V5.59

使用特权

评论回复
8
zwll| | 2021-10-10 11:45 | 只看该作者
在不说明的情况下,db,dw用于定义在程序区的数据,例如一个字符串
string db ‘hello world’
这种情况下,要把db写在代码的区域里

使用特权

评论回复
9
dingy| | 2021-10-10 11:48 | 只看该作者
能举个例子吗

使用特权

评论回复
10
heweibig| | 2021-10-10 11:50 | 只看该作者
MAIN CODE                      ; let linker place main program

string01 db "hello world"
START
       ; LOOP ; BCF LATC ,3 ,0

使用特权

评论回复
11
pengf| | 2021-10-10 11:52 | 只看该作者
如果想要在ram定义变量,要用idata或者是udata来说明,既可以加地址也可以不加
例如
udata   0x70
tm10 res 1
tm11 res 2

使用特权

评论回复
12
heweibig| | 2021-10-10 11:54 | 只看该作者
又或者
idata
tm00  DB    2
tm01  dw    1

使用特权

评论回复
13
renyaq| | 2021-10-10 11:56 | 只看该作者
本来idata是指预先初始化的变量,但是用idata这种类型,并不会像C语言编译器自动帮你初始化这个部分,还需要加入一段初始化代码

使用特权

评论回复
14
xxrs| | 2021-10-10 11:58 | 只看该作者
在C:\Program Files (x86)\Microchip\MPASM Suite\Example 当中有给出两个例子,都非常古老了。个人是不太建议这么玩的。

使用特权

评论回复
15
supernan| | 2021-10-10 11:59 | 只看该作者
从楼主的程序和提出的要求来看,可以换一种实现方法,即直接把   dis_Ds1302(); 放到中断函数中,并想办法让 flag_tz 触发该中断即可。

使用特权

评论回复
16
zhenykun| | 2021-10-10 12:01 | 只看该作者
不如用udata占位置

使用特权

评论回复
17
xxmmi| | 2021-10-10 12:03 | 只看该作者
自己在开始的时候初始化

使用特权

评论回复
18
wuhany| | 2021-10-10 12:05 | 只看该作者
话说都快要2201年了,怎么不用C呢,xc编译器免费的版本也能用到o1级别的优化啊。

使用特权

评论回复
19
ousj|  楼主 | 2021-10-10 12:07 | 只看该作者
明白了,多谢大家讨论这么多哈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

712

主题

7557

帖子

1

粉丝